documenteer 2.5.0b2__tar.gz → 2.5.0b4__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 (676) hide show
  1. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.agents/skills/project-mechanics/SKILL.md +11 -2
  2. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.claude/skills/project-mechanics/SKILL.md +11 -2
  3. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.devcontainer/Dockerfile +2 -1
  4. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.github/workflows/ci-cron.yaml +41 -13
  5. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.github/workflows/ci.yaml +107 -29
  6. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.gitignore +5 -0
  7. documenteer-2.5.0b4/.python-version +1 -0
  8. documenteer-2.5.0b4/.vale.ini +137 -0
  9. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/CLAUDE.md +7 -4
  10. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/PKG-INFO +4 -3
  11. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260702_000000_DM-52076-technote-lint.md +3 -3
  12. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260706_000000_jonathan_DM_55386_linkcheck_service.md +1 -1
  13. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260722_000000_jonathan_DM_55387_intersphinx_cache.md +1 -1
  14. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260723_000000_jonathan_DM_55600_intersphinx_cache_ttl.md +1 -1
  15. documenteer-2.5.0b4/changelog.d/20260813_000000_jonathan_DM_55690_alias_metadata_fragments.md +3 -0
  16. documenteer-2.5.0b4/changelog.d/20260818_000000_jonathan_DM_55818_linkcheck_messages.md +8 -0
  17. documenteer-2.5.0b4/changelog.d/20260818_000001_jonathan_DM_55818_inventory_report.md +17 -0
  18. documenteer-2.5.0b4/changelog.d/20260819_000000_jonathan_DM_55866_lint_orcid_lookup.md +3 -0
  19. documenteer-2.5.0b4/changelog.d/20260819_000001_jonathan_DM_55866_add_author_orcid.md +7 -0
  20. documenteer-2.5.0b4/changelog.d/20260819_000002_jonathan_DM_55866_sync_authors_orcid.md +7 -0
  21. documenteer-2.5.0b4/changelog.d/20260820_000000_jonathan_DM_55866_affiliation_no_internal_id.md +3 -0
  22. documenteer-2.5.0b4/changelog.d/20260821_000000_jonathan_DM_55471_linkcheck_recheck_unverified.md +3 -0
  23. documenteer-2.5.0b4/changelog.d/20260821_000001_jonathan_DM_55471_linkcheck_contribute.md +3 -0
  24. documenteer-2.5.0b4/changelog.d/20260824_000000_jonathan_DM_55471_linkcheck_service_fallback.md +3 -0
  25. documenteer-2.5.0b4/changelog.d/20260824_000001_jonathan_DM_55889_citations.md +3 -0
  26. documenteer-2.5.0b4/changelog.d/20260824_000002_jonathan_DM_55889_sync_cff.md +5 -0
  27. documenteer-2.5.0b4/changelog.d/20260824_000003_jonathan_DM_55889_citation_cff_reader.md +3 -0
  28. documenteer-2.5.0b4/changelog.d/20260824_000004_jonathan_DM_55889_guide_citations.md +7 -0
  29. documenteer-2.5.0b4/changelog.d/20260824_000005_jonathan_DM_55889_lint_citation_rules.md +3 -0
  30. documenteer-2.5.0b4/changelog.d/20260824_000006_jonathan_DM_55889_guide_head_metadata.md +3 -0
  31. documenteer-2.5.0b4/changelog.d/20260824_000007_jonathan_DM_55889_lint_datacite.md +3 -0
  32. documenteer-2.5.0b4/changelog.d/20260824_000008_jonathan_DM_55889_citation_card.md +5 -0
  33. documenteer-2.5.0b4/changelog.d/20260824_000009_jonathan_DM_55889_footer_citations.md +3 -0
  34. documenteer-2.5.0b4/changelog.d/20260824_000010_jonathan_DM_55889_lint_datacite_authors.md +3 -0
  35. documenteer-2.5.0b4/changelog.d/20260824_000011_jonathan_DM_55889_technote_0_10.md +3 -0
  36. documenteer-2.5.0b4/changelog.d/20260825_000000_jonathan_DM_55889_lint_orcid_conflict.md +3 -0
  37. documenteer-2.5.0b4/changelog.d/20260825_000000_jonathan_DM_55943_bibtex_ascl.md +3 -0
  38. documenteer-2.5.0b4/changelog.d/20260825_000001_jonathan_DM_55943_bibtex_ads.md +3 -0
  39. documenteer-2.5.0b4/changelog.d/20260902_000000_jonathan_DM_55889_citation_pages.md +3 -0
  40. documenteer-2.5.0b4/changelog.d/20260902_000001_jonathan_DM_55889_citation_relations.md +3 -0
  41. documenteer-2.5.0b4/changelog.d/20260902_000002_jonathan_DM_55889_citation_date_precision.md +3 -0
  42. documenteer-2.5.0b4/changelog.d/20260902_000003_jonathan_DM_55889_preferred_citation.md +7 -0
  43. documenteer-2.5.0b4/changelog.d/20260902_000004_jonathan_DM_55889_cff_dates.md +7 -0
  44. documenteer-2.5.0b4/changelog.d/20260902_000005_jonathan_DM_55889_self_excludes_page.md +3 -0
  45. documenteer-2.5.0b4/changelog.d/20260902_000006_jonathan_DM_55889_cff_preferred_url.md +5 -0
  46. documenteer-2.5.0b4/changelog.d/20260902_000007_jonathan_DM_55889_no_self_part_of.md +3 -0
  47. documenteer-2.5.0b4/changelog.d/20260902_000008_jonathan_DM_55889_citation_url_validation.md +3 -0
  48. documenteer-2.5.0b4/changelog.d/20260902_000009_jonathan_DM_55889_citation_bibtex_copy.md +3 -0
  49. documenteer-2.5.0b4/changelog.d/20260902_000010_jonathan_DM_55889_guide_highwire_tags.md +3 -0
  50. documenteer-2.5.0b4/changelog.d/20260902_000011_jonathan_DM_55889_citation_doi_role.md +3 -0
  51. documenteer-2.5.0b4/changelog.d/20260902_000012_jonathan_DM_55889_lint_ignore.md +13 -0
  52. documenteer-2.5.0b4/changelog.d/20260902_000013_jonathan_DM_55889_self_footer_default.md +3 -0
  53. documenteer-2.5.0b4/changelog.d/20260903_000001_jonathan_DM_55889_technote_sidebar_citation.md +9 -0
  54. documenteer-2.5.0b4/changelog.d/20260903_000002_jonathan_DM_55889_technote_article_citation.md +7 -0
  55. documenteer-2.5.0b4/changelog.d/20260904_000000_jonathan_DM_55889_technote_0_11.md +4 -0
  56. documenteer-2.5.0b4/changelog.d/20260904_000001_jonathan_DM_55889_citation_date_warning.md +3 -0
  57. documenteer-2.5.0b4/changelog.d/20260904_000002_jonathan_DM_55889_build_backed_metadata.md +13 -0
  58. documenteer-2.5.0b4/changelog.d/20260909_000000_jonathan_DM_55889_lint_datacite_date.md +3 -0
  59. documenteer-2.5.0b4/changelog.d/20260909_000001_jonathan_DM_55889_citation_page_fragment.md +3 -0
  60. documenteer-2.5.0b4/changelog.d/20260909_000001_jonathan_DM_55889_technote_bibtex_key.md +3 -0
  61. documenteer-2.5.0b4/changelog.d/20260909_000002_jonathan_DM_55889_cff_top_level_type.md +3 -0
  62. documenteer-2.5.0b4/changelog.d/20260909_000003_jonathan_DM_55889_cff_self_preferred.md +3 -0
  63. documenteer-2.5.0b4/changelog.d/20260909_000004_jonathan_DM_55889_toml_error_messages.md +5 -0
  64. documenteer-2.5.0b4/changelog.d/20260909_000005_jonathan_DM_55889_citation_version.md +5 -0
  65. documenteer-2.5.0b4/changelog.d/20260909_000006_jonathan_DM_55889_citation_date_software.md +3 -0
  66. documenteer-2.5.0b4/changelog.d/20260909_000007_jonathan_DM_55889_citation_keys.md +7 -0
  67. documenteer-2.5.0b4/changelog.d/20260909_000008_jonathan_DM_55889_citation_selectors.md +15 -0
  68. documenteer-2.5.0b4/changelog.d/20260909_000009_jonathan_DM_55889_citation_defaults.md +11 -0
  69. documenteer-2.5.0b4/changelog.d/20260909_000010_jonathan_DM_55889_preferred_citation_metadata.md +3 -0
  70. documenteer-2.5.0b4/changelog.d/20260909_000011_jonathan_DM_55889_citation_copy_script_pages.md +3 -0
  71. documenteer-2.5.0b4/changelog.d/20260909_000012_jonathan_DM_55889_migrate_tooling.md +3 -0
  72. documenteer-2.5.0b4/changelog.d/20260909_000013_jonathan_DM_55889_citation_docs_gaps.md +5 -0
  73. documenteer-2.5.0b4/changelog.d/20260911_000000_jonathan_DM_55889_config_error_exit.md +15 -0
  74. documenteer-2.5.0b4/changelog.d/20260911_000000_jonathan_DM_55889_technote_update.md +9 -0
  75. documenteer-2.5.0b4/changelog.d/20260911_000001_jonathan_DM_55889_lint_env_cff_check.md +5 -0
  76. documenteer-2.5.0b4/changelog.d/20260911_000002_jonathan_DM_55889_citation_date_defaults.md +3 -0
  77. documenteer-2.5.0b4/changelog.d/20260912_000000_jonathan_DM_55889_technote_0_12.md +3 -0
  78. documenteer-2.5.0b4/changelog.d/20260912_000001_jonathan_DM_55889_technote_citation_commit_date.md +5 -0
  79. documenteer-2.5.0b4/changelog.d/20260914_000000_jonathan_DM_55889_citation_rebuild.md +3 -0
  80. documenteer-2.5.0b4/changelog.d/20260914_000001_jonathan_DM_55889_citation_page_selector.md +3 -0
  81. documenteer-2.5.0b4/changelog.d/20260914_000002_jonathan_DM_55889_tox_ini_indent.md +5 -0
  82. documenteer-2.5.0b4/changelog.d/20260914_000003_jonathan_DM_55889_sync_cff_fixes.md +5 -0
  83. documenteer-2.5.0b4/changelog.d/20260914_000004_jonathan_DM_55889_card_description.md +3 -0
  84. documenteer-2.5.0b4/changelog.d/20261013_000000_jonathan_DM_56680_test_matrix.md +4 -0
  85. documenteer-2.5.0b4/changelog.d/20261014_000000_jonathan_DM_56680_vale.md +3 -0
  86. documenteer-2.5.0b4/changelog.d/20261014_000001_jonathan_DM_56680_docverse.md +3 -0
  87. documenteer-2.5.0b4/docs/dev/api/documenteer.citations.rst +5 -0
  88. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/dev/api/index.rst +1 -0
  89. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/dev/development.rst +21 -5
  90. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/dev/index.rst +1 -0
  91. documenteer-2.5.0b4/docs/dev/vale.rst +88 -0
  92. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/documenteer.toml +16 -0
  93. documenteer-2.5.0b4/docs/guides/citations.rst +650 -0
  94. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/guides/index.rst +1 -0
  95. documenteer-2.5.0b4/docs/guides/toml-reference.rst +1555 -0
  96. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/sphinx-extensions/autotypes.rst +5 -0
  97. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/sphinx-extensions/githubbibcache.rst +2 -2
  98. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/sphinx-extensions/lsst-pybtex-style.rst +7 -1
  99. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/sphinx-extensions/openapi.rst +1 -1
  100. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/author-metadata.rst +45 -0
  101. documenteer-2.5.0b4/docs/technotes/citation-file.rst +134 -0
  102. documenteer-2.5.0b4/docs/technotes/citations.rst +175 -0
  103. documenteer-2.5.0b4/docs/technotes/configuration.rst +176 -0
  104. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/edit-locally.rst +14 -1
  105. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/edit-on-github.rst +1 -1
  106. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/extensions.rst +2 -2
  107. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/index.rst +3 -1
  108. documenteer-2.5.0b4/docs/technotes/lint/index.rst +310 -0
  109. documenteer-2.5.0b2/docs/technotes/lint/tn002.rst → documenteer-2.5.0b4/docs/technotes/lint/r002.rst +8 -8
  110. documenteer-2.5.0b2/docs/technotes/lint/tn003.rst → documenteer-2.5.0b4/docs/technotes/lint/r003.rst +6 -6
  111. documenteer-2.5.0b2/docs/technotes/lint/tn101.rst → documenteer-2.5.0b4/docs/technotes/lint/r101.rst +20 -12
  112. documenteer-2.5.0b2/docs/technotes/lint/tn102.rst → documenteer-2.5.0b4/docs/technotes/lint/r102.rst +21 -8
  113. documenteer-2.5.0b2/docs/technotes/lint/tn103.rst → documenteer-2.5.0b4/docs/technotes/lint/r103.rst +7 -7
  114. documenteer-2.5.0b4/docs/technotes/lint/tn001.rst +98 -0
  115. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/lint/tn004.rst +4 -4
  116. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/lint/tn005.rst +1 -1
  117. documenteer-2.5.0b4/docs/technotes/lint/tn007.rst +71 -0
  118. documenteer-2.5.0b4/docs/technotes/lint/tn105.rst +214 -0
  119. documenteer-2.5.0b4/docs/technotes/lint/tn106.rst +71 -0
  120. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/lint/tn201.rst +1 -1
  121. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/lint/tn202.rst +4 -2
  122. documenteer-2.5.0b4/docs/technotes/lint/tn203.rst +49 -0
  123. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/lint/tn204.rst +3 -2
  124. documenteer-2.5.0b4/docs/technotes/migrate.rst +11 -0
  125. documenteer-2.5.0b2/docs/technotes/migrate.rst → documenteer-2.5.0b4/docs/technotes/update.rst +125 -35
  126. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/wide-content.rst +1 -1
  127. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/noxfile.py +41 -14
  128. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/package-lock.json +112 -169
  129. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/package.json +7 -7
  130. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/pyproject.toml +24 -4
  131. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/assets/rubin-guide/styles/rubin-pydata-theme.scss +191 -0
  132. documenteer-2.5.0b4/src/assets/rubin-technote/styles/components/_article-citation.scss +39 -0
  133. documenteer-2.5.0b4/src/assets/rubin-technote/styles/components/_article-header.scss +12 -0
  134. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/assets/rubin-technote/styles/components/_index.scss +2 -2
  135. documenteer-2.5.0b4/src/assets/rubin-technote/styles/components/_sidebar-citation.scss +97 -0
  136. documenteer-2.5.0b4/src/documenteer/assets/rubin-citation-copy.js +111 -0
  137. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/assets/rubin-pydata-theme.css +190 -0
  138. documenteer-2.5.0b4/src/documenteer/assets/rubin-pydata-theme.css.map +1 -0
  139. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/assets/rubin-technote.css +131 -52
  140. documenteer-2.5.0b4/src/documenteer/assets/rubin-technote.css.map +1 -0
  141. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/assets/scripts/rubin-pydata-theme.js +5 -9
  142. documenteer-2.5.0b4/src/documenteer/assets/scripts/rubin-pydata-theme.js.map +1 -0
  143. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/assets/scripts/rubin-technote.js +5 -9
  144. documenteer-2.5.0b4/src/documenteer/assets/scripts/rubin-technote.js.map +1 -0
  145. documenteer-2.5.0b4/src/documenteer/citations.py +2022 -0
  146. documenteer-2.5.0b4/src/documenteer/cli.py +760 -0
  147. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/conf/__init__.py +2 -0
  148. documenteer-2.5.0b4/src/documenteer/conf/_configsource.py +88 -0
  149. documenteer-2.5.0b4/src/documenteer/conf/_errors.py +171 -0
  150. documenteer-2.5.0b4/src/documenteer/conf/_technotecitation.py +212 -0
  151. documenteer-2.5.0b4/src/documenteer/conf/_toml.py +2039 -0
  152. documenteer-2.5.0b4/src/documenteer/conf/_tomlerrors.py +339 -0
  153. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/conf/guide.py +68 -2
  154. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/conf/technote.py +61 -1
  155. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/autotypes/xrefs.py +135 -8
  156. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/bibtex.py +110 -17
  157. documenteer-2.5.0b4/src/documenteer/ext/citationcard.py +1007 -0
  158. documenteer-2.5.0b4/src/documenteer/ext/citationdate.py +241 -0
  159. documenteer-2.5.0b4/src/documenteer/ext/citationpage.py +327 -0
  160. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/intersphinxcache.py +273 -14
  161. documenteer-2.5.0b4/src/documenteer/ext/linkcheckservice.py +1054 -0
  162. documenteer-2.5.0b4/src/documenteer/services/intersphinxreport.py +233 -0
  163. documenteer-2.5.0b4/src/documenteer/services/technoteauthor.py +300 -0
  164. documenteer-2.5.0b4/src/documenteer/services/technotecff.py +603 -0
  165. documenteer-2.5.0b4/src/documenteer/services/technotelint.py +1758 -0
  166. documenteer-2.5.0b4/src/documenteer/services/technoteread.py +358 -0
  167. documenteer-2.5.0b4/src/documenteer/services/technoteupdate.py +561 -0
  168. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/storage/authordb.py +88 -0
  169. documenteer-2.5.0b4/src/documenteer/storage/citationcff.py +471 -0
  170. documenteer-2.5.0b4/src/documenteer/storage/datacite.py +458 -0
  171. documenteer-2.5.0b4/src/documenteer/storage/githuboidc.py +156 -0
  172. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/storage/intersphinxcacheclient.py +119 -1
  173. documenteer-2.5.0b4/src/documenteer/storage/linkcheckclient.py +866 -0
  174. documenteer-2.5.0b4/src/documenteer/storage/locallinkchecker.py +211 -0
  175. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/storage/localtemplates/technote/Makefile +4 -0
  176. documenteer-2.5.0b4/src/documenteer/storage/localtemplates/technote/requirements.txt +1 -0
  177. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/storage/localtemplates/technote/tox.ini +8 -3
  178. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/storage/localtemplates.py +24 -2
  179. documenteer-2.5.0b4/src/documenteer/storage/technotetoml.py +240 -0
  180. documenteer-2.5.0b4/src/documenteer/templates/pydata/layout.html +43 -0
  181. documenteer-2.5.0b4/src/documenteer/templates/pydata/rubin-footer.html +146 -0
  182. documenteer-2.5.0b4/src/documenteer/templates/technote/components/sidebar-citation.html +63 -0
  183. documenteer-2.5.0b4/src/documenteer/templates/technote/sections/article-footer.html +38 -0
  184. documenteer-2.5.0b4/src/documenteer/templates/technote/sections/logo.html +15 -0
  185. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer.egg-info/PKG-INFO +4 -3
  186. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer.egg-info/SOURCES.txt +225 -11
  187. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer.egg-info/requires.txt +2 -2
  188. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer.egg-info/scm_file_list.json +225 -11
  189. documenteer-2.5.0b4/src/documenteer.egg-info/scm_version.json +8 -0
  190. documenteer-2.5.0b4/styles/Documenteer/LinkText.yml +14 -0
  191. documenteer-2.5.0b4/styles/Documenteer/We.yml +18 -0
  192. documenteer-2.5.0b4/styles/config/vocabularies/Documenteer/accept.txt +118 -0
  193. documenteer-2.5.0b4/tests/cffschema.py +78 -0
  194. documenteer-2.5.0b4/tests/citation_copy_status_test.py +110 -0
  195. documenteer-2.5.0b4/tests/cli_test.py +840 -0
  196. documenteer-2.5.0b4/tests/config_error_exit_test.py +321 -0
  197. documenteer-2.5.0b4/tests/data/cff/README.md +42 -0
  198. documenteer-2.5.0b4/tests/data/cff/schema-1.2.0.json +1882 -0
  199. documenteer-2.5.0b4/tests/data/citationcff/minimal.cff +12 -0
  200. documenteer-2.5.0b4/tests/data/citationcff/preferred-citation.cff +27 -0
  201. documenteer-2.5.0b4/tests/data/citationcff/software-record.cff +20 -0
  202. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/ext/autotypes_test.py +238 -0
  203. documenteer-2.5.0b4/tests/ext/bibtex_test.py +199 -0
  204. documenteer-2.5.0b4/tests/ext/citationcard_description_test.py +134 -0
  205. documenteer-2.5.0b4/tests/ext/citationcard_test.py +615 -0
  206. documenteer-2.5.0b4/tests/ext/citationdate_test.py +547 -0
  207. documenteer-2.5.0b4/tests/ext/citationdoi_test.py +372 -0
  208. documenteer-2.5.0b4/tests/ext/citationpage_test.py +265 -0
  209. documenteer-2.5.0b4/tests/ext/conftest.py +64 -0
  210. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/ext/guide_build_test.py +41 -0
  211. documenteer-2.5.0b4/tests/ext/guide_citation_card_test.py +83 -0
  212. documenteer-2.5.0b4/tests/ext/guide_citation_copy_script_test.py +170 -0
  213. documenteer-2.5.0b4/tests/ext/guide_citation_date_test.py +103 -0
  214. documenteer-2.5.0b4/tests/ext/guide_citation_rebuild_test.py +228 -0
  215. documenteer-2.5.0b4/tests/ext/guide_footer_citations_test.py +280 -0
  216. documenteer-2.5.0b4/tests/ext/guide_head_citations_test.py +277 -0
  217. documenteer-2.5.0b4/tests/ext/guide_page_citations_test.py +357 -0
  218. documenteer-2.5.0b4/tests/ext/guide_preferred_citation_test.py +191 -0
  219. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/ext/intersphinxcache_test.py +850 -4
  220. documenteer-2.5.0b4/tests/ext/linkcheckservice_test.py +3078 -0
  221. documenteer-2.5.0b4/tests/ext/technote_article_citation_test.py +258 -0
  222. documenteer-2.5.0b4/tests/ext/technote_citation_date_test.py +233 -0
  223. documenteer-2.5.0b4/tests/ext/technote_sidebar_citation_test.py +242 -0
  224. documenteer-2.5.0b4/tests/guide_stylesheet_test.py +107 -0
  225. documenteer-2.5.0b4/tests/roots/test-autotypes-annotated/aliases.rst +17 -0
  226. documenteer-2.5.0b4/tests/roots/test-autotypes-annotated/aliaspkg/__init__.py +13 -0
  227. documenteer-2.5.0b4/tests/roots/test-autotypes-annotated/aliaspkg/_types.py +75 -0
  228. documenteer-2.5.0b4/tests/roots/test-autotypes-annotated/aliaspkg/legacy.py +32 -0
  229. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-annotated/index.rst +7 -0
  230. documenteer-2.5.0b4/tests/roots/test-citationcard/conf.py +115 -0
  231. documenteer-2.5.0b4/tests/roots/test-citationcard/index.rst +21 -0
  232. documenteer-2.5.0b4/tests/roots/test-citationcard/repeated-labels.rst +25 -0
  233. documenteer-2.5.0b4/tests/roots/test-citationcard/role-warnings.rst +12 -0
  234. documenteer-2.5.0b4/tests/roots/test-citationcard/roles-myst.md +9 -0
  235. documenteer-2.5.0b4/tests/roots/test-citationcard/roles.rst +35 -0
  236. documenteer-2.5.0b4/tests/roots/test-citationcard/selectors.rst +41 -0
  237. documenteer-2.5.0b4/tests/roots/test-citationcard/unknown.rst +12 -0
  238. documenteer-2.5.0b4/tests/roots/test-citationcard/url-citation.rst +13 -0
  239. documenteer-2.5.0b4/tests/roots/test-citationcard-opengraph/conf.py +51 -0
  240. documenteer-2.5.0b4/tests/roots/test-citationcard-opengraph/index.rst +12 -0
  241. documenteer-2.5.0b4/tests/roots/test-citationcard-opengraph/prose-first.rst +9 -0
  242. documenteer-2.5.0b4/tests/roots/test-citationdate/conf.py +88 -0
  243. documenteer-2.5.0b4/tests/roots/test-citationdate/index.rst +7 -0
  244. documenteer-2.5.0b4/tests/roots/test-citationpage/conf.py +101 -0
  245. documenteer-2.5.0b4/tests/roots/test-citationpage/index.rst +10 -0
  246. documenteer-2.5.0b4/tests/roots/test-citationpage/products.rst +20 -0
  247. documenteer-2.5.0b4/tests/roots/test-citationpage/unlabelled.rst +10 -0
  248. documenteer-2.5.0b4/tests/roots/test-guide/conf.py +1 -0
  249. documenteer-2.5.0b4/tests/roots/test-guide/documenteer.toml +42 -0
  250. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-guide/index.rst +7 -0
  251. documenteer-2.5.0b4/tests/roots/test-guide-cardonly/api.rst +5 -0
  252. documenteer-2.5.0b4/tests/roots/test-guide-cardonly/documenteer.toml +24 -0
  253. documenteer-2.5.0b4/tests/roots/test-guide-cardonly/index.rst +11 -0
  254. documenteer-2.5.0b4/tests/roots/test-guide-citation-defaults/documenteer.toml +23 -0
  255. documenteer-2.5.0b4/tests/roots/test-guide-citation-defaults/index.rst +6 -0
  256. documenteer-2.5.0b4/tests/roots/test-guide-citation-rebuild/documenteer.toml +31 -0
  257. documenteer-2.5.0b4/tests/roots/test-guide-citation-rebuild/index.rst +9 -0
  258. documenteer-2.5.0b4/tests/roots/test-guide-citationpage/documenteer.toml +91 -0
  259. documenteer-2.5.0b4/tests/roots/test-guide-citationpage/index.rst +11 -0
  260. documenteer-2.5.0b4/tests/roots/test-guide-citationpage/products/object.rst +18 -0
  261. documenteer-2.5.0b4/tests/roots/test-guide-citationpage/products/visit.rst +6 -0
  262. documenteer-2.5.0b4/tests/roots/test-guide-citationpage/unclaimed.rst +4 -0
  263. documenteer-2.5.0b4/tests/roots/test-guide-nocitations/documenteer.toml +7 -0
  264. documenteer-2.5.0b4/tests/roots/test-guide-nocitations/index.rst +6 -0
  265. documenteer-2.5.0b4/tests/roots/test-guide-preferred/conf.py +1 -0
  266. documenteer-2.5.0b4/tests/roots/test-guide-preferred/dataset.rst +5 -0
  267. documenteer-2.5.0b4/tests/roots/test-guide-preferred/documenteer.toml +35 -0
  268. documenteer-2.5.0b4/tests/roots/test-guide-preferred/index.rst +13 -0
  269. documenteer-2.5.0b4/tests/roots/test-guide-undisplayed/conf.py +1 -0
  270. documenteer-2.5.0b4/tests/roots/test-guide-undisplayed/documenteer.toml +19 -0
  271. documenteer-2.5.0b4/tests/roots/test-guide-undisplayed/index.rst +5 -0
  272. documenteer-2.5.0b4/tests/roots/test-intersphinx-cache-empty/conf.py +10 -0
  273. documenteer-2.5.0b4/tests/roots/test-intersphinx-cache-empty/index.rst +4 -0
  274. documenteer-2.5.0b4/tests/roots/test-intersphinx-cache-guide/conf.py +21 -0
  275. documenteer-2.5.0b4/tests/roots/test-intersphinx-cache-guide/documenteer.toml +6 -0
  276. documenteer-2.5.0b4/tests/roots/test-intersphinx-cache-guide/index.rst +6 -0
  277. documenteer-2.5.0b4/tests/roots/test-intersphinx-cache-local/conf.py +22 -0
  278. documenteer-2.5.0b4/tests/roots/test-intersphinx-cache-local/index.rst +5 -0
  279. documenteer-2.5.0b4/tests/roots/test-intersphinx-cache-local/objects.inv +0 -0
  280. documenteer-2.5.0b4/tests/roots/test-intersphinx-cache-technote/conf.py +19 -0
  281. documenteer-2.5.0b4/tests/roots/test-intersphinx-cache-technote/index.rst +6 -0
  282. documenteer-2.5.0b4/tests/roots/test-intersphinx-cache-technote/technote.toml +7 -0
  283. documenteer-2.5.0b4/tests/roots/test-linkcheck-service/conf.py +1 -0
  284. documenteer-2.5.0b4/tests/roots/test-linkcheck-service-bare/conf.py +9 -0
  285. documenteer-2.5.0b4/tests/roots/test-linkcheck-service-bare/index.rst +4 -0
  286. documenteer-2.5.0b4/tests/roots/test-linkcheck-service-filter/conf.py +1 -0
  287. documenteer-2.5.0b4/tests/roots/test-linkcheck-service-multipage/conf.py +1 -0
  288. documenteer-2.5.0b4/tests/roots/test-redoc/conf.py +1 -0
  289. documenteer-2.5.0b4/tests/roots/test-technote-citation/index.rst +13 -0
  290. documenteer-2.5.0b4/tests/roots/test-technote-citation/technote.toml +30 -0
  291. documenteer-2.5.0b4/tests/roots/test-technote-linkcheck-service/conf.py +6 -0
  292. documenteer-2.5.0b4/tests/roots/test-technote-nocitation/conf.py +6 -0
  293. documenteer-2.5.0b4/tests/roots/test-technote-nocitation/index.rst +13 -0
  294. documenteer-2.5.0b4/tests/roots/test-technote-nocitation/technote.toml +19 -0
  295. documenteer-2.5.0b4/tests/roots/test-technote-undated/conf.py +6 -0
  296. documenteer-2.5.0b4/tests/roots/test-technote-undated/index.rst +14 -0
  297. documenteer-2.5.0b4/tests/roots/test-technote-undated/technote.toml +32 -0
  298. documenteer-2.5.0b4/tests/roots/test-technote-unlocated/conf.py +6 -0
  299. documenteer-2.5.0b4/tests/roots/test-technote-unlocated/index.rst +13 -0
  300. documenteer-2.5.0b4/tests/roots/test-technote-unlocated/technote.toml +20 -0
  301. documenteer-2.5.0b4/tests/services/intersphinxreport_test.py +296 -0
  302. documenteer-2.5.0b4/tests/services/technoteauthor_test.py +398 -0
  303. documenteer-2.5.0b4/tests/services/technotecff_test.py +677 -0
  304. documenteer-2.5.0b4/tests/services/technotelint_test.py +2971 -0
  305. documenteer-2.5.0b4/tests/services/technoteread_test.py +369 -0
  306. documenteer-2.5.0b4/tests/services/technoteupdate_test.py +362 -0
  307. documenteer-2.5.0b4/tests/storage/authordb_test.py +353 -0
  308. documenteer-2.5.0b4/tests/storage/citationcff_test.py +615 -0
  309. documenteer-2.5.0b4/tests/storage/datacite_test.py +509 -0
  310. documenteer-2.5.0b4/tests/storage/githuboidc_test.py +149 -0
  311. documenteer-2.5.0b4/tests/storage/intersphinxcacheclient_test.py +475 -0
  312. documenteer-2.5.0b4/tests/storage/linkcheckclient_test.py +836 -0
  313. documenteer-2.5.0b4/tests/storage/locallinkchecker_test.py +134 -0
  314. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/storage/technotetoml_test.py +165 -1
  315. documenteer-2.5.0b4/tests/test_citations.py +2269 -0
  316. documenteer-2.5.0b4/tests/test_conf_configsource.py +75 -0
  317. documenteer-2.5.0b4/tests/test_conf_technotecitation.py +346 -0
  318. documenteer-2.5.0b4/tests/test_conf_toml.py +3162 -0
  319. documenteer-2.5.0b4/tests/test_technote_styles.py +109 -0
  320. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/uv.lock +185 -133
  321. documenteer-2.5.0b2/docs/guides/toml-reference.rst +0 -698
  322. documenteer-2.5.0b2/docs/technotes/configuration.rst +0 -59
  323. documenteer-2.5.0b2/docs/technotes/lint/index.rst +0 -193
  324. documenteer-2.5.0b2/docs/technotes/lint/tn001.rst +0 -65
  325. documenteer-2.5.0b2/docs/technotes/lint/tn203.rst +0 -46
  326. documenteer-2.5.0b2/src/assets/rubin-technote/styles/components/_article-header.scss +0 -22
  327. documenteer-2.5.0b2/src/assets/rubin-technote/styles/components/_global-breadcrumbs.scss +0 -22
  328. documenteer-2.5.0b2/src/assets/rubin-technote/styles/components/_version-info.scss +0 -27
  329. documenteer-2.5.0b2/src/documenteer/assets/rubin-pydata-theme.css.map +0 -1
  330. documenteer-2.5.0b2/src/documenteer/assets/rubin-technote.css.map +0 -1
  331. documenteer-2.5.0b2/src/documenteer/assets/scripts/rubin-pydata-theme.js.map +0 -1
  332. documenteer-2.5.0b2/src/documenteer/assets/scripts/rubin-technote.js.map +0 -1
  333. documenteer-2.5.0b2/src/documenteer/cli.py +0 -268
  334. documenteer-2.5.0b2/src/documenteer/conf/_toml.py +0 -745
  335. documenteer-2.5.0b2/src/documenteer/ext/linkcheckservice.py +0 -516
  336. documenteer-2.5.0b2/src/documenteer/services/technoteauthor.py +0 -41
  337. documenteer-2.5.0b2/src/documenteer/services/technotelint.py +0 -1134
  338. documenteer-2.5.0b2/src/documenteer/services/technotemigration.py +0 -270
  339. documenteer-2.5.0b2/src/documenteer/storage/linkcheckclient.py +0 -413
  340. documenteer-2.5.0b2/src/documenteer/storage/localtemplates/technote/requirements.txt +0 -1
  341. documenteer-2.5.0b2/src/documenteer/storage/technotetoml.py +0 -147
  342. documenteer-2.5.0b2/src/documenteer/templates/pydata/layout.html +0 -15
  343. documenteer-2.5.0b2/src/documenteer/templates/pydata/rubin-footer.html +0 -71
  344. documenteer-2.5.0b2/src/documenteer/templates/technote/sections/header-article.html +0 -41
  345. documenteer-2.5.0b2/src/documenteer/templates/technote/sections/sidebar-primary.html +0 -5
  346. documenteer-2.5.0b2/src/documenteer.egg-info/scm_version.json +0 -8
  347. documenteer-2.5.0b2/tests/cli_test.py +0 -150
  348. documenteer-2.5.0b2/tests/ext/conftest.py +0 -24
  349. documenteer-2.5.0b2/tests/ext/linkcheckservice_test.py +0 -1413
  350. documenteer-2.5.0b2/tests/roots/test-guide/documenteer.toml +0 -4
  351. documenteer-2.5.0b2/tests/services/technotelint_test.py +0 -1205
  352. documenteer-2.5.0b2/tests/services/technotemigration_test.py +0 -104
  353. documenteer-2.5.0b2/tests/storage/authordb_test.py +0 -170
  354. documenteer-2.5.0b2/tests/storage/intersphinxcacheclient_test.py +0 -214
  355. documenteer-2.5.0b2/tests/storage/linkcheckclient_test.py +0 -396
  356. documenteer-2.5.0b2/tests/test_conf_toml.py +0 -360
  357. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.agents/skills/stoker-create-pr/SKILL.md +0 -0
  358. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.agents/skills/stoker-fixup/SKILL.md +0 -0
  359. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.agents/skills/stoker-implement/SKILL.md +0 -0
  360. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.agents/skills/stoker-prd/SKILL.md +0 -0
  361. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.agents/skills/stoker-prd-followup/SKILL.md +0 -0
  362. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.agents/skills/stoker-prd-to-issues/SKILL.md +0 -0
  363. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.agents/skills/stoker-rebase/SKILL.md +0 -0
  364. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.agents/skills/stoker-review/SKILL.md +0 -0
  365. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.agents/skills/stoker-run-workflow/SKILL.md +0 -0
  366. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.agents/skills/stoker-work/SKILL.md +0 -0
  367. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.claude/.gitignore +0 -0
  368. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.claude/skills/stoker-create-pr/SKILL.md +0 -0
  369. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.claude/skills/stoker-fixup/SKILL.md +0 -0
  370. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.claude/skills/stoker-implement/SKILL.md +0 -0
  371. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.claude/skills/stoker-prd/SKILL.md +0 -0
  372. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.claude/skills/stoker-prd-followup/SKILL.md +0 -0
  373. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.claude/skills/stoker-prd-to-issues/SKILL.md +0 -0
  374. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.claude/skills/stoker-rebase/SKILL.md +0 -0
  375. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.claude/skills/stoker-review/SKILL.md +0 -0
  376. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.claude/skills/stoker-run-workflow/SKILL.md +0 -0
  377. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.claude/skills/stoker-work/SKILL.md +0 -0
  378. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.claude/tasks/.gitkeep +0 -0
  379. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.claude/workflows/stoker-iteration.js +0 -0
  380. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.devcontainer/devcontainer.json +0 -0
  381. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.devcontainer/stoker/agent-entry.sh +0 -0
  382. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.devcontainer/stoker/codex-config.toml +0 -0
  383. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.devcontainer/stoker/devcontainer.json +0 -0
  384. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.devcontainer/stoker/features/stoker-sandbox/devcontainer-feature.json +0 -0
  385. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.devcontainer/stoker/features/stoker-sandbox/install.sh +0 -0
  386. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.devcontainer/stoker/firewall-allowlist.txt +0 -0
  387. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.devcontainer/stoker/firewall-refresh.cron +0 -0
  388. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.devcontainer/stoker/init-firewall.sh +0 -0
  389. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.flake8 +0 -0
  390. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.github/CODE_OF_CONDUCT.md +0 -0
  391. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.github/CONTRIBUTING.md +0 -0
  392. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.github/ISSUE_TEMPLATE/prd-task.yml +0 -0
  393. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.github/ISSUE_TEMPLATE/prd.yml +0 -0
  394. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.github/SUPPORT.md +0 -0
  395. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.github/dependabot.yml +0 -0
  396. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.npmrc +0 -0
  397. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.nvmrc +0 -0
  398. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.pre-commit-config.yaml +0 -0
  399. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.prettierignore +0 -0
  400. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.prettierrc.yaml +0 -0
  401. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.stoker/.gitignore +0 -0
  402. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.stoker/prompts/fixup.md +0 -0
  403. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.stoker/prompts/implement.md +0 -0
  404. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.stoker/prompts/rebase.md +0 -0
  405. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.stoker/prompts/review.md +0 -0
  406. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.stoker/prompts/select.md +0 -0
  407. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.stoker/settings.toml +0 -0
  408. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.vscode/settings.json +0 -0
  409. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/.vscode/tasks.json +0 -0
  410. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/CHANGELOG.md +0 -0
  411. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/LICENSE +0 -0
  412. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/MANIFEST.in +0 -0
  413. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/Makefile +0 -0
  414. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/README.md +0 -0
  415. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260629_000000_DM-55292-remote-code-block.md +0 -0
  416. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260629_000001_DM-55292-sphinx-upgrade.md +0 -0
  417. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260629_000002_DM-55292-diagrams.md +0 -0
  418. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260629_000003_DM-55292-diagrams-svg.md +0 -0
  419. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260629_155552_jonathan_DM_55292_upgrade.md +0 -0
  420. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260630_125651_jonathan_DM_55292_frontend.md +0 -0
  421. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260727_000000_jonathan_DM_55634_github_edit_link_path.md +0 -0
  422. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260731_000000_jonathan_autotypes.md +0 -0
  423. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260801_000000_jonathan_git_shallow_suppress.md +0 -0
  424. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260806_000000_jonathan_DM_55745_improve_this_page.md +0 -0
  425. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260806_000001_jonathan_DM_55745_header_nav_wrap.md +0 -0
  426. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260806_000002_jonathan_DM_55745_github_icon.md +0 -0
  427. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260806_000003_jonathan_DM_55745_footer.md +0 -0
  428. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260807_000000_jonathan_DM_55745_drop_rubin_docs_link.md +0 -0
  429. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/20260812_000000_jonathan_DM_55690_sphinx9_gaps.md +0 -0
  430. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/changelog.d/_template.md.jinja +0 -0
  431. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/ipynb-technote/.gitignore +0 -0
  432. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/ipynb-technote/Makefile +0 -0
  433. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/ipynb-technote/conf.py +0 -0
  434. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/ipynb-technote/diagram.py +0 -0
  435. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/ipynb-technote/extra-notebook.ipynb +0 -0
  436. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/ipynb-technote/index.ipynb +0 -0
  437. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/ipynb-technote/subdir/subdir-notebook.ipynb +0 -0
  438. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/ipynb-technote/technote.toml +0 -0
  439. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/md-technote/.gitignore +0 -0
  440. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/md-technote/Makefile +0 -0
  441. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/md-technote/conf.py +0 -0
  442. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/md-technote/diagram.py +0 -0
  443. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/md-technote/index.md +0 -0
  444. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/md-technote/technote.toml +0 -0
  445. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/rst-technote/.gitignore +0 -0
  446. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/rst-technote/Makefile +0 -0
  447. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/rst-technote/conf.py +0 -0
  448. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/rst-technote/diagram.py +0 -0
  449. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/rst-technote/index.rst +0 -0
  450. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/rst-technote/local.bib +0 -0
  451. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/demo/rst-technote/technote.toml +0 -0
  452. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/.gitignore +0 -0
  453. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/Makefile +0 -0
  454. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/_rst_epilog.rst +0 -0
  455. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/changelog.md +0 -0
  456. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/conf.py +0 -0
  457. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/dev/api/documenteer.conf.rst +0 -0
  458. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/dev/api/documenteer.ext.rst +0 -0
  459. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/dev/dependency-policy.rst +0 -0
  460. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/dev/html-templates.rst +0 -0
  461. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/dev/release.rst +0 -0
  462. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/dev/theme-assets.rst +0 -0
  463. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/dev/theme.rst +0 -0
  464. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/guides/badges.rst +0 -0
  465. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/guides/configuration-preset.rst +0 -0
  466. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/guides/configuration.rst +0 -0
  467. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/guides/diagrams.rst +0 -0
  468. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/guides/extend-conf-py.rst +0 -0
  469. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/guides/improve-this-page.rst +0 -0
  470. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/guides/including-notebooks.ipynb +0 -0
  471. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/guides/markdown-primer.md +0 -0
  472. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/guides/openapi.rst +0 -0
  473. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/guides/organization.rst +0 -0
  474. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/guides/overview.rst +0 -0
  475. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/guides/page-redirects.rst +0 -0
  476. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/guides/pyproject-configuration.rst +0 -0
  477. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/guides/rst-epilog.rst +0 -0
  478. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/guides/tabsets.rst +0 -0
  479. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/guides/video-embeds.rst +0 -0
  480. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/index.rst +0 -0
  481. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/sphinx-extensions/docushare-reference.rst +0 -0
  482. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/sphinx-extensions/github-edit-link.rst +0 -0
  483. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/sphinx-extensions/index.rst +0 -0
  484. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/sphinx-extensions/jira-reference.rst +0 -0
  485. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/sphinx-extensions/last-updated.rst +0 -0
  486. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/sphinx-extensions/remote-code-block.rst +0 -0
  487. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/_templates/README.md +0 -0
  488. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/_templates/README.rst +0 -0
  489. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/document-status.rst +0 -0
  490. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/how-your-technote-gets-published.rst +0 -0
  491. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/lint/tn006.rst +0 -0
  492. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/references.rst +0 -0
  493. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/docs/technotes/start-a-technote.rst +0 -0
  494. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/licenses/README.md +0 -0
  495. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/licenses/astropy-helpers.txt +0 -0
  496. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/licenses/sphinx-diagrams.txt +0 -0
  497. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/licenses/sphinx-issue.txt +0 -0
  498. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/licenses/sphinx.txt +0 -0
  499. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/licenses/sphinxcontrib-redoc.txt +0 -0
  500. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/postcss.config.js +0 -0
  501. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/ruff-shared.toml +0 -0
  502. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/setup.cfg +0 -0
  503. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/assets/rubin-technote/styles/SourceSans3VF-Italic.ttf.woff2 +0 -0
  504. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/assets/rubin-technote/styles/SourceSans3VF-Upright.ttf.woff2 +0 -0
  505. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/assets/rubin-technote/styles/_hacks.scss +0 -0
  506. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/assets/rubin-technote/styles/_properties.scss +0 -0
  507. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/assets/rubin-technote/styles/components/_authors.scss +0 -0
  508. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/assets/rubin-technote/styles/components/_sidebar-section.scss +0 -0
  509. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/assets/rubin-technote/styles/rubin-technote.scss +0 -0
  510. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/__init__.py +0 -0
  511. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/_packagemetadata.py +0 -0
  512. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/_requestsutils.py +0 -0
  513. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/_utils.py +0 -0
  514. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/assets/.gitignore +0 -0
  515. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/assets/731c8feefe13e72a8691.woff2 +0 -0
  516. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/assets/b8bc3440ba2145e132f5.woff2 +0 -0
  517. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/assets/favicon.ico +0 -0
  518. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/assets/rsd-assets/rubin-imagotype-color-on-black-crop.svg +0 -0
  519. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/assets/rsd-assets/rubin-imagotype-color-on-white-crop.svg +0 -0
  520. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/assets/rsd-assets/rubin-partners.png +0 -0
  521. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/assets/rubin-favicon-transparent-32px.png +0 -0
  522. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/assets/rubin-favicon.svg +0 -0
  523. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/assets/rubin-footer-align.js +0 -0
  524. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/assets/rubin-last-modified.js +0 -0
  525. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/assets/rubin-titlebar-imagotype-dark.svg +0 -0
  526. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/assets/rubin-titlebar-imagotype-light.svg +0 -0
  527. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/conf/_utils.py +0 -0
  528. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/__init__.py +0 -0
  529. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/autotypes/__init__.py +0 -0
  530. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/autotypes/_shared.py +0 -0
  531. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/autotypes/compat.py +0 -0
  532. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/autotypes/documenters.py +0 -0
  533. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/diagrams.py +0 -0
  534. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/githubbibcache.py +0 -0
  535. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/githubeditlink.py +0 -0
  536. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/jira.py +0 -0
  537. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/lastmodified.py +0 -0
  538. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/lsstdocushare.py +0 -0
  539. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/mockcoderefs.py +0 -0
  540. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/openapi.py +0 -0
  541. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/redoc/__init__.py +0 -0
  542. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/redoc/_redoc.py +0 -0
  543. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/redoc/assets/redoc.html.jinja2 +0 -0
  544. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/remotecodeblock.py +0 -0
  545. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/ext/robots.py +0 -0
  546. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/py.typed +0 -0
  547. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/services/__init__.py +0 -0
  548. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/storage/__init__.py +0 -0
  549. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/storage/latex.py +0 -0
  550. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/storage/localtemplates/technote/README.rst +0 -0
  551. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/storage/localtemplates/technote/ci.yaml +0 -0
  552. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/storage/localtemplates/technote/conf.py +0 -0
  553. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/storage/localtemplates/technote/dependabot.yml +0 -0
  554. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/storage/localtemplates/technote/gitignore +0 -0
  555. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/storage/localtemplates/technote/pre-commit-config.yaml +0 -0
  556. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/templates/pydata/autosummary_core/exception.rst +0 -0
  557. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/templates/pydata/autosummary_core/pydantic_model.rst +0 -0
  558. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/templates/pydata/components/prev-next.html +0 -0
  559. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/templates/pydata/last-updated.html +0 -0
  560. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/templates/pydata/rubin-improve-this-page.html +0 -0
  561. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/templates/pydata/rubin-print-footer.html +0 -0
  562. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/templates/technote/.gitkeep +0 -0
  563. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/templates/technote/components/.gitkeep +0 -0
  564. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/templates/technote/components/sidebar-source.html +0 -0
  565. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/templates/technote/sections/.gitkeep +0 -0
  566. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer/version.py +0 -0
  567. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer.egg-info/dependency_links.txt +0 -0
  568. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer.egg-info/entry_points.txt +0 -0
  569. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/documenteer.egg-info/top_level.txt +0 -0
  570. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/src/sphinx_diagrams/__init__.py +0 -0
  571. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/__init__.py +0 -0
  572. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/conftest.py +0 -0
  573. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/data/afw.doxygen.conf +0 -0
  574. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/data/authordb.yaml +0 -0
  575. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/data/doxygen.tag.zip +0 -0
  576. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/data/package_alpha/doc/_static/package_alpha/README.md +0 -0
  577. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/data/package_alpha/doc/doxygen.conf.in +0 -0
  578. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/data/package_alpha/doc/manifest.yaml +0 -0
  579. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/data/package_alpha/doc/package.alpha/index.rst +0 -0
  580. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/data/package_alpha/doc/package_alpha/index.rst +0 -0
  581. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/data/package_alpha/include/README.md +0 -0
  582. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/data/package_alpha/src/README.md +0 -0
  583. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/data/package_beta/doc/README.md +0 -0
  584. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/ext/__init__.py +0 -0
  585. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/ext/diagrams_test.py +0 -0
  586. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/ext/githubeditlink_test.py +0 -0
  587. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/ext/jira_test.py +0 -0
  588. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/ext/lastmodified_test.py +0 -0
  589. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/ext/lsstdocushare_test.py +0 -0
  590. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/ext/mockcoderefs_test.py +0 -0
  591. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/ext/redoc_test.py +0 -0
  592. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/ext/robots_test.py +0 -0
  593. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/packagemetadata_test.py +0 -0
  594. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autocppapi/conf.py +0 -0
  595. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autocppapi/doxygen.tag.zip +0 -0
  596. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autocppapi/index.rst +0 -0
  597. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes/_templates/autosummary_core/pydantic_model.rst +0 -0
  598. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes/autotypespkg/__init__.py +0 -0
  599. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes/autotypespkg/_impl.py +0 -0
  600. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes/conf.py +0 -0
  601. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes/index.rst +0 -0
  602. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-alias/aliasroot/__init__.py +0 -0
  603. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-alias/aliasroot/documented/__init__.py +0 -0
  604. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-alias/aliasroot/documented/helpers.py +0 -0
  605. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-alias/aliasroot/external/__init__.py +0 -0
  606. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-alias/conf.py +0 -0
  607. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-alias/index.rst +0 -0
  608. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-annotated/annotatedpkg/__init__.py +0 -0
  609. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-annotated/annotatedpkg/constrained.py +0 -0
  610. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-annotated/annotatedpkg/phased.py +0 -0
  611. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-annotated/conf.py +0 -0
  612. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-annotated/extphase/__init__.py +0 -0
  613. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-inherited/conf.py +0 -0
  614. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-inherited/extpkg/__init__.py +0 -0
  615. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-inherited/index.rst +0 -0
  616. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-inherited/inheritpkg/__init__.py +0 -0
  617. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-private/conf.py +0 -0
  618. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-private/index.rst +0 -0
  619. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-private/privatepkg/__init__.py +0 -0
  620. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-private/privatepkg/_impl.py +0 -0
  621. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-private/privatepkg/helpers.py +0 -0
  622. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-pydantic/conf.py +0 -0
  623. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-pydantic/index.rst +0 -0
  624. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-pydantic/pydanticpkg/__init__.py +0 -0
  625. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-typehints/conf.py +0 -0
  626. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-typehints/index.rst +0 -0
  627. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-autotypes-typehints/singletonpkg/__init__.py +0 -0
  628. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-diagrams/conf.py +0 -0
  629. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-diagrams/diagram.py +0 -0
  630. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-diagrams/index.rst +0 -0
  631. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-diagrams-svg/conf.py +0 -0
  632. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-diagrams-svg/diagram.py +0 -0
  633. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-diagrams-svg/index.rst +0 -0
  634. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-guide/hidden.rst +0 -0
  635. {documenteer-2.5.0b2/tests/roots/test-guide → documenteer-2.5.0b4/tests/roots/test-guide-cardonly}/conf.py +0 -0
  636. {documenteer-2.5.0b2/tests/roots/test-linkcheck-service-filter → documenteer-2.5.0b4/tests/roots/test-guide-citation-defaults}/conf.py +0 -0
  637. {documenteer-2.5.0b2/tests/roots/test-linkcheck-service-multipage → documenteer-2.5.0b4/tests/roots/test-guide-citation-rebuild}/conf.py +0 -0
  638. {documenteer-2.5.0b2/tests/roots/test-linkcheck-service → documenteer-2.5.0b4/tests/roots/test-guide-citationpage}/conf.py +0 -0
  639. {documenteer-2.5.0b2/tests/roots/test-redoc → documenteer-2.5.0b4/tests/roots/test-guide-nocitations}/conf.py +0 -0
  640. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-intersphinx-cache/conf.py +0 -0
  641. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-intersphinx-cache/index.rst +0 -0
  642. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-intersphinx-cache-multi/conf.py +0 -0
  643. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-intersphinx-cache-multi/index.rst +0 -0
  644. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-intersphinx-cache-oddkey/conf.py +0 -0
  645. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-intersphinx-cache-oddkey/index.rst +0 -0
  646. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-lastmodified/conf.py +0 -0
  647. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-lastmodified/index.rst +0 -0
  648. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-lastmodified/page2.rst +0 -0
  649. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-lastmodified/snippet.txt +0 -0
  650. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-linkcheck-service/documenteer.toml +0 -0
  651. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-linkcheck-service/index.rst +0 -0
  652. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-linkcheck-service-filter/documenteer.toml +0 -0
  653. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-linkcheck-service-filter/index.rst +0 -0
  654. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-linkcheck-service-multipage/documenteer.toml +0 -0
  655. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-linkcheck-service-multipage/index.rst +0 -0
  656. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-linkcheck-service-multipage/page-a.rst +0 -0
  657. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-linkcheck-service-multipage/page-b.rst +0 -0
  658. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-redoc/_static/openapi.json +0 -0
  659. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-redoc/api.rst +0 -0
  660. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-redoc/documenteer.toml +0 -0
  661. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-redoc/index.rst +0 -0
  662. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-robots-nositemap/conf.py +0 -0
  663. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-robots-nositemap/index.rst +0 -0
  664. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-robots-nositemap/page1.rst +0 -0
  665. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-robots-sitemap/conf.py +0 -0
  666. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-robots-sitemap/index.rst +0 -0
  667. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-robots-sitemap/page1.rst +0 -0
  668. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-robots-sitemap/page2.rst +0 -0
  669. {documenteer-2.5.0b2/tests/roots/test-technote-linkcheck-service → documenteer-2.5.0b4/tests/roots/test-technote-citation}/conf.py +0 -0
  670. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-technote-linkcheck-service/index.rst +0 -0
  671. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/roots/test-technote-linkcheck-service/technote.toml +0 -0
  672. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/services/__init__.py +0 -0
  673. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/storage/__init__.py +0 -0
  674. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/test_conf_utils.py +0 -0
  675. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/tests/test_git_repository.py +0 -0
  676. {documenteer-2.5.0b2 → documenteer-2.5.0b4}/webpack.config.js +0 -0
@@ -12,7 +12,7 @@ of each phase and use the named commands verbatim.
12
12
  Tasks run through nox (via nox-uv). Invoke nox through uv so the runner
13
13
  group is provisioned automatically: `uv run --only-group=nox nox ...`.
14
14
  The `test`, `typing`, and `demo` sessions are parametrized over both
15
- Python (3.12, 3.13) and Sphinx (8, 9, dev), so their session IDs carry
15
+ Python (3.12 through 3.15) and Sphinx (8, 9, dev), so their session IDs carry
16
16
  both factors, e.g. `test-3.13(sphinx='8')`. uv furnishes the requested
17
17
  interpreter on demand. Run `nox -l` to confirm the exact IDs.
18
18
 
@@ -40,6 +40,15 @@ per-invocation combine and upload raw `.coverage.*` data for a central
40
40
  - `lint_touched`: `uv run --only-group=lint prek run --files {files}`
41
41
  - `lint_all`: `uv run --only-group=nox nox -s lint`
42
42
 
43
+ ## Prose (optional)
44
+
45
+ - `vale`: `uv run --only-group=nox nox -s vale -- <docs paths>` runs Vale
46
+ (Google style + house rules) over documentation prose. Advisory only: it
47
+ is **not** part of final validation, never fails, and has no prek hook.
48
+ Use it for feedback when editing pages under `docs/`; add legitimate terms
49
+ to `styles/config/vocabularies/Documenteer/accept.txt`, fix real typos in
50
+ the source.
51
+
43
52
  ## Typing
44
53
 
45
54
  - `typing`: `uv run --only-group=nox nox -s "typing-3.13(sphinx='8')"`
@@ -54,7 +63,7 @@ order, in the foreground, plus `uv run --only-group=nox nox -s
54
63
  and `uv run --only-group=nox nox -s docs` (Documenteer's own Sphinx docs
55
64
  build).
56
65
 
57
- The full Python × Sphinx matrix (3.12/3.13 × Sphinx 8/9), `nox -s
66
+ The full Python × Sphinx matrix (3.12-3.15 × Sphinx 8/9), `nox -s
58
67
  docs-linkcheck` (linkcheck), and `nox -s packaging` (build + twine
59
68
  check) are CI's responsibility, not the in-iteration gate.
60
69
 
@@ -12,7 +12,7 @@ of each phase and use the named commands verbatim.
12
12
  Tasks run through nox (via nox-uv). Invoke nox through uv so the runner
13
13
  group is provisioned automatically: `uv run --only-group=nox nox ...`.
14
14
  The `test`, `typing`, and `demo` sessions are parametrized over both
15
- Python (3.12, 3.13) and Sphinx (8, 9, dev), so their session IDs carry
15
+ Python (3.12 through 3.15) and Sphinx (8, 9, dev), so their session IDs carry
16
16
  both factors, e.g. `test-3.13(sphinx='8')`. uv furnishes the requested
17
17
  interpreter on demand. Run `nox -l` to confirm the exact IDs.
18
18
 
@@ -40,6 +40,15 @@ per-invocation combine and upload raw `.coverage.*` data for a central
40
40
  - `lint_touched`: `uv run --only-group=lint prek run --files {files}`
41
41
  - `lint_all`: `uv run --only-group=nox nox -s lint`
42
42
 
43
+ ## Prose (optional)
44
+
45
+ - `vale`: `uv run --only-group=nox nox -s vale -- <docs paths>` runs Vale
46
+ (Google style + house rules) over documentation prose. Advisory only: it
47
+ is **not** part of final validation, never fails, and has no prek hook.
48
+ Use it for feedback when editing pages under `docs/`; add legitimate terms
49
+ to `styles/config/vocabularies/Documenteer/accept.txt`, fix real typos in
50
+ the source.
51
+
43
52
  ## Typing
44
53
 
45
54
  - `typing`: `uv run --only-group=nox nox -s "typing-3.13(sphinx='8')"`
@@ -54,7 +63,7 @@ order, in the foreground, plus `uv run --only-group=nox nox -s
54
63
  and `uv run --only-group=nox nox -s docs` (Documenteer's own Sphinx docs
55
64
  build).
56
65
 
57
- The full Python × Sphinx matrix (3.12/3.13 × Sphinx 8/9), `nox -s
66
+ The full Python × Sphinx matrix (3.12-3.15 × Sphinx 8/9), `nox -s
58
67
  docs-linkcheck` (linkcheck), and `nox -s packaging` (build + twine
59
68
  check) are CI's responsibility, not the in-iteration gate.
60
69
 
@@ -1,5 +1,6 @@
1
1
  # Project dev container for documenteer.
2
- # A minimal Python 3.13 base plus uv and the system packages the build needs.
2
+ # A minimal Python base (matching .python-version) plus uv and the system
3
+ # packages the build needs.
3
4
  # Kept project-only and COPY-free so a local build and the stoker-derived
4
5
  # sandbox build are identical.
5
6
  FROM mcr.microsoft.com/devcontainers/python:1-3.13-bookworm
@@ -4,9 +4,6 @@
4
4
 
5
5
  name: Periodic CI
6
6
 
7
- env:
8
- PYTHON_VERSION: "3.13"
9
-
10
7
  "on":
11
8
  schedule:
12
9
  - cron: "0 12 * * 1"
@@ -35,12 +32,12 @@ jobs:
35
32
  npm run build
36
33
 
37
34
  - name: Install uv
38
- uses: astral-sh/setup-uv@v9.0.0
35
+ uses: astral-sh/setup-uv@v10.3.0
39
36
 
37
+ # uv reads the canonical Python version from .python-version, so nox and
38
+ # its unparametrized sessions (lint, docs, ...) run on that interpreter.
40
39
  - name: Run nox
41
- run: uv run --only-group=nox nox -P $UV_PYTHON -s lint
42
- env:
43
- UV_PYTHON: ${{ env.PYTHON_VERSION }}
40
+ run: uv run --only-group=nox nox -s lint
44
41
 
45
42
  - name: Report status
46
43
  if: failure()
@@ -61,6 +58,7 @@ jobs:
61
58
  - "3.12"
62
59
  - "3.13"
63
60
  - "3.14"
61
+ - "3.15"
64
62
  sphinx-version:
65
63
  - "8"
66
64
  - "9"
@@ -90,7 +88,13 @@ jobs:
90
88
  uses: ts-graphviz/setup-graphviz@v2
91
89
 
92
90
  - name: Install uv
93
- uses: astral-sh/setup-uv@v9.0.0
91
+ uses: astral-sh/setup-uv@v10.3.0
92
+
93
+ # The canonical development Python (.python-version) identifies the
94
+ # matrix cells that upload the demo builds below.
95
+ - name: Read the canonical Python version
96
+ id: python
97
+ run: echo "version=$(cat .python-version)" >> "$GITHUB_OUTPUT"
94
98
 
95
99
  - name: Run nox
96
100
  run: >
@@ -104,7 +108,7 @@ jobs:
104
108
  # Guarded so partial/missing HTML (sphinx-build runs with --keep-going)
105
109
  # under `if: always()` never hard-fails the job.
106
110
  - name: Stage demo builds for upload
107
- if: always() && matrix.python-version == env.PYTHON_VERSION && (matrix.sphinx-version == '9' || matrix.sphinx-version == 'dev')
111
+ if: always() && matrix.python-version == steps.python.outputs.version && (matrix.sphinx-version == '9' || matrix.sphinx-version == 'dev')
108
112
  run: |
109
113
  for d in rst-technote md-technote ipynb-technote; do
110
114
  if [ -d "demo/$d/_build/html" ]; then
@@ -119,7 +123,7 @@ jobs:
119
123
  # build breaks. NOTE: bump the stable sphinx-version check when the
120
124
  # matrix's current stable Sphinx moves past '9'.
121
125
  - name: Upload demo builds
122
- if: always() && matrix.python-version == env.PYTHON_VERSION && (matrix.sphinx-version == '9' || matrix.sphinx-version == 'dev')
126
+ if: always() && matrix.python-version == steps.python.outputs.version && (matrix.sphinx-version == '9' || matrix.sphinx-version == 'dev')
123
127
  uses: actions/upload-artifact@v7
124
128
  with:
125
129
  name: demo-technotes-sphinx${{ matrix.sphinx-version }}
@@ -165,12 +169,12 @@ jobs:
165
169
  uses: ts-graphviz/setup-graphviz@v2
166
170
 
167
171
  - name: Install uv
168
- uses: astral-sh/setup-uv@v9.0.0
172
+ uses: astral-sh/setup-uv@v10.3.0
169
173
 
170
174
  - name: Run nox
171
- run: uv run --only-group=nox nox -P $UV_PYTHON -s docs docs-linkcheck
175
+ run: uv run --only-group=nox nox -s docs docs-linkcheck
172
176
  env:
173
- UV_PYTHON: ${{ env.PYTHON_VERSION }}
177
+ OOK_TOKEN: ${{ secrets.OOK_TOKEN }}
174
178
 
175
179
  - name: Report status
176
180
  if: failure()
@@ -182,6 +186,30 @@ jobs:
182
186
  env:
183
187
  SLACK_WEBHOOK_URL: ${{ secrets.SLACK_ALERT_WEBHOOK }}
184
188
 
189
+ # Weekly whole-corpus Vale snapshot (advisory prose linting; see
190
+ # docs/dev/vale.rst). The nox session tolerates Vale's "findings" exit
191
+ # code, so this job cannot fail on prose and has no Slack notification;
192
+ # the report is uploaded as an artifact for review.
193
+ vale-report:
194
+ runs-on: ubuntu-latest
195
+
196
+ steps:
197
+ - uses: actions/checkout@v7
198
+
199
+ - name: Install uv
200
+ uses: astral-sh/setup-uv@v10.3.0
201
+
202
+ - name: Run Vale over the documentation
203
+ run: uv run --only-group=nox nox -s vale | tee vale-report.txt
204
+
205
+ - name: Upload Vale report
206
+ uses: actions/upload-artifact@v7
207
+ with:
208
+ name: vale-report
209
+ path: vale-report.txt
210
+ if-no-files-found: warn
211
+ retention-days: 60
212
+
185
213
  pypi:
186
214
  runs-on: ubuntu-latest
187
215
 
@@ -1,8 +1,5 @@
1
1
  name: CI
2
2
 
3
- env:
4
- PYTHON_VERSION: '3.13' # Default Python version
5
-
6
3
  'on':
7
4
  push:
8
5
  branches-ignore:
@@ -41,12 +38,12 @@ jobs:
41
38
  npm run build
42
39
 
43
40
  - name: Install uv
44
- uses: astral-sh/setup-uv@v9.0.0
41
+ uses: astral-sh/setup-uv@v10.3.0
45
42
 
43
+ # uv reads the canonical Python version from .python-version, so nox and
44
+ # its unparametrized sessions (lint, docs, ...) run on that interpreter.
46
45
  - name: Run nox
47
- run: uv run --only-group=nox nox -P $UV_PYTHON -s lint
48
- env:
49
- UV_PYTHON: ${{ env.PYTHON_VERSION }}
46
+ run: uv run --only-group=nox nox -s lint
50
47
 
51
48
  test:
52
49
  runs-on: ubuntu-latest
@@ -57,6 +54,7 @@ jobs:
57
54
  - '3.12'
58
55
  - '3.13'
59
56
  - '3.14'
57
+ - '3.15'
60
58
  sphinx-version:
61
59
  - '8'
62
60
  - '9'
@@ -86,7 +84,13 @@ jobs:
86
84
  uses: ts-graphviz/setup-graphviz@v2
87
85
 
88
86
  - name: Install uv
89
- uses: astral-sh/setup-uv@v9.0.0
87
+ uses: astral-sh/setup-uv@v10.3.0
88
+
89
+ # The canonical development Python (.python-version) identifies the
90
+ # matrix cell that uploads the demo builds below.
91
+ - name: Read the canonical Python version
92
+ id: python
93
+ run: echo "version=$(cat .python-version)" >> "$GITHUB_OUTPUT"
90
94
 
91
95
  - name: Run nox
92
96
  run: >
@@ -112,7 +116,7 @@ jobs:
112
116
  # Guarded so partial/missing HTML (sphinx-build runs with --keep-going)
113
117
  # under `if: always()` never hard-fails the job.
114
118
  - name: Stage demo builds for upload
115
- if: always() && matrix.python-version == env.PYTHON_VERSION && matrix.sphinx-version == '9'
119
+ if: always() && matrix.python-version == steps.python.outputs.version && matrix.sphinx-version == '9'
116
120
  run: |
117
121
  for d in rst-technote md-technote ipynb-technote; do
118
122
  if [ -d "demo/$d/_build/html" ]; then
@@ -122,11 +126,12 @@ jobs:
122
126
  done
123
127
 
124
128
  # Upload the rendered demo technotes for review from the Actions UI.
125
- # Only the canonical cell (3.13 x current stable Sphinx) uploads, to keep
126
- # the artifact list clean. NOTE: bump the sphinx-version check when the
127
- # matrix's current stable Sphinx moves past '9'.
129
+ # Only the canonical cell (the .python-version Python x current stable
130
+ # Sphinx) uploads, to keep the artifact list clean. NOTE: bump the
131
+ # sphinx-version check when the matrix's current stable Sphinx moves
132
+ # past '9'.
128
133
  - name: Upload demo builds
129
- if: always() && matrix.python-version == env.PYTHON_VERSION && matrix.sphinx-version == '9'
134
+ if: always() && matrix.python-version == steps.python.outputs.version && matrix.sphinx-version == '9'
130
135
  uses: actions/upload-artifact@v7
131
136
  with:
132
137
  name: demo-technotes-sphinx${{ matrix.sphinx-version }}
@@ -143,7 +148,7 @@ jobs:
143
148
  - uses: actions/checkout@v7
144
149
 
145
150
  - name: Install uv
146
- uses: astral-sh/setup-uv@v9.0.0
151
+ uses: astral-sh/setup-uv@v10.3.0
147
152
 
148
153
  - name: Download coverage data
149
154
  uses: actions/download-artifact@v8
@@ -170,6 +175,31 @@ jobs:
170
175
  docs:
171
176
  runs-on: ubuntu-latest
172
177
 
178
+ # The link-check builder rechecks URLs Ook reports as bot-blocked from
179
+ # this runner's own vantage point and contributes what it observes back
180
+ # to the service. That contribution is attested by a GitHub Actions OIDC
181
+ # id token, which only exists in a job holding id-token: write. Without
182
+ # it the recheck still informs this build's report and the contribution
183
+ # is skipped with an info note.
184
+ #
185
+ # pull-requests: write lets the Docverse upload step post (and update)
186
+ # a comment on ticket-branch pull requests linking to the edition
187
+ # preview. Without it the action skips the comment with a warning.
188
+ permissions:
189
+ contents: read
190
+ id-token: write
191
+ pull-requests: write
192
+
193
+ # Link checking goes through the Ook link-check service, which needs
194
+ # OOK_TOKEN. Dependabot and fork pull requests don't receive repository
195
+ # secrets, and the extension's built-in fallback checker is too flaky
196
+ # from a runner against the archival hosts this guide cites (zenodo.org,
197
+ # datacite.org, ctan.org all timed out on dependabot docs jobs), so those
198
+ # runs build the docs but skip the link check. Links are still checked on
199
+ # every push to main and every ticket-branch pull request.
200
+ env:
201
+ HAS_OOK_TOKEN: ${{ secrets.OOK_TOKEN != '' }}
202
+
173
203
  steps:
174
204
  - uses: actions/checkout@v7
175
205
  with:
@@ -195,19 +225,22 @@ jobs:
195
225
  npm run build
196
226
 
197
227
  - name: Install uv
198
- uses: astral-sh/setup-uv@v9.0.0
228
+ uses: astral-sh/setup-uv@v10.3.0
199
229
 
200
- - name: Run nox
201
- run: uv run --only-group=nox nox -P $UV_PYTHON -s docs docs-linkcheck
230
+ - name: Build docs
231
+ run: uv run --only-group=nox nox -s docs
232
+
233
+ - name: Check links
234
+ if: env.HAS_OOK_TOKEN == 'true'
235
+ run: uv run --only-group=nox nox -s docs-linkcheck
202
236
  env:
203
- UV_PYTHON: ${{ env.PYTHON_VERSION }}
204
237
  OOK_TOKEN: ${{ secrets.OOK_TOKEN }}
205
238
 
206
239
  # Upload the machine-readable link-check results for review from the
207
240
  # Actions UI. Runs even when docs-linkcheck fails (broken links) so the
208
241
  # JSON is available for triage; may be absent if the service degraded.
209
242
  - name: Upload link-check results
210
- if: always()
243
+ if: always() && env.HAS_OOK_TOKEN == 'true'
211
244
  uses: actions/upload-artifact@v7
212
245
  with:
213
246
  name: linkcheck-results
@@ -215,20 +248,65 @@ jobs:
215
248
  if-no-files-found: warn
216
249
  retention-days: 7
217
250
 
218
- # Only attempt documentation uploads for tagged releases and pull
219
- # requests from ticket branches in the same repository. This avoids
220
- # version clutter in the docs and failures when a PR doesn't have access
221
- # to secrets.
222
- - name: Upload to LSST the Docs
223
- uses: lsst-sqre/ltd-upload@v1
251
+ # Only publish for tagged releases and pull requests from ticket branches
252
+ # in the same repository. This avoids edition clutter and failures when a
253
+ # PR (fork, dependabot) doesn't have access to the DOCVERSE_TOKEN secret.
254
+ - name: Upload to Docverse
255
+ # Pinned to the pre-release head of lsst-sqre/docverse-upload; switch
256
+ # to a version tag once the action has an official release.
257
+ uses: lsst-sqre/docverse-upload@05c6698b00482673da2d1bcd93b367ebe74a98d0
224
258
  with:
225
- project: 'documenteer'
226
- dir: 'docs/_build/html'
227
- username: ${{ secrets.LTD_USERNAME }}
228
- password: ${{ secrets.LTD_PASSWORD }}
259
+ org: rubin
260
+ project: documenteer
261
+ dir: docs/_build/html
262
+ token: ${{ secrets.DOCVERSE_TOKEN }}
263
+ github-token: ${{ github.token }}
264
+ comment-on-pr: 'true'
229
265
  if: >
230
266
  github.event_name != 'pull_request' || startsWith(github.head_ref, 'tickets/')
231
267
 
268
+ # Advisory prose linting with Vale (https://vale.sh). This job is
269
+ # deliberately non-blocking and is this repo's only use of
270
+ # continue-on-error: vale-action runs reviewdog with fail_on_error: false
271
+ # and filter_mode: added, so findings surface as inline annotations on
272
+ # changed lines only and the job stays green even when Vale reports
273
+ # issues. It is intentionally absent from pypi-publish's needs. See
274
+ # docs/dev/vale.rst.
275
+ vale:
276
+ runs-on: ubuntu-latest
277
+ # Annotations are only meaningful on pull requests (reviewdog needs a diff).
278
+ if: github.event_name == 'pull_request'
279
+
280
+ steps:
281
+ - uses: actions/checkout@v7
282
+
283
+ - uses: actions/setup-python@v7
284
+ with:
285
+ python-version-file: '.python-version'
286
+
287
+ # Vale shells out to rst2html (docutils) to parse reStructuredText.
288
+ - name: Install docutils
289
+ run: pip install docutils
290
+
291
+ - name: Run Vale
292
+ uses: errata-ai/vale-action@v3
293
+ # Vale is advisory: annotations should appear on the PR, but the
294
+ # check must stay green. fail_on_error: false covers Vale's own
295
+ # findings (and, since v3, GitHub's per-step annotation cap), but
296
+ # the step can still exit nonzero on a runtime error (download,
297
+ # sync, reviewdog), so tolerate any step failure outright.
298
+ continue-on-error: true
299
+ with:
300
+ # Match the Vale release pinned by the `vale` dependency group in
301
+ # uv.lock so local `nox -s vale` runs and CI agree.
302
+ version: 3.22.0
303
+ # vale-action runs `vale sync` to download the Google package.
304
+ # The default reporter (github-pr-annotations) works with the
305
+ # read-only GITHUB_TOKEN on forked PRs, unlike github-pr-check.
306
+ fail_on_error: false
307
+ filter_mode: added
308
+ files: docs
309
+
232
310
  test-package:
233
311
  name: Test PyPI package build
234
312
  runs-on: ubuntu-latest
@@ -68,3 +68,8 @@ target/
68
68
  venv
69
69
 
70
70
  .playwright-mcp
71
+
72
+ # Vale external style packages synced by `vale sync` (see .vale.ini).
73
+ # The Documenteer style (styles/Documenteer) and vocabulary (styles/config)
74
+ # are committed; the downloaded Google package is not.
75
+ /styles/Google/
@@ -0,0 +1 @@
1
+ 3.13
@@ -0,0 +1,137 @@
1
+ # Vale configuration for Documenteer's documentation.
2
+ #
3
+ # Vale (https://vale.sh) provides advisory editorial linting of the prose in
4
+ # docs/. Findings are informational: they never fail CI, and the nox session
5
+ # is not part of the default sessions or the prek hooks. See docs/dev/vale.rst
6
+ # for how to run and tune Vale.
7
+ #
8
+ # The Google package (styles/Google) is synced by `vale sync` and is
9
+ # gitignored; the Documenteer style (styles/Documenteer) and vocabulary
10
+ # (styles/config/vocabularies/Documenteer) are committed.
11
+
12
+ StylesPath = styles
13
+
14
+ # External style packages downloaded by `vale sync`.
15
+ Packages = Google
16
+
17
+ # Project vocabulary (styles/config/vocabularies/Documenteer/accept.txt).
18
+ Vocab = Documenteer
19
+
20
+ # Accept RST prose natively. Vale shells out to rst2html (docutils), which the
21
+ # `vale` dependency group and the CI job install alongside Vale.
22
+ [*.{rst,md}]
23
+ BasedOnStyles = Vale, Google, Documenteer
24
+
25
+ # --- Tuning (see docs/dev/vale.rst) -----------------------------------------
26
+ # Google rules demoted or disabled because they produce a high volume of
27
+ # low-value flags on this corpus. Each carries a one-line rationale.
28
+
29
+ # Sentence-length heuristic fires constantly on legitimate technical prose.
30
+ Google.Sentences = NO
31
+
32
+ # Passive-voice detection is noisy and often wrong on procedural docs.
33
+ Google.Passive = NO
34
+
35
+ # Heading capitalization: this repo uses sentence case (checked by review),
36
+ # but Google.Headings mis-parses RST directive titles and product names.
37
+ Google.Headings = NO
38
+
39
+ # "Will"/future tense is idiomatic in migration and release prose.
40
+ Google.Will = suggestion
41
+
42
+ # Ordinal/spelled-number and units rules flag many correct technical usages.
43
+ Google.Units = suggestion
44
+ Google.Ordinal = suggestion
45
+
46
+ # House style permits contractions, and this rule agrees (it suggests
47
+ # "don't" over "do not"), so keep it as a low-key suggestion.
48
+ Google.Contractions = suggestion
49
+
50
+ # Documenteer.We replaces Google.We (same "we" rule, with our wording/link).
51
+ Google.We = NO
52
+
53
+ # "RST", "TOML", "API", "DOI" etc. appear on nearly every page; spelling them
54
+ # out on each mention is not this project's convention.
55
+ Google.Acronyms = NO
56
+
57
+ # Parenthetical asides are common and acceptable in this reference prose.
58
+ Google.Parens = NO
59
+
60
+ # Google.Latin flags "e.g."/"i.e.", which house style permits. Disable.
61
+ Google.Latin = NO
62
+
63
+ # Vale.Terms enforces case consistency across the whole corpus and fires (at
64
+ # error level) on tokens that are correct in context: "sphinx" inside package
65
+ # and module names versus "Sphinx" the project. Too noisy to be useful here.
66
+ Vale.Terms = NO
67
+
68
+ # Em-dash spacing preference; house style is relaxed about this.
69
+ Google.EmDash = NO
70
+
71
+ # Exclamation is covered adequately; keep as a suggestion.
72
+ Google.Exclamation = suggestion
73
+
74
+ # Google's word list prefers "preceding" over "above" and "app" over
75
+ # "application", which misfire on "the example above" and on the Sphinx
76
+ # application object (the two together were most of the warnings on this
77
+ # corpus). Keep the list visible, but as suggestions.
78
+ Google.WordList = suggestion
79
+ Google.WordListCase = suggestion
80
+
81
+ # "Lowercase the first word after a colon" fires mostly on proper nouns here
82
+ # (Sphinx, Rubin, Documenteer, Zenodo).
83
+ Google.Colons = suggestion
84
+
85
+ # --- Path exclusions --------------------------------------------------------
86
+ # These paths are excluded from linting. Vale merges glob sections, so an
87
+ # excluded section must both clear BasedOnStyles *and* silence every rule that
88
+ # was individually demoted above (Vale keeps a per-rule key set in a broader
89
+ # section unless a narrower section overrides it).
90
+
91
+ # Symlink to the scriv-generated CHANGELOG.md; edit changelog.d/ fragments.
92
+ [docs/changelog.md]
93
+ BasedOnStyles =
94
+ Google.Will = NO
95
+ Google.Units = NO
96
+ Google.Ordinal = NO
97
+ Google.Exclamation = NO
98
+ Google.Contractions = NO
99
+ Google.WordList = NO
100
+ Google.WordListCase = NO
101
+ Google.Colons = NO
102
+
103
+ # Shared link targets only; no prose.
104
+ [docs/_rst_epilog.rst]
105
+ BasedOnStyles =
106
+ Google.Will = NO
107
+ Google.Units = NO
108
+ Google.Ordinal = NO
109
+ Google.Exclamation = NO
110
+ Google.Contractions = NO
111
+ Google.WordList = NO
112
+ Google.WordListCase = NO
113
+ Google.Colons = NO
114
+
115
+ # Generated automodapi API stubs.
116
+ [docs/dev/api/contents/**]
117
+ BasedOnStyles =
118
+ Google.Will = NO
119
+ Google.Units = NO
120
+ Google.Ordinal = NO
121
+ Google.Exclamation = NO
122
+ Google.Contractions = NO
123
+ Google.WordList = NO
124
+ Google.WordListCase = NO
125
+ Google.Colons = NO
126
+
127
+ # Technote templates, excluded from the Sphinx build as well.
128
+ [docs/technotes/_templates/**]
129
+ BasedOnStyles =
130
+ Google.Will = NO
131
+ Google.Units = NO
132
+ Google.Ordinal = NO
133
+ Google.Exclamation = NO
134
+ Google.Contractions = NO
135
+ Google.WordList = NO
136
+ Google.WordListCase = NO
137
+ Google.Colons = NO
@@ -16,11 +16,11 @@ make init # Initialize development environment
16
16
  uv sync --extra technote --extra guide --group dev --group nox --group lint # Install with all extras
17
17
  ```
18
18
 
19
- Tasks are run with [nox](https://nox.thea.codes/) (via [nox-uv](https://github.com/cthoyt/nox-uv)). Invoke nox through uv so the runner is provisioned automatically: `uv run --only-group=nox nox -s <session>`. The `test`, `typing`, and `demo` sessions are parametrized over both Python (3.12, 3.13) and Sphinx (8, 9, dev), so their session IDs carry both factors, e.g. `nox -s "test-3.13(sphinx='8')"`. uv furnishes the requested interpreter on demand. Bare `nox` runs a lean default set (3.13 × Sphinx 8/9); run `nox -l` to see the exact IDs.
19
+ Tasks are run with [nox](https://nox.thea.codes/) (via [nox-uv](https://github.com/cthoyt/nox-uv)). Invoke nox through uv so the runner is provisioned automatically: `uv run --only-group=nox nox -s <session>`. The `test`, `typing`, and `demo` sessions are parametrized over both Python (3.12 through 3.15) and Sphinx (8, 9, dev), so their session IDs carry both factors, e.g. `nox -s "test-3.13(sphinx='8')"`. uv furnishes the requested interpreter on demand. The canonical development Python is declared in `.python-version` (currently 3.13); uv, nox's default sessions, and the GitHub Actions workflows all read it from there. Bare `nox` runs a lean default set (the canonical Python × Sphinx 8/9); run `nox -l` to see the exact IDs.
20
20
 
21
21
  ### Testing and Quality Assurance
22
22
  ```bash
23
- nox -s "test-3.13(sphinx='8')" # Run tests on Python 3.13 with Sphinx 8.x (sphinx also '9'/'dev'; python also '3.12')
23
+ nox -s "test-3.13(sphinx='8')" # Run tests on Python 3.13 with Sphinx 8.x (sphinx also '9'/'dev'; python also '3.12', '3.14', '3.15')
24
24
  nox -s test # Run the full Python × Sphinx grid
25
25
  nox -s coverage-report # Generate coverage report
26
26
  nox -s "typing-3.13(sphinx='8')" # Run mypy type checking
@@ -35,8 +35,11 @@ Coverage is opt-in via `DOCUMENTEER_COVERAGE=1`, which runs the test suite under
35
35
  ```bash
36
36
  nox -s docs # Build documentation
37
37
  nox -s docs-linkcheck # Check documentation links
38
+ nox -s vale # Advisory prose lint (Vale + Google style); `-- path.rst` for one file
38
39
  ```
39
40
 
41
+ Vale is advisory only: it never fails CI, is not in the default nox sessions, and has no prek hook. Legitimate terms it flags go in `styles/config/vocabularies/Documenteer/accept.txt`; genuine typos get fixed in the source. See `docs/dev/vale.rst`.
42
+
40
43
  ### Cleanup
41
44
  ```bash
42
45
  make clean # Remove build artifacts
@@ -67,11 +70,11 @@ make clean # Remove build artifacts
67
70
  - `technote add-author`: Add authors to technote.toml from authordb
68
71
  - `technote sync-authors`: Sync author info from central database
69
72
  - `technote migrate`: Migrate legacy technotes to modern format
70
- - `technote lint`: Lint a technote's metadata, structure, and content (stable TN0xx/TN1xx/TN2xx rule codes, each with a landing page under docs/technotes/lint/)
73
+ - `technote lint`: Lint a technote's metadata, structure, and content. Rule codes are stable and carry their rule set's prefix: `TN` rules (TN0xx/TN1xx/TN2xx) check what any technote needs, and `R` rules (R0xx/R1xx) check Rubin's conventions and services. Each code has a landing page under docs/technotes/lint/
71
74
 
72
75
  **Services** (`src/documenteer/services/`):
73
76
  - `technoteauthor.py`: Author management for technotes
74
- - `technotemigration.py`: Legacy technote migration logic
77
+ - `technoteupdate.py`: Technote update and legacy-migration logic
75
78
 
76
79
  ### Key Design Patterns
77
80
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: documenteer
3
- Version: 2.5.0b2
3
+ Version: 2.5.0b4
4
4
  Summary: Rubin Observatory / LSST Sphinx documentation tools, extensions, and configurations.
5
5
  License-Expression: MIT
6
6
  Project-URL: Homepage, https://documenteer.lsst.io
@@ -17,6 +17,7 @@ Classifier: Programming Language :: Python :: 3
17
17
  Classifier: Programming Language :: Python :: 3.12
18
18
  Classifier: Programming Language :: Python :: 3.13
19
19
  Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Programming Language :: Python :: 3.15
20
21
  Classifier: Topic :: Documentation
21
22
  Classifier: Topic :: Documentation :: Sphinx
22
23
  Classifier: Typing :: Typed
@@ -45,7 +46,7 @@ Requires-Dist: packaging
45
46
  Provides-Extra: guide
46
47
  Requires-Dist: autodoc_pydantic; extra == "guide"
47
48
  Requires-Dist: sphinx_design>=0.7.0; extra == "guide"
48
- Requires-Dist: pydata-sphinx-theme<0.21,>=0.19; extra == "guide"
49
+ Requires-Dist: pydata-sphinx-theme<0.24,>=0.19; extra == "guide"
49
50
  Requires-Dist: sphinx-autodoc-typehints; extra == "guide"
50
51
  Requires-Dist: sphinx-automodapi; extra == "guide"
51
52
  Requires-Dist: sphinx-copybutton; extra == "guide"
@@ -62,7 +63,7 @@ Requires-Dist: sphinxcontrib-youtube; extra == "guide"
62
63
  Requires-Dist: sphinx-favicon; extra == "guide"
63
64
  Requires-Dist: sphinx-sitemap; extra == "guide"
64
65
  Provides-Extra: technote
65
- Requires-Dist: technote<0.10.0,>=0.9.1; extra == "technote"
66
+ Requires-Dist: technote<0.13.0,>=0.12.0; extra == "technote"
66
67
  Requires-Dist: sphinx-prompt; extra == "technote"
67
68
  Requires-Dist: sphinxcontrib-mermaid>=1; extra == "technote"
68
69
  Requires-Dist: diagrams>=0.24; extra == "technote"
@@ -1,9 +1,9 @@
1
1
  ### New features
2
2
 
3
- - Added a `documenteer technote lint` command that checks a technote's metadata, structure, and content before a build. Each finding carries a stable rule code so a bad technote is reported as a triageable finding rather than a traceback, and `--strict/-s` promotes warnings to errors so CI can fail on them. Every rule has a landing page under [documenteer.lsst.io/technotes/lint](https://documenteer.lsst.io/technotes/lint/index.html) describing the rule, showing a failing technote, and walking through the fix; the report links to the page for each rule it fires. The rules:
3
+ - Added a `documenteer technote lint` command that checks a technote's metadata, structure, and content before a build. Each finding carries a stable rule code so a bad technote is reported as a triageable finding rather than a traceback, and `--strict/-s` promotes warnings to errors so CI can fail on them. Every rule has a landing page under [documenteer.lsst.io/technotes/lint](https://documenteer.lsst.io/technotes/lint/index.html) describing the rule, showing a failing technote, and walking through the fix; the report links to the page for each rule it fires. A code's prefix names the rule set it belongs to: `TN` rules check what any technote needs, and `R` rules check Rubin's conventions and services (its author database, its technote packaging). The rules:
4
4
 
5
- - Structure: `technote.toml` exists (`TN004`), is valid TOML (`TN005`), and conforms to the technote schema (`TN001`); a Sphinx technote has an `index.{rst,md,ipynb}` content file (`TN006`); and `requirements.txt` declares `documenteer[technote]` (`TN002`) without pinning Sphinx separately (`TN003`).
6
- - Authors: every author declares a resolvable `internal_id` in the Rubin author database — flagging authors missing an ID (`TN101`), IDs absent from or malformed in the database (`TN102`, an error), and an unreachable database (`TN103`, a transport-only warning). A missing or unknown ID is not a dead end: the finding names the ID the author probably wants — `Did you mean 'alsayyady' (matched by ORCID)?` — by searching the author database for their name and accepting only a confident match (a matching ORCID, or a single near-exact name match); an ambiguous search or failed lookup silently leaves the plain message.
5
+ - Structure: `technote.toml` exists (`TN004`), is valid TOML (`TN005`), and conforms to the technote schema (`TN001`); a Sphinx technote has an `index.{rst,md,ipynb}` content file (`TN006`); and `requirements.txt` declares `documenteer[technote]` (`R002`) without pinning Sphinx separately (`R003`).
6
+ - Authors: every author declares a resolvable `internal_id` in the Rubin author database — flagging authors missing an ID (`R101`), IDs absent from or malformed in the database (`R102`, an error), and an unreachable database (`R103`, a transport-only warning). A missing or unknown ID is not a dead end: the finding names the ID the author probably wants — `Did you mean 'alsayyady' (matched by ORCID)?` — by searching the author database for their name and accepting only a confident match (a matching ORCID, or a single near-exact name match); an ambiguous search or failed lookup silently leaves the plain message.
7
7
  - Content: the technote declares its abstract with the abstract directive (`TN201`) rather than an ordinary section heading (`TN202`), the content file can be parsed (`TN203`, for example a corrupt notebook), and the abstract directive has a body (`TN204`). `TN204` and `TN202` findings locate the problem as `file:line`; the common `TN204` cause is abstract text left unindented under `.. abstract::`, which reStructuredText reads as an empty directive, publishing an empty abstract and `og:description` while the source looks fine. The abstract scan matches directive names in any letter case (docutils lowercases them), accepts an abstract written on the `.. abstract::` marker line itself, and resolves `.. include::` and `` ```{include} `` directives one level deep so an abstract factored into another file is still found.
8
8
 
9
9
  An unparseable `technote.toml` no longer hides the rest of the report: only the author checks, which need the parsed metadata, are skipped. When a `TN001` schema failure comes from a historical author-name form — `name = { name = "Full Name" }` (removed in technote 0.5) or `name = { given_names = "...", family_names = "..." }` (renamed in 2023) — the finding names the legacy form, shows the modern `name = { given = "...", family = "..." }` replacement, and points at `documenteer technote migrate`. Technote-series repositories that are not Sphinx projects — no index content file and no `conf.py`, built through the shared technote CI with a custom build command — are linted for their `technote.toml` alone, so a healthy non-Sphinx technote passes.
@@ -1,4 +1,4 @@
1
1
  ### New features
2
2
 
3
- - The user-guide configuration now checks external links with Ook's link-check service. The new `documenteer.ext.linkcheckservice` extension registers a builder over Sphinx's `linkcheck` name, so existing `make linkcheck` invocations transparently submit the project's external links to the service and report its cached, retry-buffered results, writing a machine-readable `linkcheck.json` artifact to the build output. Submissions authenticate with a bearer token from `OOK_TOKEN`; `broken` links fail the build, while `redirected`, `failing`, `unsupported`, and `blocked` links are reported at info level so a `-W` build doesn't fail on them (matching Sphinx's built-in linkcheck). New `[sphinx.linkcheck]` settings in `documenteer.toml` configure the integration (`use_service`, `service_url`, `poll_budget`, `strict`, `origin_base_url`). When `OOK_TOKEN` is missing or rejected the builder falls back to Sphinx's built-in in-process `linkcheck`; when the service is unreachable or the poll budget is exhausted it warns and exits 0 by default, or fails the build if `strict = true`. Set `use_service = false` to always use the built-in builder.
3
+ - The user-guide configuration now checks external links with Ook's link-check service. The new `documenteer.ext.linkcheckservice` extension registers a builder over Sphinx's `linkcheck` name, so existing `make linkcheck` invocations transparently submit the project's external links to the service and report its cached, retry-buffered results, writing a machine-readable `linkcheck.json` artifact to the build output. Submissions authenticate with a bearer token from `OOK_TOKEN`; `broken` links fail the build, while `redirected`, `failing`, `unsupported`, and `blocked` links are reported at info level so a `-W` build doesn't fail on them (matching Sphinx's built-in linkcheck). New `[sphinx.linkcheck]` settings in `documenteer.toml` configure the integration (`use_service`, `service_url`, `poll_budget`, `strict`, `origin_base_url`). When `OOK_TOKEN` is missing or rejected the builder falls back to Sphinx's built-in in-process `linkcheck`; when the service is unreachable or the poll budget is exhausted it falls back the same way by default, or fails the build if `strict = true`. Set `use_service = false` to always use the built-in builder.
4
4
  - The technote configuration also checks external links with the service, deriving the origin base URL from the technote's canonical URL in `technote.toml` (falling back to `https://<handle>.lsst.io`). Every setting is overridable in the technote's `conf.py` after the preset import (for example `documenteer_linkcheck_use_service = False`), and the technote `tox.ini` template now passes `OOK_TOKEN` through, so a technote whose CI sets the token opts in and one without a token falls back to the built-in `linkcheck`.