selfdoc 0.5.2__tar.gz → 0.7.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 (207) hide show
  1. selfdoc-0.7.0/.rlsbl/changes/.validated +1 -0
  2. selfdoc-0.7.0/.rlsbl/changes/0.5.2.md +5 -0
  3. selfdoc-0.7.0/.rlsbl/changes/0.6.0.jsonl +12 -0
  4. selfdoc-0.7.0/.rlsbl/changes/0.6.0.md +11 -0
  5. selfdoc-0.7.0/.rlsbl/changes/0.7.0.jsonl +11 -0
  6. selfdoc-0.7.0/.rlsbl/changes/0.7.0.md +12 -0
  7. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/hooks/pre-release.sh +3 -0
  8. selfdoc-0.7.0/.rlsbl/version +1 -0
  9. {selfdoc-0.5.2 → selfdoc-0.7.0}/.selfdoc/hashes/hashes.json +38 -26
  10. selfdoc-0.7.0/.strictcli/schema.json +178 -0
  11. {selfdoc-0.5.2 → selfdoc-0.7.0}/CHANGELOG.md +25 -0
  12. selfdoc-0.7.0/CLAUDE.md +65 -0
  13. selfdoc-0.7.0/PKG-INFO +266 -0
  14. selfdoc-0.7.0/README.md +249 -0
  15. selfdoc-0.7.0/docs/_CLAUDE.md +39 -0
  16. selfdoc-0.5.2/README.md → selfdoc-0.7.0/docs/_README.md +36 -29
  17. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/cli-check.md +1 -0
  18. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/gen-index.md +3 -0
  19. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc-build.md +1 -1
  20. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc-check.md +1 -1
  21. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc-cli.md +1 -1
  22. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc-config.md +1 -1
  23. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc-deploy.md +1 -1
  24. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc-directives.md +1 -1
  25. selfdoc-0.7.0/docs/selfdoc-docs.md +12 -0
  26. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc-extractors-go.md +2 -2
  27. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc-extractors-python.md +2 -2
  28. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc-extractors-typescript.md +2 -2
  29. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc-extractors.md +2 -2
  30. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc-gen.md +2 -2
  31. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc-gendata.md +2 -2
  32. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc-html.md +2 -2
  33. selfdoc-0.7.0/docs/selfdoc-icons.md +12 -0
  34. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc-resolver.md +2 -2
  35. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc-strictcli_support.md +1 -1
  36. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc-tokenizer.md +2 -2
  37. selfdoc-0.7.0/docs/selfdoc-utils.md +12 -0
  38. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc.md +1 -1
  39. {selfdoc-0.5.2 → selfdoc-0.7.0}/package-lock.json +2 -2
  40. {selfdoc-0.5.2 → selfdoc-0.7.0}/package.json +1 -1
  41. {selfdoc-0.5.2 → selfdoc-0.7.0}/pyproject.toml +5 -2
  42. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/build.py +26 -111
  43. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/catalog.py +28 -0
  44. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/check.py +82 -123
  45. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/cli.py +34 -15
  46. selfdoc-0.7.0/selfdoc/config.py +677 -0
  47. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/content.py +288 -2
  48. selfdoc-0.7.0/selfdoc/docs.py +125 -0
  49. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/gen.py +90 -65
  50. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/html.py +2 -2
  51. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/resolver.py +3 -2
  52. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/staleness.py +38 -0
  53. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/strictcli_support.py +86 -339
  54. selfdoc-0.7.0/selfdoc/utils.py +68 -0
  55. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc.json +1 -0
  56. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_build.py +35 -1
  57. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_catalog.py +5 -0
  58. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_config.py +147 -7
  59. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_content.py +3 -1
  60. selfdoc-0.7.0/tests/test_meta_directives.py +273 -0
  61. selfdoc-0.7.0/tests/test_root_files.py +161 -0
  62. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_staleness.py +90 -0
  63. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_strictcli_support.py +246 -158
  64. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_token_migration.py +1 -1
  65. selfdoc-0.7.0/todo/.done/check-command-side-effect.md +24 -0
  66. selfdoc-0.7.0/todo/.done/gen-strictcli-coupling.md +21 -0
  67. selfdoc-0.7.0/todo/.done/stale001-release-friction.md +33 -0
  68. selfdoc-0.7.0/todo/.done/strictcli-features.md +41 -0
  69. {selfdoc-0.5.2 → selfdoc-0.7.0}/uv.lock +12 -7
  70. selfdoc-0.5.2/.rlsbl/changes/.validated +0 -1
  71. selfdoc-0.5.2/.rlsbl/version +0 -1
  72. selfdoc-0.5.2/CLAUDE.md +0 -46
  73. selfdoc-0.5.2/PKG-INFO +0 -200
  74. selfdoc-0.5.2/selfdoc/config.py +0 -364
  75. {selfdoc-0.5.2 → selfdoc-0.7.0}/.claude/settings.json +0 -0
  76. {selfdoc-0.5.2 → selfdoc-0.7.0}/.github/workflows/ci.yml +0 -0
  77. {selfdoc-0.5.2 → selfdoc-0.7.0}/.github/workflows/publish.yml +0 -0
  78. {selfdoc-0.5.2 → selfdoc-0.7.0}/.gitignore +0 -0
  79. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/bases/.claude/settings.json +0 -0
  80. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/bases/.github/workflows/ci.yml +0 -0
  81. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/bases/.github/workflows/publish.yml +0 -0
  82. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/bases/.gitignore +0 -0
  83. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/bases/.rlsbl/changes/unreleased.jsonl +0 -0
  84. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/bases/.rlsbl/hooks/post-release.sh +0 -0
  85. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/bases/.rlsbl/hooks/pre-checks.sh +0 -0
  86. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/bases/.rlsbl/hooks/pre-release.sh +0 -0
  87. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/bases/.rlsbl/lint/go.toml +0 -0
  88. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/bases/.rlsbl/lint/npm.toml +0 -0
  89. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/bases/.rlsbl/lint/python.toml +0 -0
  90. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/bases/CLAUDE.md +0 -0
  91. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.1.0.jsonl +0 -0
  92. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.1.0.md +0 -0
  93. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.2.0.jsonl +0 -0
  94. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.2.0.md +0 -0
  95. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.3.0.jsonl +0 -0
  96. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.3.0.md +0 -0
  97. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.3.1.jsonl +0 -0
  98. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.3.1.md +0 -0
  99. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.4.0.jsonl +0 -0
  100. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.4.0.md +0 -0
  101. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.4.1.jsonl +0 -0
  102. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.4.1.md +0 -0
  103. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.4.2.jsonl +0 -0
  104. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.4.2.md +0 -0
  105. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.4.3.jsonl +0 -0
  106. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.4.3.md +0 -0
  107. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.4.4.jsonl +0 -0
  108. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.4.4.md +0 -0
  109. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.4.5.jsonl +0 -0
  110. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.4.5.md +0 -0
  111. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.5.0.jsonl +0 -0
  112. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.5.0.md +0 -0
  113. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.5.1.jsonl +0 -0
  114. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.5.1.md +0 -0
  115. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/0.5.2.jsonl +0 -0
  116. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/changes/unreleased.jsonl +0 -0
  117. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/config.json +0 -0
  118. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/hashes.json +0 -0
  119. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/hooks/post-release.sh +0 -0
  120. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/hooks/pre-checks.sh +0 -0
  121. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/lint/go.toml +0 -0
  122. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/lint/npm.toml +0 -0
  123. {selfdoc-0.5.2 → selfdoc-0.7.0}/.rlsbl/lint/python.toml +0 -0
  124. {selfdoc-0.5.2 → selfdoc-0.7.0}/LICENSE +0 -0
  125. {selfdoc-0.5.2 → selfdoc-0.7.0}/bin/cli.js +0 -0
  126. {selfdoc-0.5.2 → selfdoc-0.7.0}/demo/index.html +0 -0
  127. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/architecture.md +0 -0
  128. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/cli-build.md +0 -0
  129. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/cli-deploy.md +0 -0
  130. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/cli-gen-data.md +0 -0
  131. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/cli-gen.md +0 -0
  132. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/cli-index.md +0 -0
  133. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/cli-init.md +0 -0
  134. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/cli-serve.md +0 -0
  135. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/configuration.md +0 -0
  136. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/deployment.md +0 -0
  137. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/directives.md +0 -0
  138. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/getting-started.md +0 -0
  139. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/index.md +0 -0
  140. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/selfdoc-__main__.md +0 -0
  141. {selfdoc-0.5.2 → selfdoc-0.7.0}/docs/theming.md +0 -0
  142. {selfdoc-0.5.2 → selfdoc-0.7.0}/schemas/check-output.schema.json +0 -0
  143. {selfdoc-0.5.2 → selfdoc-0.7.0}/scripts/catalog-directive.py +0 -0
  144. {selfdoc-0.5.2 → selfdoc-0.7.0}/scripts/config-schema-directive.py +0 -0
  145. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/__init__.py +0 -0
  146. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/__main__.py +0 -0
  147. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/deploy.py +0 -0
  148. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/directives.py +0 -0
  149. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/extractors/__init__.py +0 -0
  150. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/extractors/base.py +0 -0
  151. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/extractors/go.py +0 -0
  152. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/extractors/protocol.py +0 -0
  153. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/extractors/python.py +0 -0
  154. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/extractors/typescript.py +0 -0
  155. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/gendata.py +0 -0
  156. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/git.py +0 -0
  157. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/icons.py +0 -0
  158. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/themes/__init__.py +0 -0
  159. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/themes/clean.css +0 -0
  160. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/themes/clean.json +0 -0
  161. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/themes/minimal.css +0 -0
  162. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/themes/minimal.json +0 -0
  163. {selfdoc-0.5.2 → selfdoc-0.7.0}/selfdoc/tokenizer.py +0 -0
  164. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_check.py +0 -0
  165. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_check_schema.py +0 -0
  166. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_cli.py +0 -0
  167. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_contrast.py +0 -0
  168. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_custom_directives.py +0 -0
  169. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_demo_panel.py +0 -0
  170. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_directives.py +0 -0
  171. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_e2e.py +0 -0
  172. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_extractors_protocol.py +0 -0
  173. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_future_directives.py +0 -0
  174. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_gen.py +0 -0
  175. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_gendata.py +0 -0
  176. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_git.py +0 -0
  177. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_go_extractor.py +0 -0
  178. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_h1.py +0 -0
  179. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_python_extractor.py +0 -0
  180. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_search.py +0 -0
  181. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_tokenizer.py +0 -0
  182. {selfdoc-0.5.2 → selfdoc-0.7.0}/tests/test_ts_extractor.py +0 -0
  183. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/0.4.5-multiple-issues.md +0 -0
  184. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/0.4.5-regression-module-descriptions.md +0 -0
  185. {selfdoc-0.5.2/todo → selfdoc-0.7.0/todo/.done}/0.5.0-cli-page-description-preservation-regression.md +0 -0
  186. {selfdoc-0.5.2/todo → selfdoc-0.7.0/todo/.done}/atom-feed-filtering.md +0 -0
  187. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/auto-commit-hashes.md +0 -0
  188. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/auto-generated-glossary.md +0 -0
  189. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/auto-generation-gaps.md +0 -0
  190. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/brotli-dependency.md +0 -0
  191. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/changelog-page.md +0 -0
  192. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/code-help-package-path-and-strictcli.md +0 -0
  193. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/coverage-go-typescript.md +0 -0
  194. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/cross-page-term-linking.md +0 -0
  195. {selfdoc-0.5.2/todo → selfdoc-0.7.0/todo/.done}/css-redesign.md +0 -0
  196. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/gen-cli-descriptions.md +0 -0
  197. {selfdoc-0.5.2/todo → selfdoc-0.7.0/todo/.done}/generate-claude-readme.md +0 -0
  198. {selfdoc-0.5.2/todo → selfdoc-0.7.0/todo/.done}/glossary-config-opt-in.md +0 -0
  199. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/lint-ignores-code-blocks.md +0 -0
  200. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/reading-progress.md +0 -0
  201. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/recursive-coverage-matching.md +0 -0
  202. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/seo-geo-audit.md +0 -0
  203. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/seo-linting-gaps.md +0 -0
  204. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/sticky-column-striped-rows.md +0 -0
  205. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/sticky-table-column.md +0 -0
  206. {selfdoc-0.5.2/todo → selfdoc-0.7.0/todo/.done}/strictcli-schema-json.md +0 -0
  207. {selfdoc-0.5.2 → selfdoc-0.7.0}/todo/.done/styling-and-release.md +0 -0
@@ -0,0 +1 @@
1
+ ad41660337afb7f0b5bd92a6ba166cb873b9b4d5
@@ -0,0 +1,5 @@
1
+ ## 0.5.2
2
+
3
+ ### Fixes
4
+
5
+ - **CLI page preservation fix end-to-end.** Handwritten CLI page descriptions now actually survive `selfdoc gen` (the 0.5.1 preservation logic was defeated by stale-file cleanup deleting CLI pages before they could be read for preservation).
@@ -0,0 +1,12 @@
1
+ {"commits":["ffd2e1f4031f62d5344292a84c614e41f468892a"],"user_facing":false}
2
+ {"commits":["379ba6e08cc06fc4ab0161dcb2671c951dac3093"],"user_facing":false}
3
+ {"commits":["8b64f528432988cfa4b579909b1e78a86ee3e52a","b5acfe9daa4454a4bf29cb76ae1008430772e643"],"user_facing":false}
4
+ {"commits":["4b1db6378937c6bbea82b100623f2992847cd761","fb4f1779cc771becb9ab4c674f03ab65e9dcb3ef"],"user_facing":false}
5
+ {"commits":["ed73a66a3254fa8d6a1c6f0ab8c9b5dd45c76004","34bfab4e2a32026c6430fdeb7d8dbc945014c496","ec8e8b19371c266ccdde35b58e33853fd1054ac6","f52a0b0413f6d6e7387b76597371713a4d09f41a"],"user_facing":true,"description":"**Declarative config schema.** Config validation is now driven by a schema (FieldType enum + FieldSpec dataclass) instead of procedural code. Unknown top-level keys in selfdoc.json are now rejected.","type":"feature"}
6
+ {"commits":["74354656224c2f339357b56ec378f03c813e1a5e","1b76129ad004fdc44a548ec61cc5b6f13878970a"],"user_facing":true,"description":"**Five new directives.** `list-modules`, `table-commands`, `table-directives`, `table-config-schema`, and `var` for generating module lists, CLI command tables, directive catalogs, config reference tables, and project metadata interpolation.","type":"feature"}
7
+ {"commits":["6edcd4741a1dc09af29b0311d32f1762939ceae9","29bf767d81407a7d6e07ead4bb61ac308c1c53d8","12627ed47a61820c36f22e476360ed2f4cdf4d69","d1b6c6b7c973da39ca3c14dd6546fb3a8d45a353"],"user_facing":true,"description":"**Root file generation.** `selfdoc gen` can now produce root-level Markdown files (CLAUDE.md, README.md, etc.) from underscore-prefixed templates in docs/. Configure via `root_files` in selfdoc.json. Generated files are read-only (0o444) with an auto-generated header.","type":"feature"}
8
+ {"commits":["4feaf98c70d705f2a5dbeee246b8dd022d546365","f3b3570a6fbd2054af50fb7ed8f248ab78966c16","e6f09ead57c88403f2012105cb8406e1ecbe2f5b","cfc6b4256c28e19d66823bacf3bc0df30935a0e0"],"user_facing":false}
9
+ {"commits":["28f48c9faee8dd0876c3acc30bd6e1b4cfcd37c1","c5dd07d5e434787e977839948e3698c5e1b6a78f","fc11f02005d45753ecbd5e52500ddee79f24d9b1"],"user_facing":false}
10
+ {"commits":["fabfc6f4e82bf79ea14c52e3f793aceaab3395ad"],"user_facing":false}
11
+ {"commits":["416002f8c8f593439fd3d98d9e9c993b6785fb68","7e25995dd928d6ae98d779be1a23e6a33a23b5d5"],"user_facing":false}
12
+ {"commits":["3a19eb6185f43ffb5ee8f44364eb7066b69eec2f"],"user_facing":true,"description":"**Underscore-prefixed templates excluded from lint.** `selfdoc check` now skips `_*.md` files in docs/, matching the existing build exclusion.","type":"fix"}
@@ -0,0 +1,11 @@
1
+ ## 0.6.0
2
+
3
+ ### Features
4
+
5
+ - **Declarative config schema.** Config validation is now driven by a schema (FieldType enum + FieldSpec dataclass) instead of procedural code. Unknown top-level keys in selfdoc.json are now rejected.
6
+ - **Five new directives.** `list-modules`, `table-commands`, `table-directives`, `table-config-schema`, and `var` for generating module lists, CLI command tables, directive catalogs, config reference tables, and project metadata interpolation.
7
+ - **Root file generation.** `selfdoc gen` can now produce root-level Markdown files (CLAUDE.md, README.md, etc.) from underscore-prefixed templates in docs/. Configure via `root_files` in selfdoc.json. Generated files are read-only (0o444) with an auto-generated header.
8
+
9
+ ### Fixes
10
+
11
+ - **Underscore-prefixed templates excluded from lint.** `selfdoc check` now skips `_*.md` files in docs/, matching the existing build exclusion.
@@ -0,0 +1,11 @@
1
+ {"commits":["4662248eddc55e9a73f9df2138a03a602fbbb3c3","e0e4c7b9fab63d67264ea239b7f17e78b935e79b","fd56b8a2b3882aae1e7ac3d8e04b1b2a1da4e03a"],"user_facing":false}
2
+ {"commits":["1617fc181590d677f6d9dd1b2fee678b5518e725","d13d1ff2acb197d6d9faf2f04cc2de6331f7f965","b9c5ca6ec417e6025bbd4819880c2a9c3af855d0"],"user_facing":true,"description":"**Shared resolution pipeline.** Directive resolution centralized in a single pass, eliminating redundant walks and double resolution in `selfdoc check`.","type":"feature"}
3
+ {"commits":["87148a4d0a4186660d5a9786b98392b5aa0e5806","eac635d58ae294a7f849cbeaf5d032cdd9f00f88"],"user_facing":true,"description":"**`--dry-run` flag for `selfdoc check`.** Reports staleness without writing hashes or committing. Hash computation centralized in `staleness.py`.","type":"feature"}
4
+ {"commits":["437989e14299d999587a465f126e24bfa7a76294"],"user_facing":true,"description":"**Glossary opt-out.** Set `\"glossary\": false` in selfdoc.json to suppress auto-generated glossary page. **Feed entry limit.** Set `\"feed_max_entries\": N` to limit the Atom feed to the N most recent pages.","type":"feature"}
5
+ {"commits":["c44501f7b4dda858b9ddd1b5d32a865983fefdd7"],"user_facing":true,"description":"**Schema.json-based CLI extraction.** Replaced AST-based CLI structure extraction with reading `.strictcli/schema.json`. Richer data (flag choices, hidden flags, deprecated commands). Go projects get CLI documentation for the first time.","type":"feature"}
6
+ {"commits":["a3c908e7786cbc2fc64828817da30361ac2bbc79"],"user_facing":true,"description":"**strictcli dependency bumped to >=0.7.0** for `--dump-schema` support.","type":"breaking"}
7
+ {"commits":["83b5a988820d106ba75b894df092b99d0536340b","83f73d733b2792cb925258dba0a6ce9f2f9798dc","aadff49c75d6aa6116704e140704ed3891e8d1a4"],"user_facing":false}
8
+ {"commits":["4d72c32453e32e86376f0e4a7a955888899931d3","0a38988185a90b9cf4c712ed8080182baf73732f","b49e973064c01b0978d582065c01ca524dea6dd3"],"user_facing":false}
9
+ {"commits":["eacb35107670be3dd1c0495fe7368bc7392abff3"],"user_facing":false}
10
+ {"commits":["b54e86870482f24e3a78405c8c300f0c98f39aea"],"user_facing":false}
11
+ {"commits":["907abafbbb26de0936639cf29b2f44fbe9c437c9","2c17abf22cb3bd4e0e6179b8fed1faf34f153f70","93a1fe7d9ecdc0d3d59bc2db1617a1e674f57e3e"],"user_facing":false}
@@ -0,0 +1,12 @@
1
+ ## 0.7.0
2
+
3
+ ### Breaking
4
+
5
+ - **strictcli dependency bumped to >=0.7.0** for `--dump-schema` support.
6
+
7
+ ### Features
8
+
9
+ - **Shared resolution pipeline.** Directive resolution centralized in a single pass, eliminating redundant walks and double resolution in `selfdoc check`.
10
+ - **`--dry-run` flag for `selfdoc check`.** Reports staleness without writing hashes or committing. Hash computation centralized in `staleness.py`.
11
+ - **Glossary opt-out.** Set `"glossary": false` in selfdoc.json to suppress auto-generated glossary page. **Feed entry limit.** Set `"feed_max_entries": N` to limit the Atom feed to the N most recent pages.
12
+ - **Schema.json-based CLI extraction.** Replaced AST-based CLI structure extraction with reading `.strictcli/schema.json`. Richer data (flag choices, hidden flags, deprecated commands). Go projects get CLI documentation for the first time.
@@ -3,6 +3,9 @@ set -euo pipefail
3
3
 
4
4
  echo "Running pre-release checks..."
5
5
 
6
+ echo " Updating CLI schema..."
7
+ uv run selfdoc --dump-schema
8
+
6
9
  if [ -f go.mod ]; then
7
10
  echo " Go: vet + build + test"
8
11
  go vet ./...
@@ -0,0 +1 @@
1
+ 0.37.0
@@ -8,7 +8,7 @@
8
8
  "description": "8a4adace98aa9e1d61ec6b19dad2790d33bb9a7b6ccc435cfc9484ea22799bc8"
9
9
  },
10
10
  "cli-check.md": {
11
- "content": "495266af4cc9c57cba5084443575781e5b8172adf934423eaa0a8f2246d0d9b6",
11
+ "content": "9b089d4ee112451eb379de9dfa9fa3cb69f4cd696a3ab83c4192af6cb8d7c7da",
12
12
  "description": "7ded848e80672d3121d55b1298869333328ceeb3bab2ed722fd190f4f36865dd"
13
13
  },
14
14
  "cli-deploy.md": {
@@ -44,11 +44,11 @@
44
44
  "description": "a06732d81dedac36b59c719e5e6ddb4f6e39b7250cb46cd8575ac4368d270663"
45
45
  },
46
46
  "directives.md": {
47
- "content": "be302133f15cc289f055cd36dbd4f4c35afd16cbe22f86f9bfbd944d8acad8fa",
47
+ "content": "bbdfe1785fcce6cbe2c2744f4ccad7582b0e8ccdb6e2cfc9ba1efa303b3eb27f",
48
48
  "description": "17f2e9be72b960c7fb00f3b9bb0caa2d2323ff159d895d528150c2bd174934fb"
49
49
  },
50
50
  "gen-index.md": {
51
- "content": "b9a34b4f67c1d3c80a949b39ec62bb6ffcc946f1b9c7efd1a3374b59518edd8e",
51
+ "content": "3327e75cd368e8fc574d2671ae6647b65bb178e8f011e3283d8e5c28e2a11bc2",
52
52
  "description": "bb3cd9d34f014c0674a9285c25ee14b5b4abc5cf941f0d83594c301405e8f3b6"
53
53
  },
54
54
  "getting-started.md": {
@@ -64,72 +64,84 @@
64
64
  "description": "be4881babd1a98706a694be1393b205768d475c98a6f715d7ec504c1382e25de"
65
65
  },
66
66
  "selfdoc-build.md": {
67
- "content": "21a93bac9ec86685860f63d50cf78bc87951236530fdf0794709c4d52872352c",
68
- "description": "7a72665df4c9aa9006d521bc606ac3603fd79789ae0c6e8c36374e3425c7e6bc"
67
+ "content": "a11d09883a9c002706f29b73af2d6c74cd579b55396bbc5709cd00b8c3e7fedb",
68
+ "description": "25ec3ea53419eb4126b309ad81d0c2e78e1347f29201a7f1574f6e38e90e4621"
69
69
  },
70
70
  "selfdoc-check.md": {
71
- "content": "3c47444d8e3ae327c8dfc7f34cdbbe5fe44cd3a66c866d671882f93c93fc1d9f",
72
- "description": "794a9326b6ca57477f223c7a5c92a4daf64558ee677ff16137592388e36a6ebd"
71
+ "content": "6ef700fd3e91926959ef099568ed293e17a4d4a686d26c7b857bb1819d3a3f0d",
72
+ "description": "a458cccd01e54fe1e2266244fbbc15683400273f7f951c31c1392bc998151d6d"
73
73
  },
74
74
  "selfdoc-cli.md": {
75
- "content": "880355a1431236a3e4771ecad5bcbda7b20460cedaf1ae1332ea14e71b9858ab",
76
- "description": "1ba311ee0ea7095ad80086e071e6f33c15506ea2aec8d92a3cdaee9b89137dbf"
75
+ "content": "02f7bd2cb044c46158e0123825beacafef4c9a02fe9bfa3ab97df174da6d3fcc",
76
+ "description": "ee2400812c86e36d0188ddc98abf76fe402479955e087db0b33b5016e1f500ad"
77
77
  },
78
78
  "selfdoc-config.md": {
79
- "content": "9df82b5c322f48946bdac68f0bbfd2e8d8c4e2fe43112f31c7a1c871362ef7a7",
80
- "description": "877235edacabac0e9d18e6bfba4418eaf61998a6167bf0bbcd7b548da13bd36b"
79
+ "content": "e6346ad8a4024c28d54073fa33287212152fe87e0363bc8d5951390d639368e4",
80
+ "description": "0de91696b5053d2d39f731671dc1cd70cc0b4c0150586abf30d3346ee0da952d"
81
81
  },
82
82
  "selfdoc-deploy.md": {
83
83
  "content": "d753004c1be5186890f34d42342bd4d4d9a0d35d45dc48eb74bb9eadf1036fe3",
84
- "description": "32b71a5952b0e1d211b1a7d3ed98e7ef414b33474c43ffd37f13af3ab5bcee00"
84
+ "description": "93a17af98499afc17c0adb017c41e304783cc76f8f474b4656483f1d5ea3595a"
85
85
  },
86
86
  "selfdoc-directives.md": {
87
87
  "content": "284db842f12b44acc1a7e8b0d043571a0c587b59e474a13858291beb389484c3",
88
- "description": "66c20577a5b0714037d09ca907481f4e500af42bdcaf2c1ceed818520d34e737"
88
+ "description": "4349c5d3d01b37655615897c7e8cf33df5aad10bfe4d4a99f4bee95947406e2c"
89
+ },
90
+ "selfdoc-docs.md": {
91
+ "content": "6a28a5a84ef39dce108b51e334d801a3de3090bf542e935dd78fd22efce534e8",
92
+ "description": "e62e4b7f625c67bc856dc0a3332930e942bf9a184a88cadcec5a34cc3d4e7f50"
89
93
  },
90
94
  "selfdoc-extractors-go.md": {
91
95
  "content": "614e2764a5fffe95125a4472336018bdc91f6509a87352eb7c8a5ef7f2e04469",
92
- "description": "7a460a4f47e6dd0a90f88c6b4e490913bfa3f8b44c76ac45e7afceab755bdac9"
96
+ "description": "765787f8ad1d5011e0cc2990a0ac939663194d85ed56279ee7d37ccc49141e4a"
93
97
  },
94
98
  "selfdoc-extractors-python.md": {
95
99
  "content": "9171a5a26e52978d019369dea38d3b5aba843b3a99e8577e4a3b33de9a8a4782",
96
- "description": "e4a810daa1f6ada057b7b2e6434b11909aaa244f8c742d4d4cc8aa3b41537546"
100
+ "description": "eee365e917adb22ebe95fd8ed6322cf23316bc777e88d0b503618f4b199358ff"
97
101
  },
98
102
  "selfdoc-extractors-typescript.md": {
99
103
  "content": "ed037150438ddcea03e17cb7d91d30dc0f957d2ee950decd914bf0f6b5da6cff",
100
- "description": "e94ae996a8a87b8c66382bd0b03568180eeb0cf882db397defe34800910dd16f"
104
+ "description": "7b9cfae65be6a84e3612b5ccd5e4751053d1945f539b42050cd3d5031ee491a3"
101
105
  },
102
106
  "selfdoc-extractors.md": {
103
107
  "content": "585b695cab232ab64f87ef0b28c8547612e34192dbca6079a0eed522871d8cd1",
104
- "description": "1ece1664561302314e740b7152cf3cc80b81b27cfdec00142e64beb6aa8cbd49"
108
+ "description": "f5f7ee5341943072e3d458ed7f3e03bf6ea9479ef2410ee2dc07deadd32bfadb"
105
109
  },
106
110
  "selfdoc-gen.md": {
107
- "content": "cda2ade2e46df269791314f5eb86ddcf57b93eea09e404abb605b358cd732cb2",
108
- "description": "8a73b5ffff03f37c5b5289d81eb4fc9b6fdb17234f68e3f45d712046fe492168"
111
+ "content": "35d948386f50c635ad876d973cbde438540c2a813bcbc0357661a580f2514aa7",
112
+ "description": "ab944a7d47b5ef1e0bdcab2670bbd62d3e0bc902798ad1ca10bc3c06c6e78be9"
109
113
  },
110
114
  "selfdoc-gendata.md": {
111
115
  "content": "54e9a0a6aee2b422ced3b860c872362c65d940dae28ba3d0b79c3117bc234b62",
112
- "description": "6430b80740f48e37c397d5319d31c2678c29f9b7dc59ca58387a345d7c4b7e2e"
116
+ "description": "b808518c126f2f07a0b93986584b7fc20ae87cb76fc5f973b579c4066354a16d"
113
117
  },
114
118
  "selfdoc-html.md": {
115
- "content": "0aaf85d3491540940f52d0a6584fe22d22822bf7239ef52b98355052e4686e18",
116
- "description": "9d51466e9f880063e7acf362bfa98b6f8f8640dfb146a962615845d226553916"
119
+ "content": "3e2ffc99495e4af66ca02b7799c10bd7439fe8c869428c432a2fb808dca5d4c1",
120
+ "description": "e9c373874ce0bf9eaa4716a7b9a6f1e2ee94014b24f14c95df960e94cd780c59"
121
+ },
122
+ "selfdoc-icons.md": {
123
+ "content": "6d3a4944698f6bef54f3eccc01b221f0f09799a30006d9765dec7284dff72c46",
124
+ "description": "abfb38a84d98475211dd86e7621b5dd329d2189f88dcafa085a3d8299bd0da97"
117
125
  },
118
126
  "selfdoc-resolver.md": {
119
127
  "content": "4158312182ee977769882e9a4552ac2613f31bfa0dadb71be8bed0848861063d",
120
- "description": "2c516b214162dfd2230961238bf5e8d3f8cf35c8838d57112addb8c19484a8b0"
128
+ "description": "273c26abce985442107be1fb321e5d51068124691b7631754cf0267af4c03adf"
121
129
  },
122
130
  "selfdoc-strictcli_support.md": {
123
- "content": "1a2ca0ffff713e4aff94058cecf194342c24b7fcc15de2f50cf72db64a5de0dc",
131
+ "content": "b3bc7558fb379a83785e682d3696b79d93887b505e22b1986823d6afda24f3e1",
124
132
  "description": "ba21e34d05da48eae381df63dd5034745cbc1d5ce2d3cccf0b7a509cc89d4196"
125
133
  },
126
134
  "selfdoc-tokenizer.md": {
127
135
  "content": "46c221bfa3be2e7140ce503c11beda01355a8dccce26366ed612f476ef52371e",
128
- "description": "a45cb451a64d7e774195c7dea890afd21d3e5b18679fcac212154b79f670f867"
136
+ "description": "d89fda0bd6354be7a60574c8cd7fa2433bcbaf315c8f165e3e06f904e9949589"
137
+ },
138
+ "selfdoc-utils.md": {
139
+ "content": "9279dc668ca705cc1a6c7bbcb7b8c356eac318b3a3d3bfcf63bca0b25921b067",
140
+ "description": "af261d72c93a904f34d57a84f012c8ab805532e62c581aa0361873265cf7680e"
129
141
  },
130
142
  "selfdoc.md": {
131
143
  "content": "740137aa79607266cf4710eda34a20f09e042eb59aa74d888e1ce1c21e49b8d4",
132
- "description": "9cba9e52f4148dfa56b8f928b4f8d58783024d503e46b23d5de07451c186f12c"
144
+ "description": "878a8caa74c228e469b5a7ec4f769308f83ba4b2b21b568fcb6c38756d17b8e1"
133
145
  },
134
146
  "theming.md": {
135
147
  "content": "bb327170ca977b166a27223ee5ab21c8049fafc85f34519aeef10d1aac7e1506",
@@ -0,0 +1,178 @@
1
+ {
2
+ "name": "selfdoc",
3
+ "version": "0.6.0",
4
+ "help": "Code-aware static site generator with directive-based content extraction",
5
+ "env_prefix": null,
6
+ "config": false,
7
+ "global_flags": [],
8
+ "commands": {
9
+ "init": {
10
+ "name": "init",
11
+ "help": "Initialize selfdoc in the current project",
12
+ "flags": [
13
+ {
14
+ "name": "no-commit",
15
+ "type": "bool",
16
+ "help": "Skip auto-committing changed files",
17
+ "short": null,
18
+ "default": false,
19
+ "env": null,
20
+ "choices": null,
21
+ "repeatable": false,
22
+ "negatable": true,
23
+ "hidden": false
24
+ }
25
+ ],
26
+ "args": [],
27
+ "passthrough": false
28
+ },
29
+ "build": {
30
+ "name": "build",
31
+ "help": "Build the documentation site",
32
+ "flags": [
33
+ {
34
+ "name": "no-commit",
35
+ "type": "bool",
36
+ "help": "Skip auto-committing changed files",
37
+ "short": null,
38
+ "default": false,
39
+ "env": null,
40
+ "choices": null,
41
+ "repeatable": false,
42
+ "negatable": true,
43
+ "hidden": false
44
+ }
45
+ ],
46
+ "args": [],
47
+ "passthrough": false
48
+ },
49
+ "serve": {
50
+ "name": "serve",
51
+ "help": "Serve the documentation site locally",
52
+ "flags": [
53
+ {
54
+ "name": "port",
55
+ "type": "int",
56
+ "help": "Port to serve on (default: 8000)",
57
+ "short": "p",
58
+ "default": 8000,
59
+ "env": null,
60
+ "choices": null,
61
+ "repeatable": false,
62
+ "negatable": null,
63
+ "hidden": false
64
+ }
65
+ ],
66
+ "args": [],
67
+ "passthrough": false
68
+ },
69
+ "deploy": {
70
+ "name": "deploy",
71
+ "help": "Deploy the documentation site",
72
+ "flags": [],
73
+ "args": [],
74
+ "passthrough": false
75
+ },
76
+ "check": {
77
+ "name": "check",
78
+ "help": "Check documentation coverage and consistency",
79
+ "flags": [
80
+ {
81
+ "name": "ignore",
82
+ "type": "str",
83
+ "help": "Comma-separated SEO codes to suppress (e.g., SEO007,SEO008)",
84
+ "short": null,
85
+ "default": "",
86
+ "env": null,
87
+ "choices": null,
88
+ "repeatable": false,
89
+ "negatable": null,
90
+ "hidden": false
91
+ },
92
+ {
93
+ "name": "format",
94
+ "type": "str",
95
+ "help": "Output format (default: text)",
96
+ "short": null,
97
+ "default": "text",
98
+ "env": null,
99
+ "choices": [
100
+ "text",
101
+ "json"
102
+ ],
103
+ "repeatable": false,
104
+ "negatable": null,
105
+ "hidden": false
106
+ },
107
+ {
108
+ "name": "no-commit",
109
+ "type": "bool",
110
+ "help": "Skip auto-committing changed files",
111
+ "short": null,
112
+ "default": false,
113
+ "env": null,
114
+ "choices": null,
115
+ "repeatable": false,
116
+ "negatable": true,
117
+ "hidden": false
118
+ },
119
+ {
120
+ "name": "dry-run",
121
+ "type": "bool",
122
+ "help": "Report staleness without writing hashes",
123
+ "short": null,
124
+ "default": false,
125
+ "env": null,
126
+ "choices": null,
127
+ "repeatable": false,
128
+ "negatable": true,
129
+ "hidden": false
130
+ }
131
+ ],
132
+ "args": [],
133
+ "passthrough": false
134
+ },
135
+ "gen": {
136
+ "name": "gen",
137
+ "help": "Auto-generate documentation pages from project structure",
138
+ "flags": [
139
+ {
140
+ "name": "no-commit",
141
+ "type": "bool",
142
+ "help": "Skip auto-committing changed files",
143
+ "short": null,
144
+ "default": false,
145
+ "env": null,
146
+ "choices": null,
147
+ "repeatable": false,
148
+ "negatable": true,
149
+ "hidden": false
150
+ }
151
+ ],
152
+ "args": [],
153
+ "passthrough": false
154
+ },
155
+ "gen-data": {
156
+ "name": "gen-data",
157
+ "help": "Generate data files by running sandboxed scripts",
158
+ "flags": [
159
+ {
160
+ "name": "no-commit",
161
+ "type": "bool",
162
+ "help": "Skip auto-committing changed files",
163
+ "short": null,
164
+ "default": false,
165
+ "env": null,
166
+ "choices": null,
167
+ "repeatable": false,
168
+ "negatable": true,
169
+ "hidden": false
170
+ }
171
+ ],
172
+ "args": [],
173
+ "passthrough": false
174
+ }
175
+ },
176
+ "groups": {},
177
+ "deprecated": {}
178
+ }
@@ -2,6 +2,31 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ## 0.7.0
6
+
7
+ ### Breaking
8
+
9
+ - **strictcli dependency bumped to >=0.7.0** for `--dump-schema` support.
10
+
11
+ ### Features
12
+
13
+ - **Shared resolution pipeline.** Directive resolution centralized in a single pass, eliminating redundant walks and double resolution in `selfdoc check`.
14
+ - **`--dry-run` flag for `selfdoc check`.** Reports staleness without writing hashes or committing. Hash computation centralized in `staleness.py`.
15
+ - **Glossary opt-out.** Set `"glossary": false` in selfdoc.json to suppress auto-generated glossary page. **Feed entry limit.** Set `"feed_max_entries": N` to limit the Atom feed to the N most recent pages.
16
+ - **Schema.json-based CLI extraction.** Replaced AST-based CLI structure extraction with reading `.strictcli/schema.json`. Richer data (flag choices, hidden flags, deprecated commands). Go projects get CLI documentation for the first time.
17
+
18
+ ## 0.6.0
19
+
20
+ ### Features
21
+
22
+ - **Declarative config schema.** Config validation is now driven by a schema (FieldType enum + FieldSpec dataclass) instead of procedural code. Unknown top-level keys in selfdoc.json are now rejected.
23
+ - **Five new directives.** `list-modules`, `table-commands`, `table-directives`, `table-config-schema`, and `var` for generating module lists, CLI command tables, directive catalogs, config reference tables, and project metadata interpolation.
24
+ - **Root file generation.** `selfdoc gen` can now produce root-level Markdown files (CLAUDE.md, README.md, etc.) from underscore-prefixed templates in docs/. Configure via `root_files` in selfdoc.json. Generated files are read-only (0o444) with an auto-generated header.
25
+
26
+ ### Fixes
27
+
28
+ - **Underscore-prefixed templates excluded from lint.** `selfdoc check` now skips `_*.md` files in docs/, matching the existing build exclusion.
29
+
5
30
  ## 0.5.2
6
31
 
7
32
  ### Fixes
@@ -0,0 +1,65 @@
1
+ <!-- Auto-generated by selfdoc from docs/_CLAUDE.md — do not edit -->
2
+
3
+ # selfdocumenting
4
+
5
+ Code-aware documentation site generator. Builds full static sites from Markdown templates and source code, with directive-based content extraction, auto-generated API/CLI reference pages, theming, search, SEO, and deploy to Cloudflare Pages or GitHub Pages. Supports Python, Go, and TypeScript/JavaScript.
6
+
7
+ ## Conventions
8
+
9
+ - Pure Python, one runtime dependency (`strictcli>=0.2.0`)
10
+ - Build system: hatchling
11
+ - Development: `uv` for all Python tooling (`uv sync`, `uv run`, `uv add`)
12
+ - Local development install: `uv pip install -e .`
13
+ - npm package is a thin Node wrapper (`bin/cli.js`) that delegates to `python3 -m selfdoc`
14
+ - File writes to shared state use atomic write (write to tmp, then `os.replace`)
15
+ - External calls (subprocess, network) must have timeouts
16
+
17
+ ## Release workflow
18
+
19
+ This project uses [rlsbl](https://github.com/smm-h/rlsbl) for release orchestration.
20
+
21
+ - Update CHANGELOG.md with a `## X.Y.Z` entry describing changes
22
+ - Run `rlsbl release [patch|minor|major]` to bump version and create a GitHub Release
23
+ - CI handles publishing automatically via the publish workflow
24
+ - Never publish manually -- always use `rlsbl release`
25
+ - Requires NPM_TOKEN secret on GitHub (Settings > Secrets > Actions)
26
+ - Use `rlsbl release --dry-run` to preview a release without making changes
27
+
28
+ ## Testing
29
+
30
+ ```bash
31
+ uv run pytest
32
+ ```
33
+
34
+ Tests live in `tests/` and cover config loading, directive parsing, the build pipeline, and language-specific extractors (Python, Go).
35
+
36
+ ## Architecture
37
+
38
+ - **selfdoc** (`selfdoc/__init__.py`): selfdoc: Code-aware static site generator with directive-based content extraction.
39
+ - **selfdoc.__main__** (`selfdoc/__main__.py`)
40
+ - **selfdoc.build** (`selfdoc/build.py`): Build pipeline for selfdoc: template scanning, directive resolution, HTML output.
41
+ - **selfdoc.catalog** (`selfdoc/catalog.py`): Directive catalog: defines all built-in directive names and their status.
42
+ - **selfdoc.check** (`selfdoc/check.py`): Check command -- validate directives and report documentation coverage.
43
+ - **selfdoc.cli** (`selfdoc/cli.py`): CLI interface for selfdoc.
44
+ - **selfdoc.config** (`selfdoc/config.py`): Config loader for selfdoc.json.
45
+ - **selfdoc.content** (`selfdoc/content.py`): Content directives -- directives that transform body content into styled HTML.
46
+ - **selfdoc.deploy** (`selfdoc/deploy.py`): Deploy providers for selfdoc documentation sites.
47
+ - **selfdoc.directives** (`selfdoc/directives.py`): Directive parser for selfdoc's structured marker syntax.
48
+ - **selfdoc.docs** (`selfdoc/docs.py`): Shared resolution pipeline for docs/ templates.
49
+ - **selfdoc.extractors** (`selfdoc/extractors/__init__.py`): Language extractor registry and auto-detection.
50
+ - **selfdoc.extractors.base** (`selfdoc/extractors/base.py`): Shared utilities for language extractors.
51
+ - **selfdoc.extractors.go** (`selfdoc/extractors/go.py`): Go source extractor -- resolves directives by extracting from .go files.
52
+ - **selfdoc.extractors.protocol** (`selfdoc/extractors/protocol.py`): Language extractor protocol -- defines the interface all extractors must implement.
53
+ - **selfdoc.extractors.python** (`selfdoc/extractors/python.py`): Python source extractor -- resolves directives by extracting from .py files.
54
+ - **selfdoc.extractors.typescript** (`selfdoc/extractors/typescript.py`): TypeScript/JavaScript source extractor -- resolves directives by extracting from .ts/.js files.
55
+ - **selfdoc.gen** (`selfdoc/gen.py`): Auto-generate documentation pages from project structure.
56
+ - **selfdoc.gendata** (`selfdoc/gendata.py`): Generate data files by running sandboxed scripts via bubblewrap (bwrap).
57
+ - **selfdoc.git** (`selfdoc/git.py`): Auto-commit helper for selfdoc commands.
58
+ - **selfdoc.html** (`selfdoc/html.py`): Convert Markdown files to static HTML with a built-in minimal converter.
59
+ - **selfdoc.icons** (`selfdoc/icons.py`): Language icons for code blocks.
60
+ - **selfdoc.resolver** (`selfdoc/resolver.py`): Resolver factory -- dispatches directives to language-specific extractors.
61
+ - **selfdoc.staleness** (`selfdoc/staleness.py`): Description staleness detection via content hashing.
62
+ - **selfdoc.strictcli_support** (`selfdoc/strictcli_support.py`): First-class support for strictcli-based projects.
63
+ - **selfdoc.themes** (`selfdoc/themes/__init__.py`): Theme registry for selfdoc.
64
+ - **selfdoc.tokenizer** (`selfdoc/tokenizer.py`): Standalone Markdown block tokenizer.
65
+ - **selfdoc.utils** (`selfdoc/utils.py`): Shared utility functions for selfdoc.