docs-cli 1.4.0__tar.gz → 1.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (436) hide show
  1. {docs_cli-1.4.0 → docs_cli-1.5.0}/PKG-INFO +1 -1
  2. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/INDEX.md +12 -8
  3. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/architecture.md +13 -4
  4. {docs_cli-1.4.0/docs → docs_cli-1.5.0/docs/archive/2026-05-27}/m11-pypi-publish.md +102 -24
  5. {docs_cli-1.4.0/src/docs_cli/skill/references → docs_cli-1.5.0/docs}/cli.md +148 -1
  6. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/convention.md +2 -2
  7. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m11-pypi-publish-impl.md +320 -6
  8. docs_cli-1.5.0/docs/m12-project-rename-impl.md +842 -0
  9. docs_cli-1.5.0/docs/m12-project-rename.md +474 -0
  10. docs_cli-1.5.0/docs/m13-pypi-publish-impl.md +111 -0
  11. docs_cli-1.5.0/docs/m13-pypi-publish.md +296 -0
  12. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/plan.md +64 -13
  13. docs_cli-1.5.0/docs/release-runbook.md +567 -0
  14. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/status.md +136 -36
  15. {docs_cli-1.4.0 → docs_cli-1.5.0}/pyproject.toml +1 -1
  16. {docs_cli-1.4.0 → docs_cli-1.5.0}/src/docs_cli/cli.py +389 -12
  17. {docs_cli-1.4.0 → docs_cli-1.5.0}/src/docs_cli/skill/SKILL.md +1 -0
  18. {docs_cli-1.4.0/docs → docs_cli-1.5.0/src/docs_cli/skill/references}/cli.md +148 -1
  19. {docs_cli-1.4.0 → docs_cli-1.5.0}/src/docs_cli/skill/references/convention.md +2 -2
  20. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/expected/docs-INDEX.md +12 -8
  21. docs_cli-1.5.0/tests/fixtures/trees/archive-with-incoming-refs/.docs.toml +6 -0
  22. docs_cli-1.5.0/tests/fixtures/trees/archive-with-incoming-refs/master.md +15 -0
  23. docs_cli-1.5.0/tests/fixtures/trees/archive-with-incoming-refs/sidekick.md +14 -0
  24. docs_cli-1.5.0/tests/fixtures/trees/archive-with-incoming-refs/witness.md +16 -0
  25. docs_cli-1.5.0/tests/fixtures/trees/multi-project/alpha-charter.md +8 -0
  26. docs_cli-1.5.0/tests/fixtures/trees/multi-project/alpha-old-spec.md +8 -0
  27. docs_cli-1.5.0/tests/fixtures/trees/multi-project/alpha-plan.md +11 -0
  28. docs_cli-1.5.0/tests/fixtures/trees/multi-project/alpha-spec.md +9 -0
  29. docs_cli-1.5.0/tests/fixtures/trees/multi-project/archive/2026-04-01/beta-old.md +8 -0
  30. docs_cli-1.5.0/tests/fixtures/trees/multi-project/beta-done.md +8 -0
  31. docs_cli-1.5.0/tests/fixtures/trees/multi-project/beta-notes.md +8 -0
  32. docs_cli-1.5.0/tests/fixtures/trees/multi-project/beta-status.md +9 -0
  33. docs_cli-1.5.0/tests/fixtures/trees/multi-project/topics/orphan.md +7 -0
  34. docs_cli-1.5.0/tests/fixtures/trees/multi-project-alpha-sidecar/.docs.toml +10 -0
  35. docs_cli-1.5.0/tests/fixtures/trees/rename-with-archive/.docs.toml +6 -0
  36. docs_cli-1.5.0/tests/fixtures/trees/rename-with-archive/archive/2026-04-01/old.md +12 -0
  37. docs_cli-1.5.0/tests/fixtures/trees/rename-with-archive/live.md +11 -0
  38. docs_cli-1.5.0/tests/fixtures/trees/rename-with-malformed/.docs.toml +6 -0
  39. docs_cli-1.5.0/tests/fixtures/trees/rename-with-malformed/broken.md +5 -0
  40. docs_cli-1.5.0/tests/fixtures/trees/rename-with-malformed/good-a.md +11 -0
  41. docs_cli-1.5.0/tests/fixtures/trees/rename-with-malformed/good-b.md +11 -0
  42. docs_cli-1.5.0/tests/test_cli_archive.py +316 -0
  43. docs_cli-1.5.0/tests/test_cli_project_rename.py +356 -0
  44. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_cli_touch.py +70 -0
  45. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_packaging.py +24 -23
  46. docs_cli-1.5.0/tests/test_version_metadata.py +75 -0
  47. docs_cli-1.4.0/docs/release-runbook.md +0 -344
  48. docs_cli-1.4.0/tests/test_cli_archive.py +0 -141
  49. {docs_cli-1.4.0 → docs_cli-1.5.0}/.gitignore +0 -0
  50. {docs_cli-1.4.0 → docs_cli-1.5.0}/LICENSE +0 -0
  51. {docs_cli-1.4.0 → docs_cli-1.5.0}/README.md +0 -0
  52. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/.docs.toml +0 -0
  53. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/archive/2026-05-27/m10-adoption-polish.md +0 -0
  54. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/charter.md +0 -0
  55. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/definition-of-ready.md +0 -0
  56. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/dual-status-adr.md +0 -0
  57. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m1-parser-and-index-log.md +0 -0
  58. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m1-parser-and-index.md +0 -0
  59. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m10-adoption-polish-impl.md +0 -0
  60. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m2-mutating-verbs-log.md +0 -0
  61. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m2-mutating-verbs.md +0 -0
  62. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m3-validation-and-query-log.md +0 -0
  63. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m3-validation-and-query.md +0 -0
  64. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m4-migration-helper-log.md +0 -0
  65. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m4-migration-helper.md +0 -0
  66. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m5-claude-code-skill-log.md +0 -0
  67. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m5-claude-code-skill.md +0 -0
  68. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m6-pypi-distribution-log.md +0 -0
  69. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m6-pypi-distribution.md +0 -0
  70. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m7-migration-accuracy-log.md +0 -0
  71. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m7-migration-accuracy.md +0 -0
  72. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m8-adoption-workflow-log.md +0 -0
  73. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m8-adoption-workflow.md +0 -0
  74. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m9-pypi-publish-log.md +0 -0
  75. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/m9-pypi-publish.md +0 -0
  76. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/test-strategy.md +0 -0
  77. {docs_cli-1.4.0 → docs_cli-1.5.0}/docs/vocab-adr.md +0 -0
  78. {docs_cli-1.4.0 → docs_cli-1.5.0}/src/docs_cli/__init__.py +0 -0
  79. {docs_cli-1.4.0 → docs_cli-1.5.0}/src/docs_cli/skill/references/adoption-playbook.md +0 -0
  80. {docs_cli-1.4.0 → docs_cli-1.5.0}/src/docs_cli/skill/references/docs-toml-template.toml +0 -0
  81. {docs_cli-1.4.0 → docs_cli-1.5.0}/src/docs_cli/skill/references/use-cases.md +0 -0
  82. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/.gitkeep +0 -0
  83. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/_typing/docs.pyi +0 -0
  84. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/conftest.py +0 -0
  85. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/body-from/clean-body.md +0 -0
  86. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/body-from/edge-case-keyword.md +0 -0
  87. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/body-from/with-frontmatter.txt +0 -0
  88. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/lifecycle/lifecycle-key.md +0 -0
  89. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/lifecycle/lifecycle-plus-status-prose.md +0 -0
  90. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/lifecycle/status-only.md +0 -0
  91. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/parser/well-formed.md +0 -0
  92. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/Abc5Migration/alpha.md +0 -0
  93. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/Abc5Migration/beta.md +0 -0
  94. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/Abc5Migration/gamma.md +0 -0
  95. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/FOO_BAR_BAZ/alpha.md +0 -0
  96. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/FOO_BAR_BAZ/beta.md +0 -0
  97. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/FOO_BAR_BAZ/gamma.md +0 -0
  98. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/FooBarBaz/alpha.md +0 -0
  99. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/FooBarBaz/beta.md +0 -0
  100. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/FooBarBaz/gamma.md +0 -0
  101. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/Foo_Bar_Baz/alpha.md +0 -0
  102. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/Foo_Bar_Baz/beta.md +0 -0
  103. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/Foo_Bar_Baz/gamma.md +0 -0
  104. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/Plan/alpha.md +0 -0
  105. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/Plan/beta.md +0 -0
  106. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/Plan/gamma.md +0 -0
  107. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/bugs-2026-01-26/alpha.md +0 -0
  108. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/bugs-2026-01-26/beta.md +0 -0
  109. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/bugs-2026-01-26/gamma.md +0 -0
  110. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/embedded-ai-discovery-parallel/alpha.md +0 -0
  111. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/embedded-ai-discovery-parallel/beta.md +0 -0
  112. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/project-names/embedded-ai-discovery-parallel/gamma.md +0 -0
  113. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-met/file-01-spec.md +0 -0
  114. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-met/file-02-spec.md +0 -0
  115. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-met/file-03-spec.md +0 -0
  116. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-met/file-04-spec.md +0 -0
  117. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-met/file-05-spec.md +0 -0
  118. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-met/file-06-spec.md +0 -0
  119. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-met/file-07-spec.md +0 -0
  120. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-met/file-08-no-suffix.md +0 -0
  121. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-met/file-09-no-suffix.md +0 -0
  122. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-met/file-10-no-suffix.md +0 -0
  123. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-not-met/file-01-spec.md +0 -0
  124. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-not-met/file-02-spec.md +0 -0
  125. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-not-met/file-03-spec.md +0 -0
  126. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-not-met/file-04-spec.md +0 -0
  127. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-not-met/file-05-plan.md +0 -0
  128. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-not-met/file-06-plan.md +0 -0
  129. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-not-met/file-07-plan.md +0 -0
  130. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-not-met/file-08-no-suffix.md +0 -0
  131. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-not-met/file-09-no-suffix.md +0 -0
  132. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/majority-not-met/file-10-no-suffix.md +0 -0
  133. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/sample-too-small/file-01-spec.md +0 -0
  134. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/sample-too-small/file-02-spec.md +0 -0
  135. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/sample-too-small/file-03-spec.md +0 -0
  136. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/sibling-defaulting/sample-too-small/file-04-no-suffix.md +0 -0
  137. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/status-prose/draft-companion.md +0 -0
  138. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/status-prose/freeform-status.md +0 -0
  139. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/status-prose/p0-implemented.md +0 -0
  140. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/status-prose/planning-only.md +0 -0
  141. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/cross-refs/.docs.toml +0 -0
  142. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/cross-refs/core.md +0 -0
  143. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/cross-refs/helper.md +0 -0
  144. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/cross-refs/overview.md +0 -0
  145. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/drift/.docs.toml +0 -0
  146. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/drift/archive/2026-01-01/properly-archived.md +0 -0
  147. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/drift/archive/2026-01-01/wrongly-active.md +0 -0
  148. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/drift/clean.md +0 -0
  149. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/drift/wrongly-archived.md +0 -0
  150. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/foreign/archived/proj-old-decision.md +0 -0
  151. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/foreign/proj-auth-spec.md +0 -0
  152. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/foreign/proj-db-adr.md +0 -0
  153. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/foreign/proj-deploy-log.md +0 -0
  154. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/foreign/proj-extra-metadata.md +0 -0
  155. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/foreign/proj-has-metadata.md +0 -0
  156. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/foreign/proj-no-h1.md +0 -0
  157. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/foreign/proj-overview.md +0 -0
  158. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/foreign/proj-release-plan.md +0 -0
  159. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/foreign/topics/proj-deep-notes.md +0 -0
  160. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/invalid/.docs.toml +0 -0
  161. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/invalid/bad-date.md +0 -0
  162. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/invalid/bad-role.md +0 -0
  163. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/invalid/bad-status.md +0 -0
  164. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/invalid/broken-ref.md +0 -0
  165. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/invalid/empty-role.md +0 -0
  166. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/invalid/no-h1.md +0 -0
  167. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/invalid/no-status.md +0 -0
  168. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/marker-preservation/.docs.toml +0 -0
  169. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/marker-preservation/INDEX.md +0 -0
  170. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/marker-preservation/lone-doc.md +0 -0
  171. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/minimal/.docs.toml +0 -0
  172. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/minimal/lone-doc.md +0 -0
  173. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/multi-project/.docs.toml +0 -0
  174. {docs_cli-1.4.0/tests/fixtures/trees/multi-project → docs_cli-1.5.0/tests/fixtures/trees/multi-project-alpha-sidecar}/alpha-charter.md +0 -0
  175. {docs_cli-1.4.0/tests/fixtures/trees/multi-project → docs_cli-1.5.0/tests/fixtures/trees/multi-project-alpha-sidecar}/alpha-old-spec.md +0 -0
  176. {docs_cli-1.4.0/tests/fixtures/trees/multi-project → docs_cli-1.5.0/tests/fixtures/trees/multi-project-alpha-sidecar}/alpha-plan.md +0 -0
  177. {docs_cli-1.4.0/tests/fixtures/trees/multi-project → docs_cli-1.5.0/tests/fixtures/trees/multi-project-alpha-sidecar}/alpha-spec.md +0 -0
  178. {docs_cli-1.4.0/tests/fixtures/trees/multi-project → docs_cli-1.5.0/tests/fixtures/trees/multi-project-alpha-sidecar}/archive/2026-04-01/beta-old.md +0 -0
  179. {docs_cli-1.4.0/tests/fixtures/trees/multi-project → docs_cli-1.5.0/tests/fixtures/trees/multi-project-alpha-sidecar}/beta-done.md +0 -0
  180. {docs_cli-1.4.0/tests/fixtures/trees/multi-project → docs_cli-1.5.0/tests/fixtures/trees/multi-project-alpha-sidecar}/beta-notes.md +0 -0
  181. {docs_cli-1.4.0/tests/fixtures/trees/multi-project → docs_cli-1.5.0/tests/fixtures/trees/multi-project-alpha-sidecar}/beta-status.md +0 -0
  182. {docs_cli-1.4.0/tests/fixtures/trees/multi-project → docs_cli-1.5.0/tests/fixtures/trees/multi-project-alpha-sidecar}/topics/orphan.md +0 -0
  183. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/nested/.docs.toml +0 -0
  184. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/nested/root-doc.md +0 -0
  185. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/nested/topics/deep-dive.md +0 -0
  186. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/README.md +0 -0
  187. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/archive-subdir/archived/foo-deprecated-plan.md +0 -0
  188. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/archive-subdir/archived/foo-historical-decision.md +0 -0
  189. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/archive-subdir/archived/foo-old-thing.md +0 -0
  190. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/archive-subdir/archived/foo-rejected-spec.md +0 -0
  191. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/archive-subdir/archived/foo-superseded-runbook.md +0 -0
  192. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/archive-subdir/foo-architecture-decision.md +0 -0
  193. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/archive-subdir/foo-bar-plan.md +0 -0
  194. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/archive-subdir/foo-bar-spec.md +0 -0
  195. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/archive-subdir/foo-charter.md +0 -0
  196. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/archive-subdir/foo-design-notes.md +0 -0
  197. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/archive-subdir/foo-launch-log.md +0 -0
  198. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/archive-subdir/foo-misc.md +0 -0
  199. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/archive-subdir/foo-overview.md +0 -0
  200. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/archive-subdir/foo-runbook.md +0 -0
  201. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/archive-subdir/foo-status.md +0 -0
  202. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/kebab-tiny/foo-bar-plan.md +0 -0
  203. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/kebab-tiny/foo-bar-spec.md +0 -0
  204. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/kebab-tiny/foo-bar-status.md +0 -0
  205. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/mixed-naming/API Reference.md +0 -0
  206. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/mixed-naming/Acme Plan - Database Population Plan.md +0 -0
  207. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/mixed-naming/AcmeApiSpec.md +0 -0
  208. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/mixed-naming/Foo_Design_Decision_Tree.md +0 -0
  209. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/mixed-naming/Foo_Domain_Spec.md +0 -0
  210. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/mixed-naming/Project_Status_Update.md +0 -0
  211. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/mixed-naming/User Guide - Operator Manual.md +0 -0
  212. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/mixed-naming/feature-rollout-plan.md +0 -0
  213. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/mixed-naming/incident-runbook.md +0 -0
  214. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/mixed-naming/release-notes.md +0 -0
  215. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_API_Spec.md +0 -0
  216. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Architecture.md +0 -0
  217. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Cards.md +0 -0
  218. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Charter.md +0 -0
  219. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_10_Spec.md +0 -0
  220. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_11_Spec.md +0 -0
  221. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_12_Spec.md +0 -0
  222. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_13_Spec.md +0 -0
  223. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_14_Spec.md +0 -0
  224. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_15_Spec.md +0 -0
  225. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_1_Spec.md +0 -0
  226. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_2_Spec.md +0 -0
  227. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_3_Spec.md +0 -0
  228. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_4_Spec.md +0 -0
  229. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_5_Spec.md +0 -0
  230. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_6_Spec.md +0 -0
  231. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_7_Spec.md +0 -0
  232. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_8_Spec.md +0 -0
  233. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_9_Spec.md +0 -0
  234. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Constraints.md +0 -0
  235. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Decision_Tree.md +0 -0
  236. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Design_Sketch.md +0 -0
  237. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Discovery_Plan.md +0 -0
  238. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Domain_Plan.md +0 -0
  239. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Handoff.md +0 -0
  240. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M1.md +0 -0
  241. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M10.md +0 -0
  242. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M10_Implementation.md +0 -0
  243. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M1_Implementation.md +0 -0
  244. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M2.md +0 -0
  245. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M2_Implementation.md +0 -0
  246. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M3.md +0 -0
  247. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M3_Implementation.md +0 -0
  248. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M4.md +0 -0
  249. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M4_Implementation.md +0 -0
  250. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M5.md +0 -0
  251. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M5_Implementation.md +0 -0
  252. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M6.md +0 -0
  253. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M6_Implementation.md +0 -0
  254. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M7.md +0 -0
  255. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M7_Implementation.md +0 -0
  256. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M8.md +0 -0
  257. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M8_Implementation.md +0 -0
  258. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M9.md +0 -0
  259. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_M9_Implementation.md +0 -0
  260. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Migration_Plan.md +0 -0
  261. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Module_Spec.md +0 -0
  262. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Plan.md +0 -0
  263. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Plan_Draft.md +0 -0
  264. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Plan_v3.md +0 -0
  265. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Pricing_Memo.md +0 -0
  266. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Provider_Spec.md +0 -0
  267. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Service_Spec.md +0 -0
  268. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Status.md +0 -0
  269. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Strategy_Outline.md +0 -0
  270. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Strategy_v2.md +0 -0
  271. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_10_Plan.md +0 -0
  272. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_11_Plan.md +0 -0
  273. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_12_Plan.md +0 -0
  274. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_13_Plan.md +0 -0
  275. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_14_Plan.md +0 -0
  276. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_15_Plan.md +0 -0
  277. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_1_Plan.md +0 -0
  278. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_2_Plan.md +0 -0
  279. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_3_Plan.md +0 -0
  280. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_4_Plan.md +0 -0
  281. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_5_Plan.md +0 -0
  282. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_6_Plan.md +0 -0
  283. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_7_Plan.md +0 -0
  284. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_8_Plan.md +0 -0
  285. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_9_Plan.md +0 -0
  286. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-large/Foo_Vendor_Brief.md +0 -0
  287. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-medium/Foo_Architecture.md +0 -0
  288. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-medium/Foo_Brief.md +0 -0
  289. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-medium/Foo_Charter.md +0 -0
  290. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-medium/Foo_Implementation.md +0 -0
  291. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-medium/Foo_Log.md +0 -0
  292. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-medium/Foo_M1.md +0 -0
  293. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-medium/Foo_M1_Implementation.md +0 -0
  294. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-medium/Foo_M2.md +0 -0
  295. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-medium/Foo_M2_Implementation.md +0 -0
  296. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-medium/Foo_M3.md +0 -0
  297. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-medium/Foo_M4.md +0 -0
  298. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-medium/Foo_Memo.md +0 -0
  299. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-medium/Foo_Outline.md +0 -0
  300. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-medium/Foo_Plan.md +0 -0
  301. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-medium/Foo_Sketch.md +0 -0
  302. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-medium/Foo_Status.md +0 -0
  303. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees/snake-medium/Foo_Strategy_v2.md +0 -0
  304. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/kebab-tiny/.docs.toml +0 -0
  305. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/kebab-tiny/INDEX.md +0 -0
  306. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/kebab-tiny/foo-bar-plan.md +0 -0
  307. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/kebab-tiny/foo-bar-spec.md +0 -0
  308. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/kebab-tiny/foo-bar-status.md +0 -0
  309. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/.docs.toml +0 -0
  310. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_API_Spec.md +0 -0
  311. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Architecture.md +0 -0
  312. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Cards.md +0 -0
  313. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Charter.md +0 -0
  314. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_10_Spec.md +0 -0
  315. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_11_Spec.md +0 -0
  316. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_12_Spec.md +0 -0
  317. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_13_Spec.md +0 -0
  318. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_14_Spec.md +0 -0
  319. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_15_Spec.md +0 -0
  320. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_1_Spec.md +0 -0
  321. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_2_Spec.md +0 -0
  322. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_3_Spec.md +0 -0
  323. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_4_Spec.md +0 -0
  324. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_5_Spec.md +0 -0
  325. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_6_Spec.md +0 -0
  326. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_7_Spec.md +0 -0
  327. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_8_Spec.md +0 -0
  328. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_9_Spec.md +0 -0
  329. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Constraints.md +0 -0
  330. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Decision_Tree.md +0 -0
  331. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Design_Sketch.md +0 -0
  332. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Discovery_Plan.md +0 -0
  333. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Domain_Plan.md +0 -0
  334. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Handoff.md +0 -0
  335. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M1.md +0 -0
  336. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M10.md +0 -0
  337. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M10_Implementation.md +0 -0
  338. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M1_Implementation.md +0 -0
  339. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M2.md +0 -0
  340. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M2_Implementation.md +0 -0
  341. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M3.md +0 -0
  342. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M3_Implementation.md +0 -0
  343. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M4.md +0 -0
  344. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M4_Implementation.md +0 -0
  345. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M5.md +0 -0
  346. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M5_Implementation.md +0 -0
  347. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M6.md +0 -0
  348. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M6_Implementation.md +0 -0
  349. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M7.md +0 -0
  350. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M7_Implementation.md +0 -0
  351. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M8.md +0 -0
  352. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M8_Implementation.md +0 -0
  353. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M9.md +0 -0
  354. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M9_Implementation.md +0 -0
  355. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Migration_Plan.md +0 -0
  356. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Module_Spec.md +0 -0
  357. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Plan.md +0 -0
  358. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Plan_Draft.md +0 -0
  359. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Plan_v3.md +0 -0
  360. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Pricing_Memo.md +0 -0
  361. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Provider_Spec.md +0 -0
  362. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Service_Spec.md +0 -0
  363. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Status.md +0 -0
  364. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Strategy_Outline.md +0 -0
  365. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Strategy_v2.md +0 -0
  366. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_10_Plan.md +0 -0
  367. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_11_Plan.md +0 -0
  368. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_12_Plan.md +0 -0
  369. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_13_Plan.md +0 -0
  370. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_14_Plan.md +0 -0
  371. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_15_Plan.md +0 -0
  372. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_1_Plan.md +0 -0
  373. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_2_Plan.md +0 -0
  374. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_3_Plan.md +0 -0
  375. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_4_Plan.md +0 -0
  376. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_5_Plan.md +0 -0
  377. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_6_Plan.md +0 -0
  378. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_7_Plan.md +0 -0
  379. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_8_Plan.md +0 -0
  380. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_9_Plan.md +0 -0
  381. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Vendor_Brief.md +0 -0
  382. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-large/INDEX.md +0 -0
  383. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/.docs.toml +0 -0
  384. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Architecture.md +0 -0
  385. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Brief.md +0 -0
  386. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Charter.md +0 -0
  387. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Implementation.md +0 -0
  388. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Log.md +0 -0
  389. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_M1.md +0 -0
  390. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_M1_Implementation.md +0 -0
  391. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_M2.md +0 -0
  392. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_M2_Implementation.md +0 -0
  393. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_M3.md +0 -0
  394. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_M4.md +0 -0
  395. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Memo.md +0 -0
  396. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Outline.md +0 -0
  397. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Plan.md +0 -0
  398. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Sketch.md +0 -0
  399. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Status.md +0 -0
  400. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Strategy_v2.md +0 -0
  401. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/real-trees-adopted/snake-medium/INDEX.md +0 -0
  402. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/with-archive/.docs.toml +0 -0
  403. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/with-archive/.hidden-file +0 -0
  404. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/with-archive/.private/should-not-be-walked.md +0 -0
  405. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/with-archive/alpha.md +0 -0
  406. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/with-archive/archive/2026-01-01/INDEX.md +0 -0
  407. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/with-archive/archive/2026-01-01/old-plan.md +0 -0
  408. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/with-archive/beta.md +0 -0
  409. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/fixtures/trees/with-archive/notes.txt +0 -0
  410. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/manual/m7_success_criteria.py +0 -0
  411. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_archive_normalisation.py +0 -0
  412. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_body_from.py +0 -0
  413. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_check.py +0 -0
  414. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_cli_check.py +0 -0
  415. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_cli_index.py +0 -0
  416. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_cli_list.py +0 -0
  417. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_cli_migrate.py +0 -0
  418. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_cli_mv.py +0 -0
  419. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_cli_new.py +0 -0
  420. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_config.py +0 -0
  421. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_edit.py +0 -0
  422. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_exclude.py +0 -0
  423. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_index.py +0 -0
  424. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_inference.py +0 -0
  425. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_lifecycle_rename.py +0 -0
  426. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_migrate.py +0 -0
  427. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_model.py +0 -0
  428. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_multi_project_hints.py +0 -0
  429. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_non_md_surfacing.py +0 -0
  430. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_project_normalisation.py +0 -0
  431. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_query.py +0 -0
  432. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_skill.py +0 -0
  433. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_skill_adoption.py +0 -0
  434. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_skill_refs.py +0 -0
  435. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_triage_flags.py +0 -0
  436. {docs_cli-1.4.0 → docs_cli-1.5.0}/tests/test_walker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docs-cli
3
- Version: 1.4.0
3
+ Version: 1.5.0
4
4
  Summary: Prescriptive CLI for managing trees of structured Markdown docs.
5
5
  Project-URL: Homepage, https://github.com/ArtRichards/docs-cli
6
6
  Project-URL: Repository, https://github.com/ArtRichards/docs-cli
@@ -5,13 +5,13 @@ This directory is the docs root for the `docs` CLI itself. We eat our own dog fo
5
5
  The hand-written preamble (this paragraph, and anything outside the marker block) is preserved by the tool. Only content between `<!-- docs:generated start -->` and `<!-- docs:generated end -->` is rewritten.
6
6
 
7
7
  <!-- docs:generated start -->
8
- _Generated 2026-05-27. 32 docs active, 1 archived._
8
+ _Generated 2026-05-29. 35 docs active, 2 archived._
9
9
 
10
10
  ## Project — docs
11
11
 
12
12
  ### Active — Status
13
13
 
14
- - [status.md](status.md) — _status_ — **This is the single source of truth for project progress. Update only this file when milestones complete or phases…. Updated 2026-05-27.
14
+ - [status.md](status.md) — _status_ — **This is the single source of truth for project progress. Update only this file when milestones complete or phases…. Updated 2026-05-29.
15
15
 
16
16
  ### Active — Charter
17
17
 
@@ -19,16 +19,17 @@ _Generated 2026-05-27. 32 docs active, 1 archived._
19
19
 
20
20
  ### Active — Plan
21
21
 
22
- - [plan.md](plan.md) — _plan_ — Three milestones to v1, then a migration helper, then a Claude Code skill wrapper. v1.1 picks up with packaging, then…. Updated 2026-05-27.
22
+ - [plan.md](plan.md) — _plan_ — Three milestones to v1, then a migration helper, then a Claude Code skill wrapper. v1.1 picks up with packaging, then…. Updated 2026-05-29.
23
23
 
24
24
  ### Active — Spec
25
25
 
26
- - [cli.md](cli.md) — _spec_ — This spec defines the `docs` command-line surface: subcommands, flags, output formats, and exit codes. The on-disk…. Updated 2026-05-27.
27
- - [convention.md](convention.md) — _spec_ — This spec defines the on-disk convention that `docs` reads and writes. It is the portable, tool-independent part: any…. Updated 2026-05-27.
26
+ - [cli.md](cli.md) — _spec_ — This spec defines the `docs` command-line surface: subcommands, flags, output formats, and exit codes. The on-disk…. Updated 2026-05-28.
27
+ - [convention.md](convention.md) — _spec_ — This spec defines the on-disk convention that `docs` reads and writes. It is the portable, tool-independent part: any…. Updated 2026-05-28.
28
28
 
29
29
  ### Active — Milestone
30
30
 
31
- - [m11-pypi-publish.md](m11-pypi-publish.md) — _milestone_ — > **Stub-drafted 2026-05-27, post M10 closeout.** M11 enters > active state immediately — the M10 wheel + sdist already…. Updated 2026-05-27.
31
+ - [m13-pypi-publish.md](m13-pypi-publish.md) — _milestone_ — > **Stub-drafted 2026-05-29, post M12 closeout.** M13 enters > active state immediately — the M12 wheel + sdist already…. Updated 2026-05-29.
32
+ - [m12-project-rename.md](m12-project-rename.md) — _milestone_ — > **Stub-drafted 2026-05-28** following M11 closeout. M12 bundles > one operator-facing headline feature (`docs project…. Updated 2026-05-28.
32
33
  - [m7-migration-accuracy.md](m7-migration-accuracy.md) — _milestone_ — - Milestone: M7 (v1.1) - Title: Migration plan accuracy - Surface: extensions to `docs migrate`'s inference…. Updated 2026-05-25.
33
34
  - [m8-adoption-workflow.md](m8-adoption-workflow.md) — _milestone_ — - Milestone: M8 (v1.1) - Title: Adoption workflow — agent-driveable - Surface: new CLI flags + verbs (`--exclude`,…. Updated 2026-05-25.
34
35
  - [m9-pypi-publish.md](m9-pypi-publish.md) — _milestone_ — > **Stub-drafted 2026-05-24, post M6 scope reframe.** M9 enters > active state once M8 ships. The operative checklist…. Updated 2026-05-25.
@@ -41,6 +42,8 @@ _Generated 2026-05-27. 32 docs active, 1 archived._
41
42
 
42
43
  ### Active — Log
43
44
 
45
+ - [m13-pypi-publish-impl.md](m13-pypi-publish-impl.md) — _log_ — Chronological log of work on M13 — PyPI publish 1.5.0. Append a section per runbook phase (operator prep → pre-publish…. Updated 2026-05-29.
46
+ - [m12-project-rename-impl.md](m12-project-rename-impl.md) — _log_ — Chronological log of work on M12 — Project rename verb + M11 wart fixes + version SoT (v1.5.0). Append a section per…. Updated 2026-05-28.
44
47
  - [m10-adoption-polish-impl.md](m10-adoption-polish-impl.md) — _log_ — Chronological log of work on M10 — Adoption-flow polish + 1.3.0 carry-overs. Append a section per phase with objective,…. Updated 2026-05-27.
45
48
  - [m11-pypi-publish-impl.md](m11-pypi-publish-impl.md) — _log_ — Chronological log of work on M11 — PyPI publish `docs-cli` 1.4.0. Append a section per phase (Operator prep →…. Updated 2026-05-27.
46
49
  - [m7-migration-accuracy-log.md](m7-migration-accuracy-log.md) — _log_ — - Project: docs - Milestone: M7 — Migration plan accuracy - Started: 2026-05-24 - Progress: **Phase 1 complete; Phase 2…. Updated 2026-05-25.
@@ -60,15 +63,16 @@ _Generated 2026-05-27. 32 docs active, 1 archived._
60
63
 
61
64
  ### Active — Runbook
62
65
 
63
- - [release-runbook.md](release-runbook.md) — _runbook_ — The operator-driven checklist for shipping `docs-cli` to PyPI. This runbook drove **M9 — `docs-cli==1.3.0`** (shipped…. Updated 2026-05-25.
66
+ - [release-runbook.md](release-runbook.md) — _runbook_ — The operator-driven checklist for shipping `docs-cli` to PyPI. This runbook drove **M9 — `docs-cli==1.3.0`** (shipped…. Updated 2026-05-27.
64
67
 
65
68
  ### Active — Reference
66
69
 
67
- - [architecture.md](architecture.md) — _reference_ — Single Python module at `src/docs_cli/cli.py`, exposed as the `docs` console-script via the `docs_cli.cli:main` entry…. Updated 2026-05-27.
70
+ - [architecture.md](architecture.md) — _reference_ — Single Python module at `src/docs_cli/cli.py`, exposed as the `docs` console-script via the `docs_cli.cli:main` entry…. Updated 2026-05-28.
68
71
  - [definition-of-ready.md](definition-of-ready.md) — _reference_ — Gate-check before implementation begins. Implementation does not start until every item is green.. Updated 2026-05-22.
69
72
  - [test-strategy.md](test-strategy.md) — _reference_ — | Layer | Tool | Scope | |---|---|---| | Unit | pytest | Parser, walker, render, vocab loading. Pure-function focus. |…. Updated 2026-05-20.
70
73
 
71
74
  ## Archived
72
75
 
73
76
  - [archive/2026-05-27/m10-adoption-polish.md](archive/2026-05-27/m10-adoption-polish.md) — _milestone_ — - Milestone: M10 (v1.4.0) - Title: Adoption-flow polish + 1.3.0 carry-overs - Surface: two new CLI features (`docs…. Updated 2026-05-27.
77
+ - [archive/2026-05-27/m11-pypi-publish.md](archive/2026-05-27/m11-pypi-publish.md) — _milestone_ — > **Stub-drafted 2026-05-27, post M10 closeout.** M11 enters > active state immediately — the M10 wheel + sdist already…. Updated 2026-05-27.
74
78
  <!-- docs:generated end -->
@@ -3,7 +3,7 @@
3
3
  Lifecycle: active
4
4
  Role: reference
5
5
  Project: docs
6
- Updated: 2026-05-27
6
+ Updated: 2026-05-28
7
7
 
8
8
  Related:
9
9
  - implements: charter.md
@@ -24,20 +24,22 @@ inside the same wheel as package data.
24
24
  src/docs_cli/ (Python 3.11+, stdlib only)
25
25
  ├── __init__.py ─ lazy re-export of `main`
26
26
  ├── cli.py ─ the CLI module (~3.8k lines)
27
- │ ├── dunder version (__version__ = "1.4.0")
27
+ │ ├── dunder version (__version__ = importlib.metadata.version("docs-cli"))
28
28
  │ ├── config — TOML load, Vocab merging, archive-dir resolution,
29
29
  │ │ `[migrate]` per-tree overrides (M7),
30
30
  │ │ `[exclude]` + `.docsignore` (M8)
31
31
  │ ├── model — Doc dataclass; metadata block parser + editors
32
32
  │ ├── walker — directory traversal, filter, archive detection
33
33
  │ ├── index — INDEX.md render with marker-block preservation
34
- │ ├── archive — atomic move + lifecycle edit (M2; M7 rename)
34
+ │ ├── archive — atomic move + lifecycle edit (M2; M7 rename;
35
+ │ │ M12 referring-edge rewrite)
35
36
  │ ├── mv — rename + Related: rewrite across tree (M2)
36
37
  │ ├── new — scaffolded doc creation (M2)
37
- │ ├── touch — Updated: bump (M2)
38
+ │ ├── touch — Updated: bump (M2; M12 outside-root refusal)
38
39
  │ ├── check — validation rules + exit-code matrix (M3)
39
40
  │ ├── list — query view, human + --json (M3)
40
41
  │ ├── migrate — foreign-tree inference + plan/apply (M4)
42
+ │ ├── project — rename verb (M12)
41
43
  │ ├── install-skill — materialise the bundled skill onto a host (M6)
42
44
  │ └── cli — argparse dispatch, exit codes, --root resolution
43
45
  └── skill/ ─ bundled Claude Code skill (M5)
@@ -50,6 +52,13 @@ src/docs_cli/ (Python 3.11+, stdlib only)
50
52
  └── docs-toml-template.toml (M8 F8; bundle-only starter)
51
53
  ```
52
54
 
55
+ > Pinned by `tests/test_packaging.py` A3 to the bumping-target literal;
56
+ > runtime read goes through stdlib `importlib.metadata` so a single
57
+ > `pyproject.toml` version bump propagates to `docs --version`
58
+ > automatically (M12). Fallback to `0.0.0+local` (M12 — OQ-4) if
59
+ > `importlib.metadata.PackageNotFoundError` is raised — protects
60
+ > fresh-clone runs without `pip install -e .`.
61
+
53
62
  **Sibling artifact: the Claude Code skill.** The Claude Code skill at
54
63
  `src/docs_cli/skill/` (M5) is **not** a `cli.py` module and adds no
55
64
  Python — it is a standalone Markdown artifact that *drives* the verbs
@@ -1,9 +1,10 @@
1
1
  # M11 — PyPI publish 1.4.0
2
2
 
3
- Lifecycle: active
3
+ Lifecycle: archived
4
4
  Role: milestone
5
5
  Project: docs
6
6
  Updated: 2026-05-27
7
+ Archived-reason: Milestone M11 complete; docs-cli==1.4.0 shipped to PyPI 2026-05-27
7
8
 
8
9
  Related:
9
10
  - parent-of: m11-pypi-publish-impl.md
@@ -161,12 +162,28 @@ runbook's sections are the phases (mirrors M9 exactly):
161
162
  stderr 0 bytes / `.docs.toml` auto-emitted) passed against
162
163
  TestPyPI-served wheel. Temporary `pyproject.toml` rename
163
164
  reverted cleanly. Rehearsal whl sha256 `3693b9f7…`.
164
- - [ ] Real PyPI publish — `docs-cli==1.4.0` live; sha256
165
- chain-of-custody from build → upload → PyPI-served wheel
166
- verified bit-perfect
167
- - [ ] Post-release `v1.4.0` tag + GitHub release; doc closeouts
168
- (M10 + M11); token re-scope rolls forward as M9 open follow-on
169
- (operator UI work, async)
165
+ - [x] Real PyPI publish — `docs-cli==1.4.0` LIVE on PyPI at
166
+ `https://pypi.org/project/docs-cli/1.4.0/`. Fresh Phase 4
167
+ build under canonical `name = "docs-cli"`; both artefacts
168
+ twine-check PASS; upload PASS (PyPI token validated).
169
+ Chain-of-custody **bit-perfect** PyPI-served whl sha256
170
+ `7af7eb5c…` byte-identical to local Phase 4 build.
171
+ Throwaway-venv install from PyPI succeeded; full smoke +
172
+ M10 headline contract (`migrate --apply --quiet` → exit 0
173
+ / stdout 0 bytes / stderr 0 bytes / `.docs.toml`
174
+ auto-emitted) PASS against PyPI-served wheel.
175
+ - [x] Post-release — `m11/milestone-setup` ff-merged into `main`
176
+ and pushed (`8998747..b8d8af3`); annotated `v1.4.0` tag
177
+ (tag-object `4de329b9…` → commit `b8d8af3`) pushed to
178
+ `origin`; GitHub release live at
179
+ `https://github.com/ArtRichards/docs-cli/releases/tag/v1.4.0`;
180
+ release notes amended post-create to drop stale "deferred
181
+ to M11" wording; doc closeouts (plan/status/INDEX +
182
+ dogfood snapshot) landed; `docs archive --cascade` ran
183
+ (milestone doc archived, impl log stays
184
+ `Lifecycle: active` per M8/M9/M10 pattern, release-runbook
185
+ + status declined). Token re-scope rolls forward as M9
186
+ open follow-on.
170
187
 
171
188
  Each ticks as the runbook's corresponding section completes.
172
189
 
@@ -223,28 +240,34 @@ truly silent; `.docs.toml` auto-emitted; `docs check` exit 0).
223
240
 
224
241
  M11 is complete when:
225
242
 
226
- - [ ] `pip install docs-cli==1.4.0` works from PyPI on a clean
243
+ - [x] `pip install docs-cli==1.4.0` works from PyPI on a clean
227
244
  host with Python 3.11+ and produces a working `docs` command.
228
- - [ ] `docs --version` from the PyPI-installed wheel prints
229
- `docs 1.4.0`.
230
- - [ ] `docs migrate --apply --quiet <foreign-tree>` from the
245
+ (Phase 4: throwaway venv `/tmp/docs-real-venv` install
246
+ succeeded first attempt.)
247
+ - [x] `docs --version` from the PyPI-installed wheel prints
248
+ `docs 1.4.0`. (Phase 4 smoke.)
249
+ - [x] `docs migrate --apply --quiet <foreign-tree>` from the
231
250
  PyPI-installed wheel produces empty stdout + empty stderr
232
251
  (the headline M10 contract — re-verified against the
233
- published artefact, not just the local build).
234
- - [ ] `docs install-skill` from the PyPI-installed wheel places a
252
+ published artefact, not just the local build). (Phase 4
253
+ against synthetic `/tmp/m11-pypi-foreign/`: exit 0 / stdout
254
+ 0 bytes / stderr 0 bytes.)
255
+ - [x] `docs install-skill` from the PyPI-installed wheel places a
235
256
  host-correct skill that drives the verbs identically to the
236
- in-repo install.
237
- - [ ] The `v1.4.0` tag and GitHub release exist at
257
+ in-repo install. (Phase 4: fresh / no-op / `--symlink`-
258
+ rejected cycle all behaved correctly.)
259
+ - [x] The `v1.4.0` tag and GitHub release exist at
238
260
  `https://github.com/ArtRichards/docs-cli/releases/tag/v1.4.0`.
239
- - [ ] All Phase Checklist items above are ticked.
240
- - [ ] `docs/status.md` reflects M10 + M11 as Complete with the
241
- actual publish date.
242
- - [ ] `docs/m11-pypi-publish-impl.md` carries a
243
- milestone-completion summary describing what actually
244
- happened (which `1.4.x` shipped if TestPyPI surfaced a
245
- bug forcing a `1.4.1` rebuild, the published version, the
246
- sha256 of the published wheel + sdist, the publish
247
- timestamp, any deviations from the runbook).
261
+ - [x] All Phase Checklist items above are ticked.
262
+ - [x] `docs/status.md` reflects M10 + M11 as Complete with the
263
+ actual publish date 2026-05-27.
264
+ - [x] `docs/m11-pypi-publish-impl.md` carries a
265
+ milestone-completion summary with the published version
266
+ (`1.4.0` — no TestPyPI-surfaced regression forced a
267
+ `1.4.x` bump), wheel + sdist sha256, publish timestamp, and
268
+ deviations (CHANGELOG amend at Phase 5; JSON metadata
269
+ cache lag at both registries; TestPyPI squatter detour
270
+ rolled forward).
248
271
 
249
272
  ## OPEN QUESTIONS
250
273
 
@@ -253,3 +276,58 @@ walk (TestPyPI ownership status; token re-scope status; any
253
276
  runbook-deviation needed for v1.4 specifically) will be recorded
254
277
  in the Milestone-completion summary as they surface, mirroring
255
278
  the M9 pattern._
279
+
280
+ _At milestone close (2026-05-27): no plan-level open questions
281
+ emerged. TestPyPI ownership status was re-confirmed
282
+ (squatter unchanged; detour rolls forward). Token re-scope
283
+ status was passively confirmed (M9-era tokens still drove M11
284
+ unchanged; re-scope remains the M9 async follow-on). One
285
+ runbook-deviation surfaced (CHANGELOG amend at Phase 5 to
286
+ update the M10-authored "deferred" wording) — see the impl
287
+ log's milestone-completion summary for the full deviation
288
+ list, deduplicated for future-release reference._
289
+
290
+ ## Milestone-completion summary
291
+
292
+ **Complete 2026-05-27.** `docs-cli==1.4.0` is live on PyPI at
293
+ `https://pypi.org/project/docs-cli/1.4.0/`. Annotated tag
294
+ `v1.4.0` at commit `b8d8af3` pushed to `origin`. GitHub release
295
+ at `https://github.com/ArtRichards/docs-cli/releases/tag/v1.4.0`.
296
+
297
+ | | sha256 |
298
+ |---|---|
299
+ | `docs_cli-1.4.0-py3-none-any.whl` | `7af7eb5cb67a860e16d34fb6e8084207e4d3abf2d81fb013fef3b1721c4ec050` |
300
+ | `docs_cli-1.4.0.tar.gz` | `0b0dd2ce1302b59cc862549a0d55fadf7210e27cfcd2e38b5f5f9ad31350c05b` |
301
+
302
+ Chain-of-custody bit-perfect: the PyPI-served wheel sha256
303
+ matches the local Phase 4 build byte-for-byte (verified via
304
+ `pip download --no-deps`). Headline M10 contract verified
305
+ against the PyPI-served wheel: `docs migrate --apply --quiet`
306
+ against a synthetic foreign tree produced exit 0 / stdout 0
307
+ bytes / stderr 0 bytes / `.docs.toml` auto-emitted / adopted
308
+ tree passes `docs check`.
309
+
310
+ Deviations recorded for v1.5+ releases:
311
+
312
+ 1. **CHANGELOG amend at Phase 5.** The M10-authored 1.4.0
313
+ entry said "deferred to M11"; M11 Phase 5 amended to
314
+ "Published to PyPI 2026-05-27 via M11" and `gh release edit`
315
+ pushed the corrected text into the public release notes
316
+ (the PyPI-served sdist's CHANGELOG carries the original
317
+ wording — immutable).
318
+ 2. **JSON metadata cache lag at TestPyPI + PyPI.** Both
319
+ `/pypi/<pkg>/json` endpoints lagged the simple index by
320
+ 60-120s post-upload. Don't gate post-upload verification
321
+ on JSON refresh — `pip install` is the authoritative signal.
322
+ 3. **TestPyPI squatter detour rolls forward.** Bare `docs-cli`
323
+ on TestPyPI still parked at `0.1.0` (no author). M11
324
+ continued M9's `docs-cli-rehearsal` rehearsal-name detour.
325
+ 4. **Repo visibility flip N/A.** Already public from M9.
326
+ 5. **Token re-scope rolls forward.** M9 follow-on; bootstrap
327
+ "Entire account" tokens drove M11 unchanged.
328
+
329
+ The release-runbook.md remains the operative reference for
330
+ v1.5+ — augmented in spirit by these five deviations
331
+ (deviation 1 in particular suggests authoring future
332
+ implementation-milestone CHANGELOG entries with wording
333
+ that survives the eventual publish event unchanged).
@@ -3,7 +3,7 @@
3
3
  Lifecycle: active
4
4
  Role: spec
5
5
  Project: docs
6
- Updated: 2026-05-27
6
+ Updated: 2026-05-28
7
7
 
8
8
  Related:
9
9
  - pairs-with: convention.md
@@ -71,6 +71,22 @@ Atomically archive a doc.
71
71
 
72
72
  Atomicity: the metadata edit happens in a tmp file, fsync'd, renamed; the move happens only after the edit succeeds; the index regen runs last. A failure leaves the original file untouched.
73
73
 
74
+ **Referring-edge rewrite (M12).** After the move, `docs archive`
75
+ rewrites every `Related: <verb>: <old-rel>` bullet across the active
76
+ tree to point at `archive/<YYYY-MM-DD>/<basename>`. Mirrors `docs mv`'s
77
+ walker (`rewrite_related_refs`) — only the `Related:` field is
78
+ considered; prose markdown references are deliberately left alone.
79
+ Archive-subtree docs are read-only and are NOT updated. The rewrite
80
+ is part of the same atomic batch as the move + lifecycle edit: a
81
+ single end-of-batch INDEX refresh covers everything.
82
+
83
+ `--cascade` (M12 — OQ-D) extends this — when the cascade archives
84
+ related docs B, C, …, the referring-edge rewrites for every moved doc
85
+ run as a single atomic batch with one INDEX refresh at the end.
86
+ Per-doc cascade-archive failures still surface but only docs that
87
+ actually moved get their referring edges rewritten. Cascade remains
88
+ one-hop only (M2 decision unchanged).
89
+
74
90
  Exits 1 on metadata-edit failure; 2 on archive-dir creation failure.
75
91
 
76
92
  ### `docs mv <old> <new>`
@@ -171,6 +187,129 @@ resolve to different docs roots) is **undefined behaviour and out of
171
187
  M10 scope** — the validate-all-first pass refuses with exit 1 + an
172
188
  "outside the resolved docs root" message.
173
189
 
190
+ **Outside-docs-root refusal (M12 — OQ-C).** If `--root` is not given
191
+ and no `.docs.toml` exists in the cwd's ancestor chain, `docs touch`
192
+ refuses with exit 2 + stderr message
193
+ `docs: touch: <path> is not under a docs root with .docs.toml; refusing`.
194
+ The file is left unchanged and no INDEX refresh runs (avoiding the M11
195
+ cascade-crash where a downstream walk failed on the first non-managed
196
+ sibling). An explicit `--root <dir>` bypasses the refusal **only when**
197
+ `<dir>/.docs.toml` exists; if `--root` is set but its `.docs.toml` is
198
+ missing, `touch` refuses with
199
+ `docs: touch: --root <root> does not contain .docs.toml; refusing`
200
+ (exit 2) (M12 — OQ-11).
201
+
202
+ ### `docs project rename <new-name>`
203
+
204
+ Rename the docs root's project (M12). Rewrites `.docs.toml`'s
205
+ `[project] name = "<old>"` to `name = "<new>"` **and** every
206
+ conformant `Project: <old>` line in every active doc, atomically, with
207
+ a single end-of-batch INDEX refresh.
208
+
209
+ ```
210
+ docs project rename <new-name> [--dry-run] [--quiet] [--root DIR]
211
+ ```
212
+
213
+ `<new-name>` is required. A missing positional triggers argparse's
214
+ default exit 2.
215
+
216
+ **Resolution.** Operates on the docs root resolved from cwd via the
217
+ standard upward `.docs.toml` walk, unless `--root` overrides it
218
+ (M12 — OQ-1). If the resolved root has no `.docs.toml`, exits 2 with
219
+ stderr `docs: project rename: <cwd> is not under a docs root with .docs.toml; refusing`.
220
+
221
+ **Auto-normalisation (M12 — OQ-A).** The operator-supplied `<new-name>`
222
+ is run through M7's `normalise_project_name()` (the same machinery
223
+ `docs migrate` already uses). When the normalised form differs from
224
+ the input, stderr carries one line (gated on `not --quiet`):
225
+
226
+ ```
227
+ docs: project rename: normalised "<input>" to "<normalised>"
228
+ ```
229
+
230
+ before the rewrite proceeds with the normalised value. The current
231
+ `.docs.toml` `[project] name` value is read **as written** for the
232
+ no-op comparison — no double-normalisation (M12 — OQ-3).
233
+
234
+ **Empty-name rejection (M12 — OQ-9).** If post-normalisation
235
+ `<new-name>` is empty or whitespace-only, refuses with exit 2 + stderr
236
+ `docs: project rename: <input> normalises to empty string; project name must be non-empty`.
237
+
238
+ **What gets rewritten** (success path):
239
+
240
+ - `.docs.toml`'s `[project] name = "<old>"` line → `name = "<new>"`.
241
+ - Every conformant `Project: <old>` line in every **active-tree** doc
242
+ → `Project: <new>`.
243
+ - Docs that have no explicit `Project:` line implicitly resolve to the
244
+ docs-root project; on rename, a `Project: <new>` line is inserted
245
+ into those docs (consistent with M2's `set_metadata_field` behaviour
246
+ for missing-field cases).
247
+ - `INDEX.md` regenerated once at end of batch.
248
+
249
+ **Multi-project tolerance (M12 — OQ-B).** A tree whose active docs
250
+ carry mixed `Project:` values (the M7-tolerated multi-project shape)
251
+ is walked completely: docs whose `Project:` matches `<old>` are
252
+ rewritten; docs with a non-matching `Project:` are reported in the
253
+ success footer but never mutated.
254
+
255
+ **Archive-subtree skip.** Docs under the configured `archive_dir` are
256
+ read-only by convention (M3); `project rename` skips them and reports
257
+ the count in the footer.
258
+
259
+ **Atomic semantics.** Validate-all-first: parse every active doc,
260
+ build the rewrite tuple + the sidecar plan; if any step in
261
+ validate-and-prepare raises, exits 1 (or 2 for a malformed
262
+ `.docs.toml`) with the offending path named on stderr and no on-disk
263
+ mutation. After validation passes, every rewrite is committed via
264
+ `atomic_write`, then `.docs.toml` is rewritten, then `INDEX.md` is
265
+ refreshed exactly once.
266
+
267
+ **`--dry-run`.** Prints one `docs: would rewrite Project: in <rel-path>`
268
+ line per matching doc, plus
269
+ `docs: would rewrite [project] name in .docs.toml: "<old>" -> "<new>"`,
270
+ plus the footer. Exits 0; writes nothing.
271
+
272
+ **No-op.** When the normalised `<new-name>` equals the sidecar's
273
+ current `[project] name`, the verb is a no-op regardless of whether
274
+ the active tree carries non-matching `Project:` docs (the rename has
275
+ nothing to rewrite — non-matching docs hold a different project name
276
+ and remain untouched). Prints (gated on `not --quiet`):
277
+
278
+ ```
279
+ docs: project rename: <new> already current — no rewrites needed
280
+ ```
281
+
282
+ to stderr; exits 0; no disk mutation; no INDEX refresh.
283
+
284
+ **Success output (M12 — OQ-2).** A single human-readable stderr line
285
+ (gated on `not --quiet`):
286
+
287
+ ```
288
+ docs: project rename: <old> -> <new> (rewrote .docs.toml + <N> doc(s); <M> archived skipped; <K> non-matching project(s) untouched: <list>)
289
+ ```
290
+
291
+ When `K == 0` **and** `M == 0`, the empty clauses are dropped to:
292
+
293
+ ```
294
+ docs: project rename: <old> -> <new> (rewrote .docs.toml + <N> doc(s))
295
+ ```
296
+
297
+ No `--json` mode in M12 (M12 — OQ-7).
298
+
299
+ **What does NOT change.**
300
+
301
+ - Prose markdown text mentioning the old name. Only the metadata
302
+ `Project:` field is rewritten — never `Related:` edges (which carry
303
+ no project signal) and never body prose. (Consistent with M2's
304
+ `docs mv` "Related: only, not prose" stance.)
305
+ - Files outside the docs root.
306
+ - Archive-subtree docs.
307
+
308
+ **Exit codes.** 0 success / no-op / dry-run; 1 recoverable error
309
+ (e.g. a doc with no editable metadata block); 2 hard error (malformed
310
+ `.docs.toml`, no `.docs.toml` ancestor, empty post-normalised
311
+ `<new-name>`).
312
+
174
313
  ### `docs install-skill [--dest DIR] [--copy|--symlink] [--force] [--quiet]`
175
314
 
176
315
  Materialise the bundled Claude Code skill onto the host.
@@ -524,4 +663,12 @@ total excluded count per top-level dir prefix
524
663
  | 1 | Recoverable error (file conflict, validation warning, missing input) |
525
664
  | 2 | Hard error (invalid vocab, atomic operation failure, validation errors) |
526
665
 
666
+ M12-specific exit-code shape:
667
+
668
+ | Verb | 0 | 1 | 2 |
669
+ |---|---|---|---|
670
+ | `project rename` | success / no-op / dry-run | doc lacks editable metadata block | malformed `.docs.toml`; no `.docs.toml` ancestor; empty post-normalised `<new-name>` |
671
+ | `touch` (outside-root refusal) | — | — | no `.docs.toml` ancestor (cwd-resolved) or `--root` without `.docs.toml` |
672
+ | `archive` (referring-edge) | success | referring doc has malformed metadata (move aborts) | archive-dir creation failure |
673
+
527
674
  CI integration: `docs check` returning 2 should fail the build.
@@ -3,7 +3,7 @@
3
3
  Lifecycle: active
4
4
  Role: spec
5
5
  Project: docs
6
- Updated: 2026-05-27
6
+ Updated: 2026-05-28
7
7
 
8
8
  Related:
9
9
  - pairs-with: cli.md
@@ -84,7 +84,7 @@ The block terminates at the first blank line whose next non-empty line is *not*
84
84
 
85
85
  | Field | Type | Meaning |
86
86
  |---|---|---|
87
- | `Project` | kebab-case slug | project this doc belongs to; defaults to `project.name` in `.docs.toml` if absent |
87
+ | `Project` | kebab-case slug | project this doc belongs to; defaults to `project.name` in `.docs.toml` if absent. The CLI surface `docs project rename` rewrites this slug in lockstep across the sidecar and every doc that names it (M12). |
88
88
  | `Related` | list of `<verb>: <path>` | typed cross-references to other docs |
89
89
  | `Owner` | free-form | the human or team accountable for this doc |
90
90
  | `Tags` | comma-separated | free-form tags for filtering |