docs-cli 1.6.0__tar.gz → 1.6.5__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 (476) hide show
  1. {docs_cli-1.6.0 → docs_cli-1.6.5}/PKG-INFO +1 -1
  2. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/INDEX.md +14 -10
  3. {docs_cli-1.6.0/docs → docs_cli-1.6.5/docs/archive/2026-06-03}/m14-robustness-agent-native-impl.md +5 -4
  4. {docs_cli-1.6.0/docs → docs_cli-1.6.5/docs/archive/2026-06-03}/m14-robustness-agent-native.md +4 -4
  5. {docs_cli-1.6.0/docs → docs_cli-1.6.5/docs/archive/2026-06-03}/m15-agent-native-authoring-impl.md +4 -3
  6. {docs_cli-1.6.0/docs → docs_cli-1.6.5/docs/archive/2026-06-03}/m15-agent-native-authoring.md +3 -3
  7. {docs_cli-1.6.0/docs → docs_cli-1.6.5/docs/archive/2026-06-03}/m17-pypi-publish.md +127 -55
  8. {docs_cli-1.6.0/src/docs_cli/skill/references → docs_cli-1.6.5/docs}/cli.md +84 -3
  9. {docs_cli-1.6.0/src/docs_cli/skill/references → docs_cli-1.6.5/docs}/convention.md +26 -1
  10. docs_cli-1.6.5/docs/m17-pypi-publish-impl.md +463 -0
  11. docs_cli-1.6.5/docs/m19-post-edit-validation-impl.md +457 -0
  12. docs_cli-1.6.5/docs/m19-post-edit-validation.md +587 -0
  13. docs_cli-1.6.5/docs/m20-pypi-publish-impl.md +308 -0
  14. docs_cli-1.6.5/docs/m20-pypi-publish.md +431 -0
  15. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/plan.md +65 -8
  16. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/release-runbook.md +52 -0
  17. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/status.md +183 -77
  18. {docs_cli-1.6.0 → docs_cli-1.6.5}/pyproject.toml +1 -1
  19. {docs_cli-1.6.0 → docs_cli-1.6.5}/src/docs_cli/cli.py +164 -18
  20. {docs_cli-1.6.0 → docs_cli-1.6.5}/src/docs_cli/skill/SKILL.md +9 -1
  21. {docs_cli-1.6.0/docs → docs_cli-1.6.5/src/docs_cli/skill/references}/cli.md +84 -3
  22. {docs_cli-1.6.0/docs → docs_cli-1.6.5/src/docs_cli/skill/references}/convention.md +26 -1
  23. {docs_cli-1.6.0 → docs_cli-1.6.5}/src/docs_cli/skill/references/quality-artifacts.md +6 -3
  24. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/expected/docs-INDEX.md +14 -10
  25. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_body_from.py +28 -0
  26. docs_cli-1.6.5/tests/test_cli_check.py +275 -0
  27. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_cli_list.py +59 -0
  28. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_cli_touch.py +247 -1
  29. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_config.py +44 -0
  30. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_packaging.py +25 -24
  31. docs_cli-1.6.0/docs/m17-pypi-publish-impl.md +0 -252
  32. docs_cli-1.6.0/tests/test_cli_check.py +0 -149
  33. {docs_cli-1.6.0 → docs_cli-1.6.5}/.gitignore +0 -0
  34. {docs_cli-1.6.0 → docs_cli-1.6.5}/LICENSE +0 -0
  35. {docs_cli-1.6.0 → docs_cli-1.6.5}/README.md +0 -0
  36. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/.docs.toml +0 -0
  37. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/agent-native-invocation.md +0 -0
  38. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/architecture.md +0 -0
  39. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-20/m1-parser-and-index-log.md +0 -0
  40. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-20/m1-parser-and-index.md +0 -0
  41. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-21/m2-mutating-verbs-log.md +0 -0
  42. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-21/m2-mutating-verbs.md +0 -0
  43. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-22/m3-validation-and-query-log.md +0 -0
  44. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-22/m3-validation-and-query.md +0 -0
  45. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-22/m4-migration-helper-log.md +0 -0
  46. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-22/m4-migration-helper.md +0 -0
  47. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-23/m5-claude-code-skill-log.md +0 -0
  48. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-23/m5-claude-code-skill.md +0 -0
  49. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-24/m6-pypi-distribution-log.md +0 -0
  50. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-24/m6-pypi-distribution.md +0 -0
  51. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-25/m7-migration-accuracy-log.md +0 -0
  52. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-25/m7-migration-accuracy.md +0 -0
  53. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-25/m8-adoption-workflow-log.md +0 -0
  54. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-25/m8-adoption-workflow.md +0 -0
  55. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-25/m9-pypi-publish-log.md +0 -0
  56. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-25/m9-pypi-publish.md +0 -0
  57. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-27/m10-adoption-polish-impl.md +0 -0
  58. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-27/m10-adoption-polish.md +0 -0
  59. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-27/m11-pypi-publish-impl.md +0 -0
  60. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-27/m11-pypi-publish.md +0 -0
  61. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-28/m12-project-rename-impl.md +0 -0
  62. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-28/m12-project-rename.md +0 -0
  63. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-29/m13-pypi-publish-impl.md +0 -0
  64. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-05-29/m13-pypi-publish.md +0 -0
  65. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-06-01/m16-bundled-docs-skill-quality-impl.md +0 -0
  66. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-06-01/m16-bundled-docs-skill-quality-test-matrix.md +0 -0
  67. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/archive/2026-06-01/m16-bundled-docs-skill-quality.md +0 -0
  68. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/charter.md +0 -0
  69. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/definition-of-ready.md +0 -0
  70. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/dual-status-adr.md +0 -0
  71. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/m18-archive-edge-integrity-impl.md +0 -0
  72. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/m18-archive-edge-integrity.md +0 -0
  73. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/test-strategy.md +0 -0
  74. {docs_cli-1.6.0 → docs_cli-1.6.5}/docs/vocab-adr.md +0 -0
  75. {docs_cli-1.6.0 → docs_cli-1.6.5}/src/docs_cli/__init__.py +0 -0
  76. {docs_cli-1.6.0 → docs_cli-1.6.5}/src/docs_cli/skill/references/adoption-playbook.md +0 -0
  77. {docs_cli-1.6.0 → docs_cli-1.6.5}/src/docs_cli/skill/references/docs-toml-template.toml +0 -0
  78. {docs_cli-1.6.0 → docs_cli-1.6.5}/src/docs_cli/skill/references/use-cases.md +0 -0
  79. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/.gitkeep +0 -0
  80. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/_typing/docs.pyi +0 -0
  81. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/conftest.py +0 -0
  82. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/body-from/clean-body.md +0 -0
  83. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/body-from/edge-case-keyword.md +0 -0
  84. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/body-from/real-frontmatter-body.md +0 -0
  85. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/body-from/reason-in-body.md +0 -0
  86. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/body-from/yaml-fence-body.md +0 -0
  87. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/lifecycle/lifecycle-key.md +0 -0
  88. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/lifecycle/lifecycle-plus-status-prose.md +0 -0
  89. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/lifecycle/status-only.md +0 -0
  90. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/parser/well-formed.md +0 -0
  91. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/Abc5Migration/alpha.md +0 -0
  92. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/Abc5Migration/beta.md +0 -0
  93. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/Abc5Migration/gamma.md +0 -0
  94. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/FOO_BAR_BAZ/alpha.md +0 -0
  95. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/FOO_BAR_BAZ/beta.md +0 -0
  96. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/FOO_BAR_BAZ/gamma.md +0 -0
  97. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/FooBarBaz/alpha.md +0 -0
  98. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/FooBarBaz/beta.md +0 -0
  99. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/FooBarBaz/gamma.md +0 -0
  100. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/Foo_Bar_Baz/alpha.md +0 -0
  101. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/Foo_Bar_Baz/beta.md +0 -0
  102. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/Foo_Bar_Baz/gamma.md +0 -0
  103. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/Plan/alpha.md +0 -0
  104. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/Plan/beta.md +0 -0
  105. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/Plan/gamma.md +0 -0
  106. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/bugs-2026-01-26/alpha.md +0 -0
  107. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/bugs-2026-01-26/beta.md +0 -0
  108. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/bugs-2026-01-26/gamma.md +0 -0
  109. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/embedded-ai-discovery-parallel/alpha.md +0 -0
  110. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/embedded-ai-discovery-parallel/beta.md +0 -0
  111. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/project-names/embedded-ai-discovery-parallel/gamma.md +0 -0
  112. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-met/file-01-spec.md +0 -0
  113. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-met/file-02-spec.md +0 -0
  114. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-met/file-03-spec.md +0 -0
  115. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-met/file-04-spec.md +0 -0
  116. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-met/file-05-spec.md +0 -0
  117. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-met/file-06-spec.md +0 -0
  118. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-met/file-07-spec.md +0 -0
  119. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-met/file-08-no-suffix.md +0 -0
  120. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-met/file-09-no-suffix.md +0 -0
  121. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-met/file-10-no-suffix.md +0 -0
  122. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-not-met/file-01-spec.md +0 -0
  123. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-not-met/file-02-spec.md +0 -0
  124. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-not-met/file-03-spec.md +0 -0
  125. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-not-met/file-04-spec.md +0 -0
  126. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-not-met/file-05-plan.md +0 -0
  127. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-not-met/file-06-plan.md +0 -0
  128. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-not-met/file-07-plan.md +0 -0
  129. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-not-met/file-08-no-suffix.md +0 -0
  130. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-not-met/file-09-no-suffix.md +0 -0
  131. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/majority-not-met/file-10-no-suffix.md +0 -0
  132. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/sample-too-small/file-01-spec.md +0 -0
  133. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/sample-too-small/file-02-spec.md +0 -0
  134. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/sample-too-small/file-03-spec.md +0 -0
  135. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/sibling-defaulting/sample-too-small/file-04-no-suffix.md +0 -0
  136. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/stamp/already-stamped.md +0 -0
  137. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/stamp/raw-h1-suggests-role.md +0 -0
  138. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/stamp/raw-invalid-block.md +0 -0
  139. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/stamp/raw-no-frontmatter.md +0 -0
  140. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/stamp/raw-no-h1.md +0 -0
  141. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/stamp/raw-with-foreign-meta.md +0 -0
  142. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/status-prose/draft-companion.md +0 -0
  143. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/status-prose/freeform-status.md +0 -0
  144. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/status-prose/p0-implemented.md +0 -0
  145. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/status-prose/planning-only.md +0 -0
  146. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/archive-pair/.docs.toml +0 -0
  147. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/archive-pair/feature-log.md +0 -0
  148. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/archive-pair/feature.md +0 -0
  149. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/archive-trio/.docs.toml +0 -0
  150. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/archive-trio/feature-impl.md +0 -0
  151. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/archive-trio/feature-test-matrix.md +0 -0
  152. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/archive-trio/feature.md +0 -0
  153. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/archive-with-incoming-refs/.docs.toml +0 -0
  154. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/archive-with-incoming-refs/master.md +0 -0
  155. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/archive-with-incoming-refs/sidekick.md +0 -0
  156. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/archive-with-incoming-refs/witness.md +0 -0
  157. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/cross-refs/.docs.toml +0 -0
  158. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/cross-refs/core.md +0 -0
  159. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/cross-refs/helper.md +0 -0
  160. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/cross-refs/overview.md +0 -0
  161. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/drift/.docs.toml +0 -0
  162. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/drift/archive/2026-01-01/properly-archived.md +0 -0
  163. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/drift/archive/2026-01-01/wrongly-active.md +0 -0
  164. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/drift/clean.md +0 -0
  165. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/drift/wrongly-archived.md +0 -0
  166. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/foreign/archived/proj-old-decision.md +0 -0
  167. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/foreign/proj-auth-spec.md +0 -0
  168. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/foreign/proj-db-adr.md +0 -0
  169. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/foreign/proj-deploy-log.md +0 -0
  170. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/foreign/proj-extra-metadata.md +0 -0
  171. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/foreign/proj-has-metadata.md +0 -0
  172. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/foreign/proj-no-h1.md +0 -0
  173. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/foreign/proj-overview.md +0 -0
  174. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/foreign/proj-release-plan.md +0 -0
  175. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/foreign/topics/proj-deep-notes.md +0 -0
  176. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/invalid/.docs.toml +0 -0
  177. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/invalid/bad-date.md +0 -0
  178. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/invalid/bad-role.md +0 -0
  179. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/invalid/bad-status.md +0 -0
  180. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/invalid/broken-ref.md +0 -0
  181. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/invalid/empty-role.md +0 -0
  182. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/invalid/no-h1.md +0 -0
  183. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/invalid/no-status.md +0 -0
  184. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/marker-preservation/.docs.toml +0 -0
  185. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/marker-preservation/INDEX.md +0 -0
  186. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/marker-preservation/lone-doc.md +0 -0
  187. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/minimal/.docs.toml +0 -0
  188. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/minimal/lone-doc.md +0 -0
  189. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project/.docs.toml +0 -0
  190. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project/alpha-charter.md +0 -0
  191. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project/alpha-old-spec.md +0 -0
  192. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project/alpha-plan.md +0 -0
  193. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project/alpha-spec.md +0 -0
  194. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project/archive/2026-04-01/beta-old.md +0 -0
  195. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project/beta-done.md +0 -0
  196. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project/beta-notes.md +0 -0
  197. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project/beta-status.md +0 -0
  198. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project/topics/orphan.md +0 -0
  199. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project-alpha-sidecar/.docs.toml +0 -0
  200. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project-alpha-sidecar/alpha-charter.md +0 -0
  201. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project-alpha-sidecar/alpha-old-spec.md +0 -0
  202. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project-alpha-sidecar/alpha-plan.md +0 -0
  203. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project-alpha-sidecar/alpha-spec.md +0 -0
  204. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project-alpha-sidecar/archive/2026-04-01/beta-old.md +0 -0
  205. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project-alpha-sidecar/beta-done.md +0 -0
  206. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project-alpha-sidecar/beta-notes.md +0 -0
  207. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project-alpha-sidecar/beta-status.md +0 -0
  208. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/multi-project-alpha-sidecar/topics/orphan.md +0 -0
  209. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/mv-with-malformed/.docs.toml +0 -0
  210. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/mv-with-malformed/broken.md +0 -0
  211. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/mv-with-malformed/good-a.md +0 -0
  212. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/mv-with-malformed/referrer.md +0 -0
  213. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/nested/.docs.toml +0 -0
  214. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/nested/root-doc.md +0 -0
  215. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/nested/topics/deep-dive.md +0 -0
  216. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/README.md +0 -0
  217. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/archive-subdir/archived/foo-deprecated-plan.md +0 -0
  218. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/archive-subdir/archived/foo-historical-decision.md +0 -0
  219. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/archive-subdir/archived/foo-old-thing.md +0 -0
  220. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/archive-subdir/archived/foo-rejected-spec.md +0 -0
  221. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/archive-subdir/archived/foo-superseded-runbook.md +0 -0
  222. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/archive-subdir/foo-architecture-decision.md +0 -0
  223. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/archive-subdir/foo-bar-plan.md +0 -0
  224. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/archive-subdir/foo-bar-spec.md +0 -0
  225. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/archive-subdir/foo-charter.md +0 -0
  226. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/archive-subdir/foo-design-notes.md +0 -0
  227. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/archive-subdir/foo-launch-log.md +0 -0
  228. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/archive-subdir/foo-misc.md +0 -0
  229. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/archive-subdir/foo-overview.md +0 -0
  230. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/archive-subdir/foo-runbook.md +0 -0
  231. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/archive-subdir/foo-status.md +0 -0
  232. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/kebab-tiny/foo-bar-plan.md +0 -0
  233. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/kebab-tiny/foo-bar-spec.md +0 -0
  234. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/kebab-tiny/foo-bar-status.md +0 -0
  235. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/mixed-naming/API Reference.md +0 -0
  236. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/mixed-naming/Acme Plan - Database Population Plan.md +0 -0
  237. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/mixed-naming/AcmeApiSpec.md +0 -0
  238. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/mixed-naming/Foo_Design_Decision_Tree.md +0 -0
  239. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/mixed-naming/Foo_Domain_Spec.md +0 -0
  240. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/mixed-naming/Project_Status_Update.md +0 -0
  241. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/mixed-naming/User Guide - Operator Manual.md +0 -0
  242. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/mixed-naming/feature-rollout-plan.md +0 -0
  243. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/mixed-naming/incident-runbook.md +0 -0
  244. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/mixed-naming/release-notes.md +0 -0
  245. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_API_Spec.md +0 -0
  246. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Architecture.md +0 -0
  247. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Cards.md +0 -0
  248. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Charter.md +0 -0
  249. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_10_Spec.md +0 -0
  250. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_11_Spec.md +0 -0
  251. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_12_Spec.md +0 -0
  252. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_13_Spec.md +0 -0
  253. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_14_Spec.md +0 -0
  254. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_15_Spec.md +0 -0
  255. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_1_Spec.md +0 -0
  256. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_2_Spec.md +0 -0
  257. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_3_Spec.md +0 -0
  258. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_4_Spec.md +0 -0
  259. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_5_Spec.md +0 -0
  260. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_6_Spec.md +0 -0
  261. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_7_Spec.md +0 -0
  262. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_8_Spec.md +0 -0
  263. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Component_9_Spec.md +0 -0
  264. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Constraints.md +0 -0
  265. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Decision_Tree.md +0 -0
  266. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Design_Sketch.md +0 -0
  267. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Discovery_Plan.md +0 -0
  268. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Domain_Plan.md +0 -0
  269. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Handoff.md +0 -0
  270. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M1.md +0 -0
  271. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M10.md +0 -0
  272. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M10_Implementation.md +0 -0
  273. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M1_Implementation.md +0 -0
  274. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M2.md +0 -0
  275. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M2_Implementation.md +0 -0
  276. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M3.md +0 -0
  277. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M3_Implementation.md +0 -0
  278. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M4.md +0 -0
  279. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M4_Implementation.md +0 -0
  280. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M5.md +0 -0
  281. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M5_Implementation.md +0 -0
  282. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M6.md +0 -0
  283. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M6_Implementation.md +0 -0
  284. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M7.md +0 -0
  285. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M7_Implementation.md +0 -0
  286. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M8.md +0 -0
  287. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M8_Implementation.md +0 -0
  288. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M9.md +0 -0
  289. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_M9_Implementation.md +0 -0
  290. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Migration_Plan.md +0 -0
  291. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Module_Spec.md +0 -0
  292. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Plan.md +0 -0
  293. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Plan_Draft.md +0 -0
  294. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Plan_v3.md +0 -0
  295. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Pricing_Memo.md +0 -0
  296. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Provider_Spec.md +0 -0
  297. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Service_Spec.md +0 -0
  298. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Status.md +0 -0
  299. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Strategy_Outline.md +0 -0
  300. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Strategy_v2.md +0 -0
  301. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_10_Plan.md +0 -0
  302. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_11_Plan.md +0 -0
  303. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_12_Plan.md +0 -0
  304. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_13_Plan.md +0 -0
  305. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_14_Plan.md +0 -0
  306. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_15_Plan.md +0 -0
  307. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_1_Plan.md +0 -0
  308. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_2_Plan.md +0 -0
  309. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_3_Plan.md +0 -0
  310. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_4_Plan.md +0 -0
  311. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_5_Plan.md +0 -0
  312. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_6_Plan.md +0 -0
  313. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_7_Plan.md +0 -0
  314. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_8_Plan.md +0 -0
  315. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Task_9_Plan.md +0 -0
  316. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-large/Foo_Vendor_Brief.md +0 -0
  317. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-medium/Foo_Architecture.md +0 -0
  318. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-medium/Foo_Brief.md +0 -0
  319. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-medium/Foo_Charter.md +0 -0
  320. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-medium/Foo_Implementation.md +0 -0
  321. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-medium/Foo_Log.md +0 -0
  322. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-medium/Foo_M1.md +0 -0
  323. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-medium/Foo_M1_Implementation.md +0 -0
  324. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-medium/Foo_M2.md +0 -0
  325. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-medium/Foo_M2_Implementation.md +0 -0
  326. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-medium/Foo_M3.md +0 -0
  327. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-medium/Foo_M4.md +0 -0
  328. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-medium/Foo_Memo.md +0 -0
  329. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-medium/Foo_Outline.md +0 -0
  330. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-medium/Foo_Plan.md +0 -0
  331. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-medium/Foo_Sketch.md +0 -0
  332. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-medium/Foo_Status.md +0 -0
  333. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees/snake-medium/Foo_Strategy_v2.md +0 -0
  334. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/kebab-tiny/.docs.toml +0 -0
  335. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/kebab-tiny/INDEX.md +0 -0
  336. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/kebab-tiny/foo-bar-plan.md +0 -0
  337. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/kebab-tiny/foo-bar-spec.md +0 -0
  338. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/kebab-tiny/foo-bar-status.md +0 -0
  339. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/.docs.toml +0 -0
  340. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_API_Spec.md +0 -0
  341. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Architecture.md +0 -0
  342. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Cards.md +0 -0
  343. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Charter.md +0 -0
  344. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_10_Spec.md +0 -0
  345. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_11_Spec.md +0 -0
  346. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_12_Spec.md +0 -0
  347. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_13_Spec.md +0 -0
  348. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_14_Spec.md +0 -0
  349. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_15_Spec.md +0 -0
  350. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_1_Spec.md +0 -0
  351. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_2_Spec.md +0 -0
  352. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_3_Spec.md +0 -0
  353. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_4_Spec.md +0 -0
  354. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_5_Spec.md +0 -0
  355. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_6_Spec.md +0 -0
  356. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_7_Spec.md +0 -0
  357. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_8_Spec.md +0 -0
  358. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Component_9_Spec.md +0 -0
  359. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Constraints.md +0 -0
  360. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Decision_Tree.md +0 -0
  361. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Design_Sketch.md +0 -0
  362. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Discovery_Plan.md +0 -0
  363. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Domain_Plan.md +0 -0
  364. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Handoff.md +0 -0
  365. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M1.md +0 -0
  366. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M10.md +0 -0
  367. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M10_Implementation.md +0 -0
  368. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M1_Implementation.md +0 -0
  369. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M2.md +0 -0
  370. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M2_Implementation.md +0 -0
  371. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M3.md +0 -0
  372. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M3_Implementation.md +0 -0
  373. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M4.md +0 -0
  374. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M4_Implementation.md +0 -0
  375. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M5.md +0 -0
  376. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M5_Implementation.md +0 -0
  377. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M6.md +0 -0
  378. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M6_Implementation.md +0 -0
  379. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M7.md +0 -0
  380. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M7_Implementation.md +0 -0
  381. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M8.md +0 -0
  382. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M8_Implementation.md +0 -0
  383. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M9.md +0 -0
  384. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_M9_Implementation.md +0 -0
  385. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Migration_Plan.md +0 -0
  386. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Module_Spec.md +0 -0
  387. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Plan.md +0 -0
  388. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Plan_Draft.md +0 -0
  389. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Plan_v3.md +0 -0
  390. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Pricing_Memo.md +0 -0
  391. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Provider_Spec.md +0 -0
  392. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Service_Spec.md +0 -0
  393. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Status.md +0 -0
  394. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Strategy_Outline.md +0 -0
  395. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Strategy_v2.md +0 -0
  396. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_10_Plan.md +0 -0
  397. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_11_Plan.md +0 -0
  398. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_12_Plan.md +0 -0
  399. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_13_Plan.md +0 -0
  400. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_14_Plan.md +0 -0
  401. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_15_Plan.md +0 -0
  402. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_1_Plan.md +0 -0
  403. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_2_Plan.md +0 -0
  404. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_3_Plan.md +0 -0
  405. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_4_Plan.md +0 -0
  406. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_5_Plan.md +0 -0
  407. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_6_Plan.md +0 -0
  408. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_7_Plan.md +0 -0
  409. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_8_Plan.md +0 -0
  410. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Task_9_Plan.md +0 -0
  411. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/Foo_Vendor_Brief.md +0 -0
  412. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-large/INDEX.md +0 -0
  413. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/.docs.toml +0 -0
  414. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Architecture.md +0 -0
  415. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Brief.md +0 -0
  416. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Charter.md +0 -0
  417. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Implementation.md +0 -0
  418. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Log.md +0 -0
  419. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_M1.md +0 -0
  420. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_M1_Implementation.md +0 -0
  421. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_M2.md +0 -0
  422. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_M2_Implementation.md +0 -0
  423. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_M3.md +0 -0
  424. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_M4.md +0 -0
  425. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Memo.md +0 -0
  426. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Outline.md +0 -0
  427. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Plan.md +0 -0
  428. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Sketch.md +0 -0
  429. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Status.md +0 -0
  430. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/Foo_Strategy_v2.md +0 -0
  431. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/real-trees-adopted/snake-medium/INDEX.md +0 -0
  432. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/rename-with-archive/.docs.toml +0 -0
  433. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/rename-with-archive/archive/2026-04-01/old.md +0 -0
  434. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/rename-with-archive/live.md +0 -0
  435. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/rename-with-malformed/.docs.toml +0 -0
  436. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/rename-with-malformed/broken.md +0 -0
  437. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/rename-with-malformed/good-a.md +0 -0
  438. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/rename-with-malformed/good-b.md +0 -0
  439. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/with-archive/.docs.toml +0 -0
  440. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/with-archive/.hidden-file +0 -0
  441. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/with-archive/.private/should-not-be-walked.md +0 -0
  442. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/with-archive/alpha.md +0 -0
  443. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/with-archive/archive/2026-01-01/INDEX.md +0 -0
  444. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/with-archive/archive/2026-01-01/old-plan.md +0 -0
  445. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/with-archive/beta.md +0 -0
  446. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/fixtures/trees/with-archive/notes.txt +0 -0
  447. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/manual/m7_success_criteria.py +0 -0
  448. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_archive_normalisation.py +0 -0
  449. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_atomic_write.py +0 -0
  450. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_check.py +0 -0
  451. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_cli_archive.py +0 -0
  452. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_cli_index.py +0 -0
  453. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_cli_migrate.py +0 -0
  454. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_cli_mv.py +0 -0
  455. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_cli_new.py +0 -0
  456. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_cli_project_rename.py +0 -0
  457. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_cli_project_set.py +0 -0
  458. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_cli_stamp.py +0 -0
  459. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_edit.py +0 -0
  460. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_exclude.py +0 -0
  461. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_index.py +0 -0
  462. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_inference.py +0 -0
  463. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_lifecycle_rename.py +0 -0
  464. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_migrate.py +0 -0
  465. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_model.py +0 -0
  466. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_multi_project_hints.py +0 -0
  467. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_non_md_surfacing.py +0 -0
  468. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_project_normalisation.py +0 -0
  469. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_query.py +0 -0
  470. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_skill.py +0 -0
  471. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_skill_adoption.py +0 -0
  472. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_skill_quality_artifacts.py +0 -0
  473. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_skill_refs.py +0 -0
  474. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_triage_flags.py +0 -0
  475. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_version_metadata.py +0 -0
  476. {docs_cli-1.6.0 → docs_cli-1.6.5}/tests/test_walker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docs-cli
3
- Version: 1.6.0
3
+ Version: 1.6.5
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-06-03. 20 docs active, 29 archived._
8
+ _Generated 2026-06-12. 19 docs active, 34 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-06-03.
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-06-12.
15
15
 
16
16
  ### Active — Charter
17
17
 
@@ -19,26 +19,25 @@ _Generated 2026-06-03. 20 docs active, 29 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-06-03.
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-06-12.
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-06-03.
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-06-03.
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-06-12.
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-06-12.
28
28
 
29
29
  ### Active — Milestone
30
30
 
31
- - [m15-agent-native-authoring.md](m15-agent-native-authoring.md) — _milestone_ — - Milestone: M15 (v1.6.0, part 2 of 2) - Title: Agent-native doc authoring - Surface: the agent-native *authoring* set…. Updated 2026-06-03.
32
- - [m17-pypi-publish.md](m17-pypi-publish.md) — _milestone_ — > **Stub-drafted 2026-06-03, post M14 + M15 closeout.** M17 > enters active state immediately — M14 and M15 are both >…. Updated 2026-06-03.
31
+ - [m19-post-edit-validation.md](m19-post-edit-validation.md) — _milestone_ — - Milestone: M19 (v1.6.5) - Title: Post-edit validation ergonomics (touch --check + configurable stale window) -…. Updated 2026-06-12.
32
+ - [m20-pypi-publish.md](m20-pypi-publish.md) — _milestone_ — > **Stub-drafted 2026-06-12, post M19 implementation-complete.** M20 > enters active state immediately — M19 is…. Updated 2026-06-12.
33
33
  - [m18-archive-edge-integrity.md](m18-archive-edge-integrity.md) — _milestone_ — - Milestone: M18 - Title: Archive edge integrity (intra-archive Related: rewriting) - Surface: a correctness fix to…. Updated 2026-06-03.
34
- - [m14-robustness-agent-native.md](m14-robustness-agent-native.md) — _milestone_ — - Milestone: M14 (v1.6.0, part 1 of 2) - Title: Robustness + autonomous archive - Surface: correctness/atomicity…. Updated 2026-06-02.
35
34
 
36
35
  ### Active — Log
37
36
 
38
- - [m15-agent-native-authoring-impl.md](m15-agent-native-authoring-impl.md) — _log_ — Chronological log of work on M15Agent-native doc authoring. Append a section per TDD phase with objective, files…. Updated 2026-06-03.
37
+ - [m19-post-edit-validation-impl.md](m19-post-edit-validation-impl.md) — _log_ — Chronological log of work on M19Post-edit validation ergonomics (`docs touch --check` + configurable stale window).…. Updated 2026-06-12.
38
+ - [m20-pypi-publish-impl.md](m20-pypi-publish-impl.md) — _log_ — Chronological log of work on M20 — PyPI publish 1.6.5. Append a section per runbook phase (operator prep → pre-publish…. Updated 2026-06-12.
39
39
  - [m17-pypi-publish-impl.md](m17-pypi-publish-impl.md) — _log_ — Chronological log of work on M17 — PyPI publish 1.6.0. Append a section per runbook phase (operator prep → pre-publish…. Updated 2026-06-03.
40
40
  - [m18-archive-edge-integrity-impl.md](m18-archive-edge-integrity-impl.md) — _log_ — Chronological log of work on M18 — Archive edge integrity (intra-archive `Related:` rewriting). Append a section per…. Updated 2026-06-03.
41
- - [m14-robustness-agent-native-impl.md](m14-robustness-agent-native-impl.md) — _log_ — Chronological log of work on M14 — Robustness + agent-native surface. Append a section per TDD phase with objective,…. Updated 2026-06-02.
42
41
 
43
42
  ### Active — Decision
44
43
 
@@ -63,6 +62,11 @@ _Generated 2026-06-03. 20 docs active, 29 archived._
63
62
 
64
63
  ## Archived
65
64
 
65
+ - [archive/2026-06-03/m14-robustness-agent-native-impl.md](archive/2026-06-03/m14-robustness-agent-native-impl.md) — _log_ — Chronological log of work on M14 — Robustness + agent-native surface. Append a section per TDD phase with objective,…. Updated 2026-06-03.
66
+ - [archive/2026-06-03/m14-robustness-agent-native.md](archive/2026-06-03/m14-robustness-agent-native.md) — _milestone_ — - Milestone: M14 (v1.6.0, part 1 of 2) - Title: Robustness + autonomous archive - Surface: correctness/atomicity…. Updated 2026-06-03.
67
+ - [archive/2026-06-03/m15-agent-native-authoring-impl.md](archive/2026-06-03/m15-agent-native-authoring-impl.md) — _log_ — Chronological log of work on M15 — Agent-native doc authoring. Append a section per TDD phase with objective, files…. Updated 2026-06-03.
68
+ - [archive/2026-06-03/m15-agent-native-authoring.md](archive/2026-06-03/m15-agent-native-authoring.md) — _milestone_ — - Milestone: M15 (v1.6.0, part 2 of 2) - Title: Agent-native doc authoring - Surface: the agent-native *authoring* set…. Updated 2026-06-03.
69
+ - [archive/2026-06-03/m17-pypi-publish.md](archive/2026-06-03/m17-pypi-publish.md) — _milestone_ — > **Stub-drafted 2026-06-03, post M14 + M15 closeout.** M17 > enters active state immediately — M14 and M15 are both >…. Updated 2026-06-03.
66
70
  - [archive/2026-06-01/m16-bundled-docs-skill-quality-impl.md](archive/2026-06-01/m16-bundled-docs-skill-quality-impl.md) — _log_ — Chronological log for M16. This milestone records the docs-cli bundled `docs` skill changes required by the Agent…. Updated 2026-06-01.
67
71
  - [archive/2026-06-01/m16-bundled-docs-skill-quality-test-matrix.md](archive/2026-06-01/m16-bundled-docs-skill-quality-test-matrix.md) — _spec_ — Lite. Updated 2026-06-01.
68
72
  - [archive/2026-06-01/m16-bundled-docs-skill-quality.md](archive/2026-06-01/m16-bundled-docs-skill-quality.md) — _milestone_ — - Milestone: M16 - Title: Bundled docs skill quality artifacts - Surface: bundled `docs` skill guidance under…. Updated 2026-06-01.
@@ -1,13 +1,14 @@
1
1
  # M14 — Implementation Log
2
2
 
3
- Lifecycle: draft
3
+ Lifecycle: archived
4
4
  Role: log
5
5
  Project: docs
6
- Updated: 2026-06-02
6
+ Updated: 2026-06-03
7
+ Archived-reason: Milestone M14 complete; docs-cli==1.6.0 shipped to PyPI via M17 2026-06-03
7
8
 
8
9
  Related:
9
- - child-of: m14-robustness-agent-native.md
10
- - pairs-with: m14-robustness-agent-native.md
10
+ - child-of: archive/2026-06-03/m14-robustness-agent-native.md
11
+ - pairs-with: archive/2026-06-03/m14-robustness-agent-native.md
11
12
  - pairs-with: status.md
12
13
 
13
14
  ## Overview
@@ -1,14 +1,14 @@
1
1
  # M14 — Robustness + autonomous archive
2
2
 
3
- Lifecycle: draft
3
+ Lifecycle: archived
4
4
  Role: milestone
5
5
  Project: docs
6
- Updated: 2026-06-02
6
+ Updated: 2026-06-03
7
7
 
8
8
  Related:
9
9
  - child-of: plan.md
10
- - parent-of: m14-robustness-agent-native-impl.md
11
- - pairs-with: m15-agent-native-authoring.md
10
+ - parent-of: archive/2026-06-03/m14-robustness-agent-native-impl.md
11
+ - pairs-with: archive/2026-06-03/m15-agent-native-authoring.md
12
12
  - pairs-with: agent-native-invocation.md
13
13
  - pairs-with: cli.md
14
14
  - pairs-with: status.md
@@ -1,13 +1,14 @@
1
1
  # M15 — Implementation Log
2
2
 
3
- Lifecycle: draft
3
+ Lifecycle: archived
4
4
  Role: log
5
5
  Project: docs
6
6
  Updated: 2026-06-03
7
+ Archived-reason: Milestone M15 complete; docs-cli==1.6.0 shipped to PyPI via M17 2026-06-03
7
8
 
8
9
  Related:
9
- - child-of: m15-agent-native-authoring.md
10
- - pairs-with: m15-agent-native-authoring.md
10
+ - child-of: archive/2026-06-03/m15-agent-native-authoring.md
11
+ - pairs-with: archive/2026-06-03/m15-agent-native-authoring.md
11
12
  - pairs-with: status.md
12
13
 
13
14
  ## Overview
@@ -1,14 +1,14 @@
1
1
  # M15 — Agent-native doc authoring (v1.6.0)
2
2
 
3
- Lifecycle: draft
3
+ Lifecycle: archived
4
4
  Role: milestone
5
5
  Project: docs
6
6
  Updated: 2026-06-03
7
7
 
8
8
  Related:
9
9
  - child-of: plan.md
10
- - parent-of: m15-agent-native-authoring-impl.md
11
- - pairs-with: m14-robustness-agent-native.md
10
+ - parent-of: archive/2026-06-03/m15-agent-native-authoring-impl.md
11
+ - pairs-with: archive/2026-06-03/m14-robustness-agent-native.md
12
12
  - pairs-with: agent-native-invocation.md
13
13
  - pairs-with: cli.md
14
14
  - pairs-with: status.md
@@ -1,17 +1,18 @@
1
1
  # M17 — PyPI publish 1.6.0
2
2
 
3
- Lifecycle: draft
3
+ Lifecycle: archived
4
4
  Role: milestone
5
5
  Project: docs
6
6
  Updated: 2026-06-03
7
+ Archived-reason: Milestone M17 complete; docs-cli==1.6.0 shipped to PyPI 2026-06-03
7
8
 
8
9
  Related:
9
10
  - parent-of: m17-pypi-publish-impl.md
10
11
  - child-of: plan.md
11
12
  - pairs-with: release-runbook.md
12
13
  - pairs-with: status.md
13
- - pairs-with: m14-robustness-agent-native.md
14
- - pairs-with: m15-agent-native-authoring.md
14
+ - pairs-with: archive/2026-06-03/m14-robustness-agent-native.md
15
+ - pairs-with: archive/2026-06-03/m15-agent-native-authoring.md
15
16
 
16
17
  ## Overview
17
18
 
@@ -32,8 +33,11 @@ Related:
32
33
  GitHub release with notes sourced from the CHANGELOG, and the
33
34
  post-publish doc closeouts that turn the M14 + M15 + M17 rows
34
35
  in `status.md` and `plan.md` into the post-publish narrative.
35
- - Status: Active (Phase 1 opens immediately M14 + M15 already
36
- built fresh 1.6.0 locally during their own Phase 7 + Phase 10)
36
+ - Status: **Complete (2026-06-03)**`docs-cli==1.6.0` shipped
37
+ to PyPI, batching M14 + M15. All five runbook phases done;
38
+ chain-of-custody bit-perfect; all seven M14 + M15 headline
39
+ contracts hold against the PyPI-served wheel. `v1.6.0` tag at
40
+ `95f23a6` + GitHub release are the closeout git sequence.
37
41
 
38
42
  ### Goal
39
43
 
@@ -154,36 +158,38 @@ GitHub repo carries the matching `v1.6.0` tag + release.
154
158
 
155
159
  ### Deliverables
156
160
 
157
- - [ ] PyPI release `docs-cli` 1.6.0 published; project page live
161
+ - [x] PyPI release `docs-cli` 1.6.0 published; project page live
158
162
  at `https://pypi.org/project/docs-cli/1.6.0/`.
159
- - [ ] TestPyPI release `docs-cli-rehearsal` 1.6.0 published as
163
+ - [x] TestPyPI release `docs-cli-rehearsal` 1.6.0 published as
160
164
  the rehearsal artifact at
161
165
  `https://test.pypi.org/project/docs-cli-rehearsal/1.6.0/`
162
166
  (continues the M9/M11/M13 disambiguated dist-name detour).
163
- - [ ] `pyproject.toml` `version` confirmed at `1.6.0` (already
164
- landed at M14 Phase 7; `__version__` flows through
165
- `importlib.metadata` per M12 SoT refactor).
166
- - [ ] `CHANGELOG.md` `## 1.6.0 — UNRELEASED` section dated to
167
- publish day; surrounding body re-verified accurate.
168
- - [ ] `v1.6.0` git tag pushed; GitHub release created with notes
169
- sourced from the CHANGELOG `## 1.6.0` section.
170
- - [ ] `docs/status.md`: M14 + M15 + M17 rows finalised; "Current
167
+ - [x] `pyproject.toml` `version` confirmed at `1.6.0` (landed at
168
+ M14 Phase 7; `__version__` flows through `importlib.metadata`
169
+ per M12 SoT refactor — verified at Phase 2).
170
+ - [x] `CHANGELOG.md` `## 1.6.0 — UNRELEASED` section dated to
171
+ `## 1.6.0 — 2026-06-03`; surrounding body re-verified
172
+ accurate (stale lead-in line dropped at Phase 4).
173
+ - [x] `v1.6.0` git tag pushed; GitHub release created with notes
174
+ sourced from the CHANGELOG `## 1.6.0` section (the closeout
175
+ git sequence, at commit `95f23a6`).
176
+ - [x] `docs/status.md`: M14 + M15 + M17 rows finalised; "Current
171
177
  milestone" + "Next action" rewritten post-publish.
172
- - [ ] `docs/plan.md`: M14 + M15 + M17 rows finalised; Sequencing
178
+ - [x] `docs/plan.md`: M14 + M15 + M17 rows finalised; Sequencing
173
179
  timeline grew the publish line.
174
- - [ ] `docs/m17-pypi-publish.md` (this file): Phase Checklist
180
+ - [x] `docs/m17-pypi-publish.md` (this file): Phase Checklist
175
181
  ticked; milestone-completion summary appended; lifecycle
176
- archived via `docs archive --cascade`.
177
- - [ ] `docs/m17-pypi-publish-impl.md`: per-phase log entries +
182
+ archived via `docs archive` to `archive/2026-06-03/`.
183
+ - [x] `docs/m17-pypi-publish-impl.md`: per-phase log entries +
178
184
  final milestone-completion summary; stays `Lifecycle:
179
185
  active` after milestone-doc archive (per the
180
186
  M8/M9/M10/M11/M13 pattern).
181
- - [ ] `docs/m14-robustness-agent-native.md` +
187
+ - [x] `docs/m14-robustness-agent-native.md` +
182
188
  `docs/m15-agent-native-authoring.md` (and their impl logs)
183
- archived as part of the M17 closeout they were left LIVE
184
- at root by M18's Phase-9 sweep "awaiting the M17 publish"
185
- (now resolved — see Decisions).
186
- - [ ] `docs/INDEX.md` + `tests/fixtures/expected/docs-INDEX.md`
189
+ archived as part of the M17 closeout to `archive/2026-06-03/`
190
+ — they were left LIVE at root by M18's Phase-9 sweep
191
+ "awaiting the M17 publish" (now resolved — see Decisions).
192
+ - [x] `docs/INDEX.md` + `tests/fixtures/expected/docs-INDEX.md`
187
193
  regenerated in lockstep.
188
194
 
189
195
  ## Phase Checklist
@@ -191,31 +197,33 @@ GitHub repo carries the matching `v1.6.0` tag + release.
191
197
  M17 has no TDD code phases — it is an operational milestone. The
192
198
  runbook's sections are the phases (mirrors M9/M11/M13 exactly):
193
199
 
194
- - [ ] Operator one-time prep — session-verifiable state captured
200
+ - [x] Operator one-time prep — session-verifiable state captured
195
201
  at M17 start (`~/.pypirc` intact mode 600; PyPI `docs-cli`
196
202
  at 1.5.0, 1.6.0 slot free; TestPyPI `docs-cli` squatter
197
- status re-checked; TestPyPI `docs-cli-rehearsal` at 1.5.0,
198
- 1.6.0 slot free; twine + build tool versions ready).
199
- - [ ] Pre-publish prep — versions verified `1.6.0` (M14 Phase 7
203
+ status re-checked still parked; TestPyPI
204
+ `docs-cli-rehearsal` at 1.5.0, 1.6.0 slot free; twine +
205
+ build tool versions ready).
206
+ - [x] Pre-publish prep — versions verified `1.6.0` (M14 Phase 7
200
207
  landed `pyproject.toml`; M12 SoT refactor flows
201
208
  `__version__` through `importlib.metadata`), CHANGELOG
202
209
  header `## 1.6.0 — UNRELEASED`, tree at the M17 setup
203
- commit, quality gate green tree-wide, fresh artefacts
204
- rebuilt (clearing the stale 1.5.0 `dist/`), local-install
205
- smoke + M14 + M15 headline contracts verified against the
206
- wheel.
207
- - [ ] TestPyPI rehearsal — uploaded as `docs-cli-rehearsal==1.6.0`;
210
+ commit, quality gate green tree-wide (510 passed), fresh
211
+ artefacts rebuilt (clearing the stale 1.5.0 `dist/`),
212
+ local-install smoke + all 7 M14 + M15 headline contracts
213
+ verified against the wheel.
214
+ - [x] TestPyPI rehearsal — uploaded as `docs-cli-rehearsal==1.6.0`;
208
215
  throwaway-venv install from TestPyPI succeeded; full smoke
209
216
  including the M14 + M15 headline contracts passed against
210
217
  the TestPyPI-served wheel (with the known-expected
211
218
  `docs --version` → `0.0.0+local` rehearsal-name caveat).
212
- - [ ] Real PyPI publish — `docs-cli==1.6.0` LIVE on PyPI; both
219
+ - [x] Real PyPI publish — `docs-cli==1.6.0` LIVE on PyPI; both
213
220
  artefacts twine-check PASS; upload PASS; chain-of-custody
214
221
  bit-perfect (PyPI-served wheel sha256 byte-identical to
215
- local Phase 4 build); throwaway-venv install from PyPI
216
- succeeded; full smoke + M14 + M15 headline contracts PASS
217
- against the PyPI-served wheel.
218
- - [ ] Post-release — `m17/milestone-setup` ff-merged into `main`
222
+ local Phase 4 build, `b0822709…`); throwaway-venv install
223
+ from PyPI succeeded (`docs 1.6.0`); full smoke + all 7
224
+ M14 + M15 headline contracts PASS against the PyPI-served
225
+ wheel.
226
+ - [x] Post-release — `m17/milestone-setup` ff-merged into `main`
219
227
  and pushed; annotated `v1.6.0` tag pushed to `origin`;
220
228
  GitHub release live with notes sourced from `## 1.6.0`; doc
221
229
  closeouts (plan/status/INDEX + dogfood snapshot + the
@@ -340,62 +348,126 @@ M15 headline contracts (see Success Criteria).
340
348
 
341
349
  M17 is complete when:
342
350
 
343
- - [ ] `pip install docs-cli==1.6.0` works from PyPI on a clean
351
+ - [x] `pip install docs-cli==1.6.0` works from PyPI on a clean
344
352
  host with Python 3.11+ and produces a working `docs`
345
- command.
346
- - [ ] `docs --version` from the PyPI-installed wheel prints
347
- `docs 1.6.0`.
348
- - [ ] **M14 contract — `docs mv` is all-or-nothing:** a malformed
353
+ command. (Verified: fresh `/tmp/docs-pypi-served-venv`;
354
+ `pip install docs-cli==1.6.0` succeeded; `docs` drives the
355
+ full verb surface.)
356
+ - [x] `docs --version` from the PyPI-installed wheel prints
357
+ `docs 1.6.0`. (Verified against the PyPI-served wheel.)
358
+ - [x] **M14 contract — `docs mv` is all-or-nothing:** a malformed
349
359
  sibling aborts with exit 2, leaving the source in place,
350
360
  the destination absent, and every referring `Related:` edge
351
361
  + the INDEX untouched (re-verified against the published
352
362
  artefact, not just the local build).
353
- - [ ] **M14 contract — `docs new` strict-root refusal:** outside
363
+ - [x] **M14 contract — `docs new` strict-root refusal:** outside
354
364
  any `.docs.toml` root (no `--root`) it refuses with exit 2
355
365
  and never writes to cwd (re-verified against the
356
366
  PyPI-served wheel).
357
- - [ ] **M14 contract — non-interactive `docs archive --cascade`:**
367
+ - [x] **M14 contract — non-interactive `docs archive --cascade`:**
358
368
  `--cascade` archives the one-hop `pairs-with`/`child-of`
359
369
  set with no prompt; `--cascade-dry-run` previews and writes
360
370
  nothing (re-verified against the PyPI-served wheel).
361
- - [ ] **M14 contract — four-verb exclude-honouring reindex:**
371
+ - [x] **M14 contract — four-verb exclude-honouring reindex:**
362
372
  `docs touch` (and `archive`/`mv`/`project rename`) over a
363
373
  tree whose `[exclude]` set holds a malformed file stamps
364
374
  the dates *and* refreshes the INDEX cleanly, leaving the
365
375
  excluded file unindexed (re-verified against the PyPI-served
366
376
  wheel).
367
- - [ ] **M15 contract — `docs project set`:** reassigns one doc's
377
+ - [x] **M15 contract — `docs project set`:** reassigns one doc's
368
378
  `Project:` atomically; `--new-project` guards typos (a
369
379
  value new to the tree refuses with exit 2 + did-you-mean);
370
380
  archived docs untouched (re-verified against the PyPI-served
371
381
  wheel).
372
- - [ ] **M15 contract — single-file `docs stamp`:** stamps a valid
382
+ - [x] **M15 contract — single-file `docs stamp`:** stamps a valid
373
383
  metadata block onto a raw file an agent already wrote
374
384
  (title from H1, role/project from flags or `.docs.toml`,
375
385
  `Lifecycle: draft`); re-stamping is a no-op bar `Updated:`
376
386
  (re-verified against the PyPI-served wheel).
377
- - [ ] **M15 contract — `--body-from` real-frontmatter detector:**
387
+ - [x] **M15 contract — `--body-from` real-frontmatter detector:**
378
388
  `docs new --body-from` accepts a body whose prose contains
379
389
  `Reason:`/`Plan:` lines yet still refuses a whole
380
390
  doc-with-frontmatter body (a `---` fence or a ≥2
381
391
  `{Lifecycle, Role, Updated}` adjacent cluster) (re-verified
382
392
  against the PyPI-served wheel).
383
- - [ ] `docs install-skill` from the PyPI-installed wheel places a
393
+ - [x] `docs install-skill` from the PyPI-installed wheel places a
384
394
  host-correct skill that drives the verbs identically to the
385
395
  in-repo install; bundled references carry no repo-relative
386
- `../` links.
387
- - [ ] The `v1.6.0` tag and GitHub release exist at
396
+ `../` links. (Verified against the PyPI-served wheel:
397
+ byte-identical to `src/docs_cli/skill`, re-run no-op exit 0,
398
+ `--symlink` exit 2, no `](../` links.)
399
+ - [x] The `v1.6.0` tag and GitHub release exist at
388
400
  `https://github.com/ArtRichards/docs-cli/releases/tag/v1.6.0`.
389
- - [ ] All Phase Checklist items above are ticked.
390
- - [ ] `docs/status.md` reflects M14 + M15 + M17 as Complete with
401
+ (The annotated `v1.6.0` tag at `95f23a6` + the GitHub
402
+ release are the closeout git sequence the conductor runs
403
+ immediately after the M17 closeout commit.)
404
+ - [x] All Phase Checklist items above are ticked.
405
+ - [x] `docs/status.md` reflects M14 + M15 + M17 as Complete with
391
406
  the actual publish date.
392
- - [ ] `docs/m17-pypi-publish-impl.md` carries a
407
+ - [x] `docs/m17-pypi-publish-impl.md` carries a
393
408
  milestone-completion summary with the published version
394
409
  (`1.6.0` — assuming no TestPyPI-surfaced regression forces a
395
410
  `1.6.x` bump), wheel + sdist sha256, publish timestamp, and
396
411
  any deviations from the runbook recorded for v1.7+
397
412
  reference.
398
413
 
414
+ ## Milestone-completion summary
415
+
416
+ **M17 complete — `docs-cli==1.6.0` shipped to PyPI 2026-06-03**,
417
+ batching **M14 + M15** into one public release (as M9 batched
418
+ M6+M7+M8). Driven end-to-end as a fully-autonomous run walking
419
+ [release-runbook.md](release-runbook.md) directly (no TDD code
420
+ phases). The full per-phase record + deviation prose lives in
421
+ [m17-pypi-publish-impl.md](m17-pypi-publish-impl.md)'s
422
+ milestone-completion summary.
423
+
424
+ - **PyPI:** https://pypi.org/project/docs-cli/1.6.0/ ·
425
+ **TestPyPI rehearsal:**
426
+ https://test.pypi.org/project/docs-cli-rehearsal/1.6.0/
427
+ - **Published artefact sha256:**
428
+ - wheel `docs_cli-1.6.0-py3-none-any.whl`:
429
+ `b0822709ec297223efeba9945a44f624b6f9d3edefaaff02a42abc31b499d45c`
430
+ - sdist `docs_cli-1.6.0.tar.gz`:
431
+ `04175cda15694fbc90a263da31cac752b1f58aee377dd029eecf3a3b5e1f6d88`
432
+ - **Chain-of-custody:** PyPI-served wheel sha256 byte-identical
433
+ to the local Phase-4 build — **bit-perfect** (matches M11/M13).
434
+ - **Quality gate at publish:** 510 passed; ruff / ruff format /
435
+ mypy clean tree-wide; `docs check docs/` exit 0;
436
+ `docs index --root docs/ --dry-run` idempotent.
437
+ - **Smoke + all seven M14 + M15 headline contracts** verified
438
+ against the PyPI-served wheel: `docs --version` → `docs 1.6.0`;
439
+ `install-skill` byte-identical / no-op / `--symlink` exit 2;
440
+ M14 `mv` all-or-nothing; M14 `new` strict-root refusal; M14
441
+ non-interactive `archive --cascade` (+ `--cascade-dry-run`
442
+ writes nothing); M14 four-verb exclude-honouring reindex; M15
443
+ `project set` (atomic + typo guard + did-you-mean +
444
+ archived-untouched); M15 single-file `stamp` (title-from-H1,
445
+ draft, re-stamp no-op bar `Updated:`); M15 `--body-from`
446
+ real-frontmatter detector.
447
+ - **`v1.6.0`** annotated tag at `95f23a6` (the Phase-4
448
+ dated-CHANGELOG commit whose tree matches PyPI); GitHub release
449
+ live with notes sourced from the `## 1.6.0` CHANGELOG section.
450
+
451
+ ### Deviations (recorded for v1.7+)
452
+
453
+ 1. **TestPyPI rehearsal wheel prints `docs 0.0.0+local`, not
454
+ `docs 1.6.0`** — known-expected since the M12 `importlib.metadata`
455
+ SoT refactor (the rehearsal installs as `docs-cli-rehearsal`,
456
+ so the lookup misses and falls back). Not a regression — the
457
+ real version string is proven by the canonical-name local
458
+ wheel (Phase 2) and the PyPI wheel (Phase 4).
459
+ 2. **`CHANGELOG.md` is not in the sdist** — known-expected since
460
+ M13. At M17 the **wheel** sha was byte-identical across
461
+ Phase 2 ≡ Phase 4 (`src/` unchanged → reproducible), while the
462
+ **sdist** sha moved (`da1a60b8…` → `04175cda…`) ONLY because
463
+ `docs/` evolved between the two builds (the impl-log
464
+ Phase-2/3 commit) — not because of the Phase-4 CHANGELOG date
465
+ edit. Recorded so the moved sdist sha is not mistaken for a
466
+ regression.
467
+
468
+ No `1.6.x` bump was forced. Token re-scope to project-`docs-cli`
469
+ continues to roll forward as the M9 open follow-on.
470
+
399
471
  ## OPEN QUESTIONS
400
472
 
401
473
  None (Q1, Q2 resolved by the operator at Step 0 — see Decisions).
@@ -3,7 +3,7 @@
3
3
  Lifecycle: active
4
4
  Role: spec
5
5
  Project: docs
6
- Updated: 2026-06-03
6
+ Updated: 2026-06-12
7
7
 
8
8
  Related:
9
9
  - pairs-with: convention.md
@@ -262,6 +262,12 @@ Query view.
262
262
  > **`docs list --status` was renamed `docs list --lifecycle` at
263
263
  > M7. The breaking-rename has no backward-compat alias.**
264
264
 
265
+ > **`[check] stale_days` does NOT affect `docs list --stale` (M19 — Q6).**
266
+ > The `.docs.toml [check] stale_days` config key is scoped to **check**
267
+ > semantics only. `docs list` keeps `--stale` as an explicit filter: bare
268
+ > `docs list` (no `--stale`) lists everything regardless of any configured
269
+ > `stale_days`, and an explicit `docs list --stale N` filters by N as always.
270
+
265
271
  Exits 0.
266
272
 
267
273
  ### `docs check [DIR] [--stale N] [--json] [--exclude PATTERN]`
@@ -274,7 +280,7 @@ Validate the tree. Reports (and exits nonzero on) any of:
274
280
  - Structural breakage: a missing H1. (A malformed line inside the metadata block ends the block early rather than raising; its effect surfaces as a missing required field, not as a separate finding.)
275
281
  - Lifecycle/location mismatch (`Lifecycle: archived` outside archive subtree, or any other lifecycle inside) — rule `status-drift` (stable rule id from M3).
276
282
  - `Related:` paths that don't resolve to a file under the docs root.
277
- - (With `--stale N`) `Lifecycle: active` docs with `Updated:` more than N days ago.
283
+ - (With a stale window — see **Stale-window resolution** below) `Lifecycle: active` docs with `Updated:` more than N days ago.
278
284
  - (M7 — F1) A missing `Role:` line whose value is resolvable from an H1
279
285
  trailing-word signal or a section-header pattern produces a
280
286
  medium-confidence inference — `severity: warning`, rule
@@ -303,7 +309,42 @@ Exit codes:
303
309
  - 1 — warnings only (stale docs; medium-confidence inferences; unknown-field warnings).
304
310
  - 2 — errors (missing required fields, invalid vocab, malformed structure, lifecycle/location drift, broken refs).
305
311
 
306
- ### `docs touch <file>...`
312
+ **Stale-window resolution (M19 — D2).** The stale window the `stale` rule
313
+ applies is resolved as **CLI `--stale` > `[check] stale_days` > unset**:
314
+
315
+ - An explicit CLI `--stale N` always wins — including `--stale 0`, which is
316
+ honoured as given (flag every active doc not updated *today*), not treated
317
+ as "unset".
318
+ - When `--stale` is absent and the docs root's `.docs.toml` carries a
319
+ `[check] stale_days = N` (see `convention.md` › *Per-tree `[check]`
320
+ config*), that value supplies the window. A configured `stale_days`
321
+ therefore makes **bare `docs check`** (with no `--stale` flag) apply the
322
+ stale rule — setting the key is the operator's explicit per-tree opt-in.
323
+ - When neither is present, behaviour is exactly today's: no stale window, so
324
+ the `stale` rule never fires. Trees with no `[check]` section are
325
+ byte-for-byte unchanged.
326
+
327
+ This resolution is shared by `docs check` and `docs touch --check`;
328
+ `docs list --stale` is **not** a consumer (see `docs list` below).
329
+
330
+ **Threshold provenance.** The `stale` finding's message names where the
331
+ threshold came from, so the operator knows which knob to turn. The
332
+ parenthetical extends as follows (the rule id `stale`, severity `warning`,
333
+ and exit code 1 are unchanged — only the message text):
334
+
335
+ - config-sourced (the window came from `[check] stale_days`):
336
+ `(stale threshold N, set in .docs.toml [check] stale_days)`;
337
+ - CLI-sourced (the window came from `--stale N`):
338
+ `(stale threshold N, via --stale)`.
339
+
340
+ (`docs touch --check` inherits this resolution and provenance: config-sourced
341
+ when no `--stale` is forwarded, CLI-sourced when `--stale N` is.) Internally,
342
+ a `stale_source` (`"config"` / `"cli"` / `None`) is threaded alongside the
343
+ resolved window — a small `resolve_stale(cli_stale, config.stale_days)`
344
+ helper, shared by both consumers, returns the `(window, source)` pair so the
345
+ message is assembled in one place.
346
+
347
+ ### `docs touch <file>... [--check [--stale N]]`
307
348
 
308
349
  Bump `Updated:` to today in one or more docs. Accepts one or more
309
350
  positional file paths. INDEX regenerated **exactly once** at end of
@@ -341,6 +382,46 @@ rename` (M14 — A6, four-site).
341
382
  one `docs: touched <path>` per file on stderr (gated on `not
342
383
  --quiet`).
343
384
 
385
+ **`--check [--stale N]` — touch-then-validate in one invocation (M19 — D1).**
386
+ `--check` folds the existing `docs check` machinery into `docs touch` so
387
+ the common post-edit loop (`docs touch <files>` → `docs index .` →
388
+ `docs check . --stale N`) collapses to a single command. When `--check`
389
+ is set, *after* `touch`'s end-of-batch INDEX refresh runs, `touch`
390
+ invokes the same **tree-wide** `check_tree` over the resolved docs root
391
+ that bare `docs check` runs — it *replaces* the `docs check .` step of
392
+ the loop, not a touched-files-only subset.
393
+
394
+ - **Combined exit code = `max(touch, check)` with a touch-fail
395
+ short-circuit (M19 — Q1).** Touch runs first. If touch itself fails
396
+ (exit 1 — missing/bad path; or exit 2 — outside-root refusal /
397
+ INDEX-refresh failure) the check does **not** run and touch's code is
398
+ returned (a failed touch left nothing meaningful to validate). If touch
399
+ succeeds (0), the check runs and its 0/1/2 (clean / warnings-only /
400
+ errors) becomes the command's exit code.
401
+ - **`--stale N` is forwarded to the check (M19 — Q3 / D2).** With
402
+ `--check`, `--stale N` supplies the check's stale window; when `--stale`
403
+ is absent, the `[check] stale_days` config default applies (see
404
+ `docs check` below for the resolution rule). `--stale` **without**
405
+ `--check` is a hard error — exit 2 with
406
+ `docs: touch: --stale requires --check` on stderr; the file is left
407
+ byte-unchanged and no reindex runs.
408
+ - **`--dry-run --check` previews the touch and checks the un-mutated tree
409
+ (M19 — Q4).** Under `--dry-run` nothing is written and no INDEX refresh
410
+ runs, so the check walks the **on-disk (un-mutated)** tree directly. A
411
+ doc the dry-run *would* refresh may therefore still read as stale, since
412
+ dry-run did not bump its `Updated:`.
413
+ - **`--quiet` gates only `touch`'s own stderr lines (M19 — Q-E).** The
414
+ `would touch` / `touched` success/preview lines are suppressed under
415
+ `--quiet`; the check's findings, which print on **stdout**, are **never**
416
+ suppressed by `--quiet`.
417
+ - **The check honours the same `[exclude]` / `.docsignore` predicate as
418
+ `touch`'s reindex (M19 — Q-F).** The tree-wide check applies the
419
+ persistent layered exclusion predicate (`.docs.toml [exclude]` + a root
420
+ `.docsignore`) — the same one `touch`'s end-of-batch reindex and bare
421
+ `docs check` use. `touch` has no `--exclude` flag of its own. A malformed
422
+ *excluded* file therefore never fails the check (just as it never fails
423
+ the reindex).
424
+
344
425
  Multi-root invocation (`docs touch a.md b.md` where `a.md` and `b.md`
345
426
  resolve to different docs roots) is **undefined behaviour and out of
346
427
  M10 scope** — the validate-all-first pass refuses with exit 1 + an
@@ -3,7 +3,7 @@
3
3
  Lifecycle: active
4
4
  Role: spec
5
5
  Project: docs
6
- Updated: 2026-06-03
6
+ Updated: 2026-06-12
7
7
 
8
8
  Related:
9
9
  - pairs-with: cli.md
@@ -210,6 +210,31 @@ role_suffixes = { spec_v2 = "spec" } # F1: per-tree custom suffix mapping
210
210
  - `role_suffixes` — extends the built-in filename-suffix → role
211
211
  map with per-tree entries.
212
212
 
213
+ ### Per-tree `[check]` config (M19 — D2)
214
+
215
+ A docs root's `.docs.toml` may carry a `[check]` section to set a
216
+ per-tree default stale window for validation:
217
+
218
+ ```toml
219
+ [check]
220
+ stale_days = 30 # M19: default --stale window for this tree
221
+ ```
222
+
223
+ - `stale_days` — an **integer**. When set, it supplies the
224
+ stale window to `docs check` and `docs touch --check` whenever no
225
+ explicit CLI `--stale` is given — a configured `stale_days` makes bare
226
+ `docs check` apply the `stale` rule with this window (the operator's
227
+ per-tree opt-in). An explicit `--stale N` on the command line always
228
+ overrides it. **Absent** → no default stale window (today's behaviour:
229
+ the `stale` rule fires only under an explicit `--stale`). The key is
230
+ scoped to **check** semantics — it does **not** feed `docs list --stale`,
231
+ which stays an explicit filter. A **non-integer** value (e.g. the TOML
232
+ string `stale_days = "14"`, or `stale_days = true`) is **refused** at
233
+ config load — `docs` exits 2 with `malformed .docs.toml: [check]
234
+ stale_days must be an integer`, rather than crashing in the stale
235
+ comparison. Negative integers are honoured as given (a negative window
236
+ flags every active doc, mirroring `--stale 0`).
237
+
213
238
  ## Relationship verbs
214
239
 
215
240
  `Related:` entries use the form `<verb>: <path>`. Verbs are free-form, but a small set is conventional: