docsentinel 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (878) hide show
  1. docsentinel-1.0.0/.claude/agents/agent-orchestrator.md +45 -0
  2. docsentinel-1.0.0/.claude/agents/app-architect.md +62 -0
  3. docsentinel-1.0.0/.claude/agents/background-reviewer.md +39 -0
  4. docsentinel-1.0.0/.claude/agents/docs-reviewer.md +61 -0
  5. docsentinel-1.0.0/.claude/agents/docs-updater.md +64 -0
  6. docsentinel-1.0.0/.claude/agents/docs-writer.md +132 -0
  7. docsentinel-1.0.0/.claude/agents/feature-reviewer.md +66 -0
  8. docsentinel-1.0.0/.claude/agents/incident-analyst.md +66 -0
  9. docsentinel-1.0.0/.claude/agents/python-expert.md +150 -0
  10. docsentinel-1.0.0/.claude/agents/security-auditor.md +45 -0
  11. docsentinel-1.0.0/.claude/agents/task-verifier.md +110 -0
  12. docsentinel-1.0.0/.claude/agents/test-documenter.md +100 -0
  13. docsentinel-1.0.0/.claude/agents/testing-expert.md +105 -0
  14. docsentinel-1.0.0/.claude/hooks/_common.py +190 -0
  15. docsentinel-1.0.0/.claude/hooks/dep_audit.py +51 -0
  16. docsentinel-1.0.0/.claude/hooks/doc_link_check.py +99 -0
  17. docsentinel-1.0.0/.claude/hooks/github_audit.py +36 -0
  18. docsentinel-1.0.0/.claude/hooks/guard_bash.py +63 -0
  19. docsentinel-1.0.0/.claude/hooks/post_edit_format.py +57 -0
  20. docsentinel-1.0.0/.claude/hooks/run_tests.py +77 -0
  21. docsentinel-1.0.0/.claude/hooks/secret_scan.py +171 -0
  22. docsentinel-1.0.0/.claude/hooks/session_start.py +84 -0
  23. docsentinel-1.0.0/.claude/hooks/style_fixes.py +213 -0
  24. docsentinel-1.0.0/.claude/loops/deep-review.md +63 -0
  25. docsentinel-1.0.0/.claude/loops/implement-milestone.md +366 -0
  26. docsentinel-1.0.0/.claude/loops/implement-story.md +314 -0
  27. docsentinel-1.0.0/.claude/loops/update-docs.md +381 -0
  28. docsentinel-1.0.0/.claude/scheduled_tasks.lock +1 -0
  29. docsentinel-1.0.0/.claude/settings.json +102 -0
  30. docsentinel-1.0.0/.claude/skills/adr-write/SKILL.md +52 -0
  31. docsentinel-1.0.0/.claude/skills/adr-write/references/template-guide.md +62 -0
  32. docsentinel-1.0.0/.claude/skills/dep-audit/SKILL.md +55 -0
  33. docsentinel-1.0.0/.claude/skills/dep-audit/references/license-policy.md +66 -0
  34. docsentinel-1.0.0/.claude/skills/doc-xref/SKILL.md +68 -0
  35. docsentinel-1.0.0/.claude/skills/doc-xref/examples/rename-propagation.md +66 -0
  36. docsentinel-1.0.0/.claude/skills/document-tests/SKILL.md +62 -0
  37. docsentinel-1.0.0/.claude/skills/document-tests/example/test-docstring-example.py +149 -0
  38. docsentinel-1.0.0/.claude/skills/document-tests/references/classification-guide.md +83 -0
  39. docsentinel-1.0.0/.claude/skills/link-check/SKILL.md +82 -0
  40. docsentinel-1.0.0/.claude/skills/link-check/references/anchor-slug-rules.md +53 -0
  41. docsentinel-1.0.0/.claude/skills/link-check/references/rename-candidates.md +56 -0
  42. docsentinel-1.0.0/.claude/skills/pr-review/SKILL.md +58 -0
  43. docsentinel-1.0.0/.claude/skills/secret-scan/SKILL.md +61 -0
  44. docsentinel-1.0.0/.claude/skills/secret-scan/references/pattern-catalog.md +88 -0
  45. docsentinel-1.0.0/.claude/skills/test-gap/SKILL.md +46 -0
  46. docsentinel-1.0.0/.claude/skills/test-gap/references/risk-ranking-rubric.md +60 -0
  47. docsentinel-1.0.0/.claude/skills/verify-task/SKILL.md +49 -0
  48. docsentinel-1.0.0/.docsentinel-baseline.json +715 -0
  49. docsentinel-1.0.0/.docsentinel-standard-baseline.json +163 -0
  50. docsentinel-1.0.0/.editorconfig +11 -0
  51. docsentinel-1.0.0/.github/ISSUE_TEMPLATE/bug_report.yml +15 -0
  52. docsentinel-1.0.0/.github/ISSUE_TEMPLATE/feature_request.yml +9 -0
  53. docsentinel-1.0.0/.github/dependabot.yml +10 -0
  54. docsentinel-1.0.0/.github/pull_request_template.md +7 -0
  55. docsentinel-1.0.0/.github/workflows/ci.yml +24 -0
  56. docsentinel-1.0.0/.github/workflows/release.yml +13 -0
  57. docsentinel-1.0.0/.gitignore +221 -0
  58. docsentinel-1.0.0/.idea/.gitignore +10 -0
  59. docsentinel-1.0.0/.idea/docsentinel.iml +11 -0
  60. docsentinel-1.0.0/.idea/inspectionProfiles/profiles_settings.xml +6 -0
  61. docsentinel-1.0.0/.idea/misc.xml +4 -0
  62. docsentinel-1.0.0/.idea/modules.xml +8 -0
  63. docsentinel-1.0.0/.idea/vcs.xml +6 -0
  64. docsentinel-1.0.0/.idea/workspace.xml +106 -0
  65. docsentinel-1.0.0/.junie/agents/agent-orchestrator.md +28 -0
  66. docsentinel-1.0.0/.junie/agents/app-architect.md +21 -0
  67. docsentinel-1.0.0/.junie/agents/background-reviewer.md +17 -0
  68. docsentinel-1.0.0/.junie/agents/docs-updater.md +17 -0
  69. docsentinel-1.0.0/.junie/agents/docs-writer.md +17 -0
  70. docsentinel-1.0.0/.junie/agents/feature-reviewer.md +18 -0
  71. docsentinel-1.0.0/.junie/agents/incident-analyst.md +16 -0
  72. docsentinel-1.0.0/.junie/agents/python-expert.md +21 -0
  73. docsentinel-1.0.0/.junie/agents/security-auditor.md +15 -0
  74. docsentinel-1.0.0/.junie/agents/task-verifier.md +15 -0
  75. docsentinel-1.0.0/.junie/agents/test-documenter.md +16 -0
  76. docsentinel-1.0.0/.junie/agents/testing-expert.md +19 -0
  77. docsentinel-1.0.0/.junie/commands/implement-milestone.md +36 -0
  78. docsentinel-1.0.0/.junie/commands/implement-story.md +34 -0
  79. docsentinel-1.0.0/.junie/commands/update-docs.md +26 -0
  80. docsentinel-1.0.0/.junie/guidelines.md +65 -0
  81. docsentinel-1.0.0/.junie/skills/adr-write/SKILL.md +22 -0
  82. docsentinel-1.0.0/.junie/skills/dep-audit/SKILL.md +22 -0
  83. docsentinel-1.0.0/.junie/skills/doc-xref/SKILL.md +23 -0
  84. docsentinel-1.0.0/.junie/skills/document-tests/SKILL.md +25 -0
  85. docsentinel-1.0.0/.junie/skills/link-check/SKILL.md +23 -0
  86. docsentinel-1.0.0/.junie/skills/pr-review/SKILL.md +21 -0
  87. docsentinel-1.0.0/.junie/skills/secret-scan/SKILL.md +22 -0
  88. docsentinel-1.0.0/.junie/skills/test-gap/SKILL.md +21 -0
  89. docsentinel-1.0.0/.junie/skills/verify-task/SKILL.md +20 -0
  90. docsentinel-1.0.0/.pre-commit-hooks.yaml +15 -0
  91. docsentinel-1.0.0/.python-version +1 -0
  92. docsentinel-1.0.0/CLAUDE.md +64 -0
  93. docsentinel-1.0.0/CONTRIBUTING.md +13 -0
  94. docsentinel-1.0.0/LICENSE +21 -0
  95. docsentinel-1.0.0/PKG-INFO +200 -0
  96. docsentinel-1.0.0/README.md +180 -0
  97. docsentinel-1.0.0/RELEASE_NOTES.json +20 -0
  98. docsentinel-1.0.0/doc_sentinel.toml +7 -0
  99. docsentinel-1.0.0/docs/README.md +51 -0
  100. docsentinel-1.0.0/docs/adr/0001-config-loading-via-layered-settings.md +121 -0
  101. docsentinel-1.0.0/docs/adr/README.md +41 -0
  102. docsentinel-1.0.0/docs/adr/assets/0001-config-source-precedence.mmd +17 -0
  103. docsentinel-1.0.0/docs/adr/template.md +47 -0
  104. docsentinel-1.0.0/docs/agent/agents.md +16 -0
  105. docsentinel-1.0.0/docs/agent/hooks.md +13 -0
  106. docsentinel-1.0.0/docs/agent/skills.md +13 -0
  107. docsentinel-1.0.0/docs/agent/tutorial.md +1 -0
  108. docsentinel-1.0.0/docs/architecture/README.md +129 -0
  109. docsentinel-1.0.0/docs/dev/markdown_dialect.md +579 -0
  110. docsentinel-1.0.0/docs/dev/markdown_scanner.md +318 -0
  111. docsentinel-1.0.0/docs/dev/python_coding_standard.md +29 -0
  112. docsentinel-1.0.0/docs/dev/python_language_rules.md +790 -0
  113. docsentinel-1.0.0/docs/dev/python_style_rules.md +1649 -0
  114. docsentinel-1.0.0/docs/reviews/README.md +22 -0
  115. docsentinel-1.0.0/docs/reviews/example-report.md +21 -0
  116. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/01.0-rule-registry-and-config-conventions/01-rule-registry.md +68 -0
  117. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/01.0-rule-registry-and-config-conventions/02-config-conventions.md +117 -0
  118. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/01.0-rule-registry-and-config-conventions/03-selection-resolution.md +123 -0
  119. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/01.0-rule-registry-and-config-conventions/04-cli-and-docs.md +84 -0
  120. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/01.0-rule-registry-and-config-conventions/README.md +20 -0
  121. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/02.0-fast-profile-structural-detectors/01-dangling-link-anchor-detector.md +105 -0
  122. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/02.0-fast-profile-structural-detectors/02-stray-html-comment-detector.md +56 -0
  123. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/02.0-fast-profile-structural-detectors/03-unresolvable-path-detector.md +77 -0
  124. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/02.0-fast-profile-structural-detectors/04-detector-package-wiring.md +119 -0
  125. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/02.0-fast-profile-structural-detectors/README.md +18 -0
  126. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/03.0-cli-and-reporting-completion/01-severity-aware-exit-codes.md +66 -0
  127. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/03.0-cli-and-reporting-completion/02-github-annotation-format.md +73 -0
  128. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/03.0-cli-and-reporting-completion/03-json-schema-versioning.md +64 -0
  129. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/03.0-cli-and-reporting-completion/README.md +17 -0
  130. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/04.0-pre-commit-ci-and-baseline/01-pre-commit-fast-hook-wiring.md +71 -0
  131. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/04.0-pre-commit-ci-and-baseline/02-baseline-file-mechanism.md +111 -0
  132. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/04.0-pre-commit-ci-and-baseline/03-self-scan-baseline-capture.md +85 -0
  133. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/04.0-pre-commit-ci-and-baseline/README.md +17 -0
  134. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/plan.md +102 -0
  135. docsentinel-1.0.0/docs/roadmap/0001-generic-implementation/status.md +100 -0
  136. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/01.0-optional-dependency-plumbing-and-lazy-loading/01-optional-dependency-group.md +112 -0
  137. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/01.0-optional-dependency-plumbing-and-lazy-loading/02-lazy-loader-and-engine-wiring.md +176 -0
  138. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/01.0-optional-dependency-plumbing-and-lazy-loading/03-cli-and-docs-awareness.md +116 -0
  139. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/01.0-optional-dependency-plumbing-and-lazy-loading/README.md +34 -0
  140. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/02.0-text-complexity-detector/01-complexity-detector.md +130 -0
  141. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/02.0-text-complexity-detector/02-wiring-and-end-to-end.md +108 -0
  142. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/02.0-text-complexity-detector/README.md +22 -0
  143. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/03.0-corpus-statistics-duplicate-and-low-information/01-shared-corpus-module.md +118 -0
  144. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/03.0-corpus-statistics-duplicate-and-low-information/02-duplicate-text-detector.md +119 -0
  145. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/03.0-corpus-statistics-duplicate-and-low-information/03-low-information-detector.md +135 -0
  146. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/03.0-corpus-statistics-duplicate-and-low-information/04-wiring-and-end-to-end.md +119 -0
  147. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/03.0-corpus-statistics-duplicate-and-low-information/README.md +39 -0
  148. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/04.0-doc-vs-code-signature-mismatch/01-code-discovery.md +109 -0
  149. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/04.0-doc-vs-code-signature-mismatch/02-signature-mismatch-detector.md +135 -0
  150. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/04.0-doc-vs-code-signature-mismatch/03-wiring-and-end-to-end.md +98 -0
  151. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/04.0-doc-vs-code-signature-mismatch/README.md +40 -0
  152. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/05.0-standard-profile-ci-and-baseline-wiring/01-ci-lane-and-optional-hook.md +120 -0
  153. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/05.0-standard-profile-ci-and-baseline-wiring/README.md +22 -0
  154. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/plan.md +137 -0
  155. docsentinel-1.0.0/docs/roadmap/0002-standard-profile-detectors/status.md +59 -0
  156. docsentinel-1.0.0/docs/roadmap/0003-deep-profile-and-periodic-review/01.0-deep-opt-in-gating-and-dependency-plumbing/01-deep-opt-in-confirmation-gate.md +132 -0
  157. docsentinel-1.0.0/docs/roadmap/0003-deep-profile-and-periodic-review/01.0-deep-opt-in-gating-and-dependency-plumbing/02-optional-dependency-group-and-lazy-import.md +120 -0
  158. docsentinel-1.0.0/docs/roadmap/0003-deep-profile-and-periodic-review/01.0-deep-opt-in-gating-and-dependency-plumbing/03-doctor-readiness-and-model-setup-docs.md +88 -0
  159. docsentinel-1.0.0/docs/roadmap/0003-deep-profile-and-periodic-review/01.0-deep-opt-in-gating-and-dependency-plumbing/README.md +25 -0
  160. docsentinel-1.0.0/docs/roadmap/0003-deep-profile-and-periodic-review/02.0-fact-contradiction-candidate-detector/01-triple-extraction-module.md +89 -0
  161. docsentinel-1.0.0/docs/roadmap/0003-deep-profile-and-periodic-review/02.0-fact-contradiction-candidate-detector/02-contradiction-candidate-analyzer.md +136 -0
  162. docsentinel-1.0.0/docs/roadmap/0003-deep-profile-and-periodic-review/02.0-fact-contradiction-candidate-detector/03-registration-gating-and-end-to-end-test.md +99 -0
  163. docsentinel-1.0.0/docs/roadmap/0003-deep-profile-and-periodic-review/02.0-fact-contradiction-candidate-detector/README.md +26 -0
  164. docsentinel-1.0.0/docs/roadmap/0003-deep-profile-and-periodic-review/03.0-docs-reviewer-agent-and-periodic-loop/01-docs-reviewer-agent-definition.md +118 -0
  165. docsentinel-1.0.0/docs/roadmap/0003-deep-profile-and-periodic-review/03.0-docs-reviewer-agent-and-periodic-loop/02-deep-review-periodic-loop.md +114 -0
  166. docsentinel-1.0.0/docs/roadmap/0003-deep-profile-and-periodic-review/03.0-docs-reviewer-agent-and-periodic-loop/README.md +26 -0
  167. docsentinel-1.0.0/docs/roadmap/0003-deep-profile-and-periodic-review/04.0-deep-reporting-and-exit-code-semantics/01-advisory-only-exit-codes-for-deep.md +91 -0
  168. docsentinel-1.0.0/docs/roadmap/0003-deep-profile-and-periodic-review/04.0-deep-reporting-and-exit-code-semantics/02-deep-reporting-wording-and-architecture-refresh.md +99 -0
  169. docsentinel-1.0.0/docs/roadmap/0003-deep-profile-and-periodic-review/04.0-deep-reporting-and-exit-code-semantics/README.md +21 -0
  170. docsentinel-1.0.0/docs/roadmap/0003-deep-profile-and-periodic-review/plan.md +120 -0
  171. docsentinel-1.0.0/docs/roadmap/0003-deep-profile-and-periodic-review/status.md +14 -0
  172. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/01.0-shared-foundations-and-fixtures/01-analyzer-context-and-config.md +21 -0
  173. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/01.0-shared-foundations-and-fixtures/02-fixture-catalog-and-validation.md +25 -0
  174. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/01.0-shared-foundations-and-fixtures/03-readiness-and-deep-capabilities.md +23 -0
  175. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/01.0-shared-foundations-and-fixtures/README.md +26 -0
  176. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/02.0-orphan-documentation/01-implement-detector.md +67 -0
  177. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/02.0-orphan-documentation/02-markdown-asset-cases.md +69 -0
  178. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/02.0-orphan-documentation/03-integration-and-verification.md +64 -0
  179. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/02.0-orphan-documentation/README.md +42 -0
  180. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/03.0-required-document-metadata/01-implement-detector.md +67 -0
  181. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/03.0-required-document-metadata/02-markdown-asset-cases.md +68 -0
  182. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/03.0-required-document-metadata/03-integration-and-verification.md +64 -0
  183. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/03.0-required-document-metadata/README.md +42 -0
  184. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/04.0-unresolved-migration-markers/01-implement-detector.md +67 -0
  185. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/04.0-unresolved-migration-markers/02-markdown-asset-cases.md +67 -0
  186. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/04.0-unresolved-migration-markers/03-integration-and-verification.md +64 -0
  187. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/04.0-unresolved-migration-markers/README.md +42 -0
  188. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/05.0-terminology-consistency/01-implement-detector.md +67 -0
  189. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/05.0-terminology-consistency/02-markdown-asset-cases.md +68 -0
  190. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/05.0-terminology-consistency/03-integration-and-verification.md +64 -0
  191. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/05.0-terminology-consistency/README.md +42 -0
  192. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/06.0-repeated-document-sections/01-implement-detector.md +67 -0
  193. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/06.0-repeated-document-sections/02-markdown-asset-cases.md +67 -0
  194. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/06.0-repeated-document-sections/03-integration-and-verification.md +64 -0
  195. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/06.0-repeated-document-sections/README.md +42 -0
  196. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/07.0-near-duplicate-documents/01-implement-detector.md +67 -0
  197. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/07.0-near-duplicate-documents/02-markdown-asset-cases.md +67 -0
  198. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/07.0-near-duplicate-documents/03-integration-and-verification.md +64 -0
  199. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/07.0-near-duplicate-documents/README.md +42 -0
  200. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/08.0-stale-source-symbol-references/01-implement-detector.md +67 -0
  201. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/08.0-stale-source-symbol-references/02-markdown-asset-cases.md +68 -0
  202. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/08.0-stale-source-symbol-references/03-integration-and-verification.md +64 -0
  203. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/08.0-stale-source-symbol-references/README.md +42 -0
  204. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/09.0-configuration-key-synchronization/01-implement-detector.md +67 -0
  205. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/09.0-configuration-key-synchronization/02-markdown-asset-cases.md +68 -0
  206. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/09.0-configuration-key-synchronization/03-integration-and-verification.md +64 -0
  207. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/09.0-configuration-key-synchronization/README.md +42 -0
  208. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/10.0-cli-option-synchronization/01-implement-detector.md +67 -0
  209. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/10.0-cli-option-synchronization/02-markdown-asset-cases.md +68 -0
  210. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/10.0-cli-option-synchronization/03-integration-and-verification.md +64 -0
  211. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/10.0-cli-option-synchronization/README.md +42 -0
  212. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/11.0-documented-code-example-syntax/01-implement-detector.md +67 -0
  213. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/11.0-documented-code-example-syntax/02-markdown-asset-cases.md +69 -0
  214. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/11.0-documented-code-example-syntax/03-integration-and-verification.md +64 -0
  215. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/11.0-documented-code-example-syntax/README.md +42 -0
  216. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/12.0-numeric-contradiction-candidates/01-implement-detector.md +67 -0
  217. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/12.0-numeric-contradiction-candidates/02-markdown-asset-cases.md +71 -0
  218. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/12.0-numeric-contradiction-candidates/03-integration-and-verification.md +64 -0
  219. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/12.0-numeric-contradiction-candidates/README.md +42 -0
  220. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/13.0-documentation-change-impact/01-implement-detector.md +67 -0
  221. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/13.0-documentation-change-impact/02-markdown-asset-cases.md +70 -0
  222. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/13.0-documentation-change-impact/03-integration-and-verification.md +64 -0
  223. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/13.0-documentation-change-impact/README.md +42 -0
  224. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/14.0-cross-profile-validation-and-release/01-fixture-coverage-audit.md +11 -0
  225. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/14.0-cross-profile-validation-and-release/02-profiles-cli-and-ci.md +43 -0
  226. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/14.0-cross-profile-validation-and-release/03-documentation-and-handoff.md +28 -0
  227. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/14.0-cross-profile-validation-and-release/README.md +15 -0
  228. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/README.md +38 -0
  229. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/fixture-matrix.csv +164 -0
  230. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/fixture-matrix.json +1635 -0
  231. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/fixture-matrix.md +252 -0
  232. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/implementation-contracts.md +93 -0
  233. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/plan.md +88 -0
  234. docsentinel-1.0.0/docs/roadmap/0004-deepening-test-cases/status.md +26 -0
  235. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/01.0-shared-fast-markdown-infrastructure/01-standard-library-markdown-block-scanner.md +12 -0
  236. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/01.0-shared-fast-markdown-infrastructure/02-safe-reference-and-policy-config.md +10 -0
  237. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/01.0-shared-fast-markdown-infrastructure/03-fixture-manifest-and-runner.md +9 -0
  238. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/01.0-shared-fast-markdown-infrastructure/README.md +22 -0
  239. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/02.0-anchor-identity-and-collisions/01-detector-design-and-code.md +55 -0
  240. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/02.0-anchor-identity-and-collisions/02-markdown-fixture-assets.md +41 -0
  241. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/02.0-anchor-identity-and-collisions/03-tests-and-acceptance.md +43 -0
  242. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/02.0-anchor-identity-and-collisions/README.md +41 -0
  243. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/03.0-heading-hierarchy-validation/01-detector-design-and-code.md +56 -0
  244. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/03.0-heading-hierarchy-validation/02-markdown-fixture-assets.md +41 -0
  245. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/03.0-heading-hierarchy-validation/03-tests-and-acceptance.md +43 -0
  246. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/03.0-heading-hierarchy-validation/README.md +40 -0
  247. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/04.0-contentless-section-detection/01-detector-design-and-code.md +56 -0
  248. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/04.0-contentless-section-detection/02-markdown-fixture-assets.md +41 -0
  249. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/04.0-contentless-section-detection/03-tests-and-acceptance.md +43 -0
  250. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/04.0-contentless-section-detection/README.md +40 -0
  251. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/05.0-reference-definition-integrity/01-detector-design-and-code.md +55 -0
  252. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/05.0-reference-definition-integrity/02-markdown-fixture-assets.md +41 -0
  253. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/05.0-reference-definition-integrity/03-tests-and-acceptance.md +43 -0
  254. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/05.0-reference-definition-integrity/README.md +40 -0
  255. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/06.0-fenced-code-boundary-validation/01-detector-design-and-code.md +55 -0
  256. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/06.0-fenced-code-boundary-validation/02-markdown-fixture-assets.md +41 -0
  257. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/06.0-fenced-code-boundary-validation/03-tests-and-acceptance.md +43 -0
  258. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/06.0-fenced-code-boundary-validation/README.md +41 -0
  259. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/07.0-code-fence-language-policy/01-detector-design-and-code.md +55 -0
  260. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/07.0-code-fence-language-policy/02-markdown-fixture-assets.md +41 -0
  261. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/07.0-code-fence-language-policy/03-tests-and-acceptance.md +43 -0
  262. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/07.0-code-fence-language-policy/README.md +40 -0
  263. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/08.0-pipe-table-structural-validation/01-detector-design-and-code.md +55 -0
  264. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/08.0-pipe-table-structural-validation/02-markdown-fixture-assets.md +42 -0
  265. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/08.0-pipe-table-structural-validation/03-tests-and-acceptance.md +43 -0
  266. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/08.0-pipe-table-structural-validation/README.md +40 -0
  267. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/09.0-configured-navigation-integrity/01-detector-design-and-code.md +56 -0
  268. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/09.0-configured-navigation-integrity/02-markdown-fixture-assets.md +41 -0
  269. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/09.0-configured-navigation-integrity/03-tests-and-acceptance.md +43 -0
  270. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/09.0-configured-navigation-integrity/README.md +40 -0
  271. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/10.0-missing-local-media-assets/01-detector-design-and-code.md +57 -0
  272. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/10.0-missing-local-media-assets/02-markdown-fixture-assets.md +42 -0
  273. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/10.0-missing-local-media-assets/03-tests-and-acceptance.md +43 -0
  274. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/10.0-missing-local-media-assets/README.md +41 -0
  275. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/11.0-repository-root-path-boundaries/01-detector-design-and-code.md +56 -0
  276. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/11.0-repository-root-path-boundaries/02-markdown-fixture-assets.md +42 -0
  277. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/11.0-repository-root-path-boundaries/03-tests-and-acceptance.md +43 -0
  278. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/11.0-repository-root-path-boundaries/README.md +41 -0
  279. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/12.0-document-identity-uniqueness/01-detector-design-and-code.md +57 -0
  280. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/12.0-document-identity-uniqueness/02-markdown-fixture-assets.md +41 -0
  281. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/12.0-document-identity-uniqueness/03-tests-and-acceptance.md +43 -0
  282. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/12.0-document-identity-uniqueness/README.md +41 -0
  283. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/13.0-deprecated-reference-and-terminology/01-detector-design-and-code.md +57 -0
  284. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/13.0-deprecated-reference-and-terminology/02-markdown-fixture-assets.md +41 -0
  285. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/13.0-deprecated-reference-and-terminology/03-tests-and-acceptance.md +43 -0
  286. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/13.0-deprecated-reference-and-terminology/README.md +41 -0
  287. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/14.0-documentation-path-naming-policy/01-detector-design-and-code.md +57 -0
  288. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/14.0-documentation-path-naming-policy/02-markdown-fixture-assets.md +41 -0
  289. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/14.0-documentation-path-naming-policy/03-tests-and-acceptance.md +43 -0
  290. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/14.0-documentation-path-naming-policy/README.md +41 -0
  291. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/15.0-cross-rule-quality-and-release/01-fixture-catalog-and-edge-audit.md +8 -0
  292. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/15.0-cross-rule-quality-and-release/02-ci-compatibility-security-and-performance.md +8 -0
  293. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/15.0-cross-rule-quality-and-release/03-documentation-roadmap-and-handoff.md +8 -0
  294. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/15.0-cross-rule-quality-and-release/README.md +22 -0
  295. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/README.md +19 -0
  296. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/execution-guide.md +64 -0
  297. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/fixture-matrix.csv +192 -0
  298. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/fixture-matrix.json +2314 -0
  299. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/fixture-matrix.md +263 -0
  300. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/handoff-ds2xx-ds3xx.md +256 -0
  301. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/implementation-contracts.md +63 -0
  302. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/parser-contract.md +44 -0
  303. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/performance-report.md +107 -0
  304. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/plan.md +85 -0
  305. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/source-audit.md +14 -0
  306. docsentinel-1.0.0/docs/roadmap/0005-deepening-test-case-stage-2/status.md +225 -0
  307. docsentinel-1.0.0/docs/roadmap/README.md +62 -0
  308. docsentinel-1.0.0/docs/roadmap/new_change.txt +1 -0
  309. docsentinel-1.0.0/docs/security/README.md +104 -0
  310. docsentinel-1.0.0/docs/security/review-ds108-reference-definitions-2026-10-23.md +207 -0
  311. docsentinel-1.0.0/docs/security/review-ds114-document-identity-2026-10-23.md +359 -0
  312. docsentinel-1.0.0/docs/security/review-ds118-documentation-naming-2026-10-23.md +194 -0
  313. docsentinel-1.0.0/docs/security/review-github-actions-annotations-2026-10-10.md +193 -0
  314. docsentinel-1.0.0/docs/security/review-pre-commit-fast-hook-wiring-2026-10-10.md +116 -0
  315. docsentinel-1.0.0/docs/security/review-story-15-shared-components-2026-10-23.md +180 -0
  316. docsentinel-1.0.0/docs/security/threat-model-ds112-navigation-integrity-2026-10-23.md +699 -0
  317. docsentinel-1.0.0/docs/security/threat-model-ds113-missing-assets-2026-10-23.md +577 -0
  318. docsentinel-1.0.0/docs/security/threat-model-ds115-deprecated-references-2026-10-23.md +948 -0
  319. docsentinel-1.0.0/docs/security/threat-model-ds116-path-boundaries-2026-10-22.md +654 -0
  320. docsentinel-1.0.0/docs/test/README.md +80 -0
  321. docsentinel-1.0.0/docs/test/code_test_coverage.md +314 -0
  322. docsentinel-1.0.0/docs/user/reference/README.md +12 -0
  323. docsentinel-1.0.0/docs/user/reference/configuration.md +1073 -0
  324. docsentinel-1.0.0/docs/user/reference/statistical-checks.md +659 -0
  325. docsentinel-1.0.0/docs/user/tutorial/README.md +341 -0
  326. docsentinel-1.0.0/docs/user/tutorial/cli.md +303 -0
  327. docsentinel-1.0.0/docs/user/tutorial/library.md +295 -0
  328. docsentinel-1.0.0/examples/doc_sentinel.toml +119 -0
  329. docsentinel-1.0.0/examples/docs/guide.md +118 -0
  330. docsentinel-1.0.0/pyproject.toml +80 -0
  331. docsentinel-1.0.0/ruff.toml +35 -0
  332. docsentinel-1.0.0/scripts/bench_corpus.py +81 -0
  333. docsentinel-1.0.0/scripts/check_doc_links.py +243 -0
  334. docsentinel-1.0.0/scripts/doc_registry.py +425 -0
  335. docsentinel-1.0.0/scripts/document_tests.py +370 -0
  336. docsentinel-1.0.0/scripts/linkify_doc_mentions.py +534 -0
  337. docsentinel-1.0.0/setup.cfg +5 -0
  338. docsentinel-1.0.0/src/docsentinel/__init__.py +20 -0
  339. docsentinel-1.0.0/src/docsentinel/baseline.py +56 -0
  340. docsentinel-1.0.0/src/docsentinel/cli.py +237 -0
  341. docsentinel-1.0.0/src/docsentinel/code_discovery.py +84 -0
  342. docsentinel-1.0.0/src/docsentinel/config.py +604 -0
  343. docsentinel-1.0.0/src/docsentinel/deep_support.py +59 -0
  344. docsentinel-1.0.0/src/docsentinel/detectors/__init__.py +41 -0
  345. docsentinel-1.0.0/src/docsentinel/detectors/_triples.py +169 -0
  346. docsentinel-1.0.0/src/docsentinel/detectors/anchors.py +196 -0
  347. docsentinel-1.0.0/src/docsentinel/detectors/assets.py +419 -0
  348. docsentinel-1.0.0/src/docsentinel/detectors/comments.py +90 -0
  349. docsentinel-1.0.0/src/docsentinel/detectors/contradictions.py +134 -0
  350. docsentinel-1.0.0/src/docsentinel/detectors/deprecated_refs.py +916 -0
  351. docsentinel-1.0.0/src/docsentinel/detectors/document_ids.py +773 -0
  352. docsentinel-1.0.0/src/docsentinel/detectors/fence_languages.py +214 -0
  353. docsentinel-1.0.0/src/docsentinel/detectors/fences.py +172 -0
  354. docsentinel-1.0.0/src/docsentinel/detectors/headings.py +237 -0
  355. docsentinel-1.0.0/src/docsentinel/detectors/links.py +202 -0
  356. docsentinel-1.0.0/src/docsentinel/detectors/loader.py +29 -0
  357. docsentinel-1.0.0/src/docsentinel/detectors/naming.py +547 -0
  358. docsentinel-1.0.0/src/docsentinel/detectors/navigation.py +652 -0
  359. docsentinel-1.0.0/src/docsentinel/detectors/path_boundaries.py +499 -0
  360. docsentinel-1.0.0/src/docsentinel/detectors/paths.py +180 -0
  361. docsentinel-1.0.0/src/docsentinel/detectors/references.py +381 -0
  362. docsentinel-1.0.0/src/docsentinel/detectors/sections.py +533 -0
  363. docsentinel-1.0.0/src/docsentinel/detectors/standard/__init__.py +10 -0
  364. docsentinel-1.0.0/src/docsentinel/detectors/standard/complexity.py +117 -0
  365. docsentinel-1.0.0/src/docsentinel/detectors/standard/corpus.py +334 -0
  366. docsentinel-1.0.0/src/docsentinel/detectors/standard/duplication.py +95 -0
  367. docsentinel-1.0.0/src/docsentinel/detectors/standard/low_information.py +142 -0
  368. docsentinel-1.0.0/src/docsentinel/detectors/standard/signatures.py +175 -0
  369. docsentinel-1.0.0/src/docsentinel/detectors/tables.py +424 -0
  370. docsentinel-1.0.0/src/docsentinel/discovery.py +43 -0
  371. docsentinel-1.0.0/src/docsentinel/engine.py +229 -0
  372. docsentinel-1.0.0/src/docsentinel/errors.py +16 -0
  373. docsentinel-1.0.0/src/docsentinel/markdown_blocks.py +1442 -0
  374. docsentinel-1.0.0/src/docsentinel/models.py +36 -0
  375. docsentinel-1.0.0/src/docsentinel/py.typed +0 -0
  376. docsentinel-1.0.0/src/docsentinel/pytest_plugin.py +14 -0
  377. docsentinel-1.0.0/src/docsentinel/reporting.py +188 -0
  378. docsentinel-1.0.0/src/docsentinel/rules.py +97 -0
  379. docsentinel-1.0.0/tests/__init__.py +0 -0
  380. docsentinel-1.0.0/tests/asset_helpers.py +61 -0
  381. docsentinel-1.0.0/tests/assets/README.md +64 -0
  382. docsentinel-1.0.0/tests/assets/ds101/asymmetric_backtick_stripping/README.md +1 -0
  383. docsentinel-1.0.0/tests/assets/ds101/broken_symlink/README.md +1 -0
  384. docsentinel-1.0.0/tests/assets/ds101/clean_document/clean.md +3 -0
  385. docsentinel-1.0.0/tests/assets/ds101/dangling_file_link/README.md +1 -0
  386. docsentinel-1.0.0/tests/assets/ds101/dangling_link_file/dangling.md +1 -0
  387. docsentinel-1.0.0/tests/assets/ds101/duplicate_headings_suffixed_anchors/README.md +5 -0
  388. docsentinel-1.0.0/tests/assets/ds101/findings_preserve_document_order/a.md +1 -0
  389. docsentinel-1.0.0/tests/assets/ds101/findings_preserve_document_order/z.md +1 -0
  390. docsentinel-1.0.0/tests/assets/ds101/headings_inside_fenced_code/README.md +5 -0
  391. docsentinel-1.0.0/tests/assets/ds101/html_anchor_id/README.md +3 -0
  392. docsentinel-1.0.0/tests/assets/ds101/html_anchor_name/README.md +3 -0
  393. docsentinel-1.0.0/tests/assets/ds101/invalid_utf8_target_heading/README.md +1 -0
  394. docsentinel-1.0.0/tests/assets/ds101/leading_slash_from_scan_root/scan-root/README.md +1 -0
  395. docsentinel-1.0.0/tests/assets/ds101/leading_slash_from_scan_root/scan-root/docs/x.md +1 -0
  396. docsentinel-1.0.0/tests/assets/ds101/link_inside_inline_code_span/README.md +1 -0
  397. docsentinel-1.0.0/tests/assets/ds101/links_inside_fenced_code/README.md +6 -0
  398. docsentinel-1.0.0/tests/assets/ds101/missing_anchor_other_file/README.md +1 -0
  399. docsentinel-1.0.0/tests/assets/ds101/missing_anchor_other_file/other.md +1 -0
  400. docsentinel-1.0.0/tests/assets/ds101/missing_anchor_same_file/README.md +3 -0
  401. docsentinel-1.0.0/tests/assets/ds101/missing_file_with_anchor/README.md +1 -0
  402. docsentinel-1.0.0/tests/assets/ds101/nested_relative_link/docs/guides/intro.md +1 -0
  403. docsentinel-1.0.0/tests/assets/ds101/nested_relative_link/docs/shared.md +1 -0
  404. docsentinel-1.0.0/tests/assets/ds101/non_markdown_document/notes.txt +1 -0
  405. docsentinel-1.0.0/tests/assets/ds101/parent_traversal_outside_root/outside.md +1 -0
  406. docsentinel-1.0.0/tests/assets/ds101/parent_traversal_outside_root/scan-root/docs/README.md +1 -0
  407. docsentinel-1.0.0/tests/assets/ds101/second_dangling_link_file/second.md +1 -0
  408. docsentinel-1.0.0/tests/assets/ds101/skipped_targets/README.md +8 -0
  409. docsentinel-1.0.0/tests/assets/ds101/source_line_number/README.md +3 -0
  410. docsentinel-1.0.0/tests/assets/ds101/symlink_to_existing_target/README.md +1 -0
  411. docsentinel-1.0.0/tests/assets/ds101/symlink_to_existing_target/target.md +1 -0
  412. docsentinel-1.0.0/tests/assets/ds101/target_read_error/README.md +1 -0
  413. docsentinel-1.0.0/tests/assets/ds101/target_read_error/target.md +1 -0
  414. docsentinel-1.0.0/tests/assets/ds101/valid_link_to_file/README.md +1 -0
  415. docsentinel-1.0.0/tests/assets/ds101/valid_link_to_file/other.md +1 -0
  416. docsentinel-1.0.0/tests/assets/ds101/valid_link_to_heading/README.md +1 -0
  417. docsentinel-1.0.0/tests/assets/ds101/valid_link_to_heading/other.md +1 -0
  418. docsentinel-1.0.0/tests/assets/ds102/comment_in_fence_at_end/README.md +4 -0
  419. docsentinel-1.0.0/tests/assets/ds102/comment_in_fence_at_start/README.md +4 -0
  420. docsentinel-1.0.0/tests/assets/ds102/comment_in_fence_in_middle/README.md +5 -0
  421. docsentinel-1.0.0/tests/assets/ds102/findings_preserve_document_order/a.md +1 -0
  422. docsentinel-1.0.0/tests/assets/ds102/findings_preserve_document_order/z.md +1 -0
  423. docsentinel-1.0.0/tests/assets/ds102/line_numbers_across_multiline_comments/README.md +4 -0
  424. docsentinel-1.0.0/tests/assets/ds102/line_numbers_after_fence_stripping/README.md +6 -0
  425. docsentinel-1.0.0/tests/assets/ds102/long_comment/README.md +1 -0
  426. docsentinel-1.0.0/tests/assets/ds102/multiline_comment/README.md +5 -0
  427. docsentinel-1.0.0/tests/assets/ds102/multiple_comments_one_line/README.md +1 -0
  428. docsentinel-1.0.0/tests/assets/ds102/non_markdown_document/notes.txt +1 -0
  429. docsentinel-1.0.0/tests/assets/ds102/single_line_comment/README.md +2 -0
  430. docsentinel-1.0.0/tests/assets/ds102/stray_comment_before_heading/comment.md +2 -0
  431. docsentinel-1.0.0/tests/assets/ds102/stray_comment_file/comment.md +1 -0
  432. docsentinel-1.0.0/tests/assets/ds103/bare_extension_span/README.md +1 -0
  433. docsentinel-1.0.0/tests/assets/ds103/broken_symlink/README.md +1 -0
  434. docsentinel-1.0.0/tests/assets/ds103/cli_flag_like_span/README.md +1 -0
  435. docsentinel-1.0.0/tests/assets/ds103/code_span_inside_fenced_block/README.md +6 -0
  436. docsentinel-1.0.0/tests/assets/ds103/code_span_inside_link_label/README.md +1 -0
  437. docsentinel-1.0.0/tests/assets/ds103/findings_preserve_document_order/a.md +1 -0
  438. docsentinel-1.0.0/tests/assets/ds103/findings_preserve_document_order/z.md +1 -0
  439. docsentinel-1.0.0/tests/assets/ds103/hostile_backticks_only/README.md +2 -0
  440. docsentinel-1.0.0/tests/assets/ds103/hostile_empty_span/README.md +1 -0
  441. docsentinel-1.0.0/tests/assets/ds103/hostile_newline_in_span/README.md +2 -0
  442. docsentinel-1.0.0/tests/assets/ds103/hostile_unterminated_span/README.md +1 -0
  443. docsentinel-1.0.0/tests/assets/ds103/leading_slash_from_scan_root/scan-root/README.md +1 -0
  444. docsentinel-1.0.0/tests/assets/ds103/leading_slash_from_scan_root/scan-root/docs/x.md +1 -0
  445. docsentinel-1.0.0/tests/assets/ds103/missing_parent_traversal/scan-root/docs/README.md +1 -0
  446. docsentinel-1.0.0/tests/assets/ds103/non_markdown_document/notes.txt +1 -0
  447. docsentinel-1.0.0/tests/assets/ds103/opposite_fence_marker/README.md +4 -0
  448. docsentinel-1.0.0/tests/assets/ds103/parent_traversal_outside_root/outside.md +1 -0
  449. docsentinel-1.0.0/tests/assets/ds103/parent_traversal_outside_root/scan-root/docs/README.md +1 -0
  450. docsentinel-1.0.0/tests/assets/ds103/relative_path_from_document_directory/docs/guides/intro.md +1 -0
  451. docsentinel-1.0.0/tests/assets/ds103/relative_path_from_document_directory/docs/shared.md +1 -0
  452. docsentinel-1.0.0/tests/assets/ds103/shared_spans_with_ds101/README.md +2 -0
  453. docsentinel-1.0.0/tests/assets/ds103/shell_prompt_and_variable_like_spans/README.md +1 -0
  454. docsentinel-1.0.0/tests/assets/ds103/source_line_number/README.md +3 -0
  455. docsentinel-1.0.0/tests/assets/ds103/source_lines_after_fence_stripping/README.md +6 -0
  456. docsentinel-1.0.0/tests/assets/ds103/span_with_whitespace/README.md +1 -0
  457. docsentinel-1.0.0/tests/assets/ds103/symlink_to_existing_target/README.md +1 -0
  458. docsentinel-1.0.0/tests/assets/ds103/symlink_to_existing_target/target.md +1 -0
  459. docsentinel-1.0.0/tests/assets/ds103/unresolvable_path_file/path.md +1 -0
  460. docsentinel-1.0.0/tests/assets/ds103/unresolvable_relative_path/README.md +1 -0
  461. docsentinel-1.0.0/tests/assets/ds103/version_number_like_span/README.md +1 -0
  462. docsentinel-1.0.0/tests/assets/ds103/windows_drive_anchored/README.md +1 -0
  463. docsentinel-1.0.0/tests/assets/ds103/windows_rooted_backslash/README.md +1 -0
  464. docsentinel-1.0.0/tests/assets/ds103/windows_unc_path/README.md +1 -0
  465. docsentinel-1.0.0/tests/assets/ds104/anchor_inside_code_fence/README.md +10 -0
  466. docsentinel-1.0.0/tests/assets/ds104/anchor_inside_html_comment/README.md +7 -0
  467. docsentinel-1.0.0/tests/assets/ds104/distinct_explicit_anchors/README.md +13 -0
  468. docsentinel-1.0.0/tests/assets/ds104/duplicate_explicit_ids/README.md +9 -0
  469. docsentinel-1.0.0/tests/assets/ds104/duplicate_headings_suffixed/README.md +9 -0
  470. docsentinel-1.0.0/tests/assets/ds104/duplicate_named_anchors/README.md +9 -0
  471. docsentinel-1.0.0/tests/assets/ds104/explicit_different_cases/README.md +9 -0
  472. docsentinel-1.0.0/tests/assets/ds104/explicit_shadow_heading/README.md +9 -0
  473. docsentinel-1.0.0/tests/assets/ds104/generated_suffix_collision/README.md +13 -0
  474. docsentinel-1.0.0/tests/assets/ds104/indented_html_anchor/README.md +7 -0
  475. docsentinel-1.0.0/tests/assets/ds104/inline_literal_anchor_text/README.md +3 -0
  476. docsentinel-1.0.0/tests/assets/ds104/same_anchor_other_files/a.md +5 -0
  477. docsentinel-1.0.0/tests/assets/ds104/same_anchor_other_files/b.md +5 -0
  478. docsentinel-1.0.0/tests/assets/ds104/three_anchor_occurrences/README.md +7 -0
  479. docsentinel-1.0.0/tests/assets/ds104/unicode_heading_normalization/README.md +5 -0
  480. docsentinel-1.0.0/tests/assets/ds105/blockquote_heading_ignored/README.md +10 -0
  481. docsentinel-1.0.0/tests/assets/ds105/crlf_line_accuracy/README.md +7 -0
  482. docsentinel-1.0.0/tests/assets/ds105/first_heading_level_three/README.md +3 -0
  483. docsentinel-1.0.0/tests/assets/ds105/heading_after_frontmatter/README.md +10 -0
  484. docsentinel-1.0.0/tests/assets/ds105/heading_inside_code_fence/README.md +11 -0
  485. docsentinel-1.0.0/tests/assets/ds105/heading_inside_html_comment/README.md +9 -0
  486. docsentinel-1.0.0/tests/assets/ds105/heading_symbols_in_prose/README.md +7 -0
  487. docsentinel-1.0.0/tests/assets/ds105/multiple_levels_skipped/README.md +5 -0
  488. docsentinel-1.0.0/tests/assets/ds105/optional_multiple_h1_warning/README.md +7 -0
  489. docsentinel-1.0.0/tests/assets/ds105/optional_nonroot_start/README.md +5 -0
  490. docsentinel-1.0.0/tests/assets/ds105/sequential_heading_levels/README.md +11 -0
  491. docsentinel-1.0.0/tests/assets/ds105/setext_then_atx/README.md +6 -0
  492. docsentinel-1.0.0/tests/assets/ds105/single_root_heading/README.md +3 -0
  493. docsentinel-1.0.0/tests/assets/ds105/skipped_intermediate_level/README.md +7 -0
  494. docsentinel-1.0.0/tests/assets/ds106/blank_fence_content/README.md +8 -0
  495. docsentinel-1.0.0/tests/assets/ds106/comment_only_section/README.md +7 -0
  496. docsentinel-1.0.0/tests/assets/ds106/empty_terminal_heading/README.md +5 -0
  497. docsentinel-1.0.0/tests/assets/ds106/horizontal_rule_then_text/README.md +7 -0
  498. docsentinel-1.0.0/tests/assets/ds106/html_tag_only_section/README.md +5 -0
  499. docsentinel-1.0.0/tests/assets/ds106/image_only_leaf_section/README.md +5 -0
  500. docsentinel-1.0.0/tests/assets/ds106/inline_link_body_text/README.md +5 -0
  501. docsentinel-1.0.0/tests/assets/ds106/leaf_section_with_prose/README.md +11 -0
  502. docsentinel-1.0.0/tests/assets/ds106/multiple_empty_leaf_sections/README.md +5 -0
  503. docsentinel-1.0.0/tests/assets/ds106/nested_empty_child/README.md +5 -0
  504. docsentinel-1.0.0/tests/assets/ds106/nonempty_fenced_example/README.md +7 -0
  505. docsentinel-1.0.0/tests/assets/ds106/parent_with_child_section/README.md +7 -0
  506. docsentinel-1.0.0/tests/assets/ds106/table_only_section/README.md +7 -0
  507. docsentinel-1.0.0/tests/assets/ds106/whitespace_separator_only/README.md +9 -0
  508. docsentinel-1.0.0/tests/assets/ds108/case_folded_reference_labels/README.md +5 -0
  509. docsentinel-1.0.0/tests/assets/ds108/collapsed_reference_label/README.md +5 -0
  510. docsentinel-1.0.0/tests/assets/ds108/duplicate_reference_labels/README.md +6 -0
  511. docsentinel-1.0.0/tests/assets/ds108/duplicate_whitespace_labels/README.md +6 -0
  512. docsentinel-1.0.0/tests/assets/ds108/escaped_bracket_not_reference/README.md +3 -0
  513. docsentinel-1.0.0/tests/assets/ds108/footnote_reference_ignored/README.md +5 -0
  514. docsentinel-1.0.0/tests/assets/ds108/missing_explicit_reference/README.md +3 -0
  515. docsentinel-1.0.0/tests/assets/ds108/multiple_missing_references/README.md +5 -0
  516. docsentinel-1.0.0/tests/assets/ds108/reference_definition_with_url/README.md +5 -0
  517. docsentinel-1.0.0/tests/assets/ds108/reference_definition_with_url/guide.md +3 -0
  518. docsentinel-1.0.0/tests/assets/ds108/reference_inside_fence/README.md +7 -0
  519. docsentinel-1.0.0/tests/assets/ds108/resolved_reference_definition/README.md +5 -0
  520. docsentinel-1.0.0/tests/assets/ds108/undefined_image_reference/README.md +3 -0
  521. docsentinel-1.0.0/tests/assets/ds108/unused_definition_disabled/README.md +5 -0
  522. docsentinel-1.0.0/tests/assets/ds108/unused_definition_enabled/README.md +5 -0
  523. docsentinel-1.0.0/tests/assets/ds109/backtick_in_info_string/README.md +9 -0
  524. docsentinel-1.0.0/tests/assets/ds109/closing_with_extra_text/README.md +7 -0
  525. docsentinel-1.0.0/tests/assets/ds109/crlf_fence_positions/README.md +6 -0
  526. docsentinel-1.0.0/tests/assets/ds109/fence_trailing_whitespace/README.md +9 -0
  527. docsentinel-1.0.0/tests/assets/ds109/fence_with_info_string/README.md +9 -0
  528. docsentinel-1.0.0/tests/assets/ds109/indented_literal_ticks/README.md +9 -0
  529. docsentinel-1.0.0/tests/assets/ds109/multiple_unterminated_blocks/README.md +11 -0
  530. docsentinel-1.0.0/tests/assets/ds109/nested_opposite_marker/README.md +11 -0
  531. docsentinel-1.0.0/tests/assets/ds109/shorter_closing_run/README.md +7 -0
  532. docsentinel-1.0.0/tests/assets/ds109/unterminated_fence_eof/README.md +6 -0
  533. docsentinel-1.0.0/tests/assets/ds109/valid_backtick_fence/README.md +9 -0
  534. docsentinel-1.0.0/tests/assets/ds109/valid_longer_closer/README.md +9 -0
  535. docsentinel-1.0.0/tests/assets/ds109/valid_tilde_fence/README.md +9 -0
  536. docsentinel-1.0.0/tests/assets/ds109/wrong_fence_character/README.md +7 -0
  537. docsentinel-1.0.0/tests/assets/ds110/blank_info_string_only/README.md +5 -0
  538. docsentinel-1.0.0/tests/assets/ds110/custom_language_allowed/README.md +6 -0
  539. docsentinel-1.0.0/tests/assets/ds110/empty_fence_exemption/README.md +4 -0
  540. docsentinel-1.0.0/tests/assets/ds110/empty_fence_strict_policy/README.md +4 -0
  541. docsentinel-1.0.0/tests/assets/ds110/language_with_attributes/README.md +7 -0
  542. docsentinel-1.0.0/tests/assets/ds110/malformed_fence_not_repeated/README.md +4 -0
  543. docsentinel-1.0.0/tests/assets/ds110/multiple_unlabelled_blocks/README.md +9 -0
  544. docsentinel-1.0.0/tests/assets/ds110/python_fence_label/README.md +5 -0
  545. docsentinel-1.0.0/tests/assets/ds110/shell_session_label/README.md +6 -0
  546. docsentinel-1.0.0/tests/assets/ds110/text_fence_label/README.md +5 -0
  547. docsentinel-1.0.0/tests/assets/ds110/unknown_language_optin/README.md +5 -0
  548. docsentinel-1.0.0/tests/assets/ds110/unlabelled_python_example/README.md +5 -0
  549. docsentinel-1.0.0/tests/assets/ds110/unlabelled_tilde_example/README.md +5 -0
  550. docsentinel-1.0.0/tests/assets/ds110/unlabelled_when_disabled/README.md +5 -0
  551. docsentinel-1.0.0/tests/assets/ds112/duplicate_navigation_target/README.md +6 -0
  552. docsentinel-1.0.0/tests/assets/ds112/duplicate_navigation_target/docs/guide.md +3 -0
  553. docsentinel-1.0.0/tests/assets/ds112/duplicate_with_fragments/README.md +6 -0
  554. docsentinel-1.0.0/tests/assets/ds112/duplicate_with_fragments/docs/guide.md +9 -0
  555. docsentinel-1.0.0/tests/assets/ds112/external_navigation_links/README.md +6 -0
  556. docsentinel-1.0.0/tests/assets/ds112/fake_nav_in_fence/README.md +8 -0
  557. docsentinel-1.0.0/tests/assets/ds112/fragment_navigation_is_local/README.md +14 -0
  558. docsentinel-1.0.0/tests/assets/ds112/missing_index_is_error/README.md +5 -0
  559. docsentinel-1.0.0/tests/assets/ds112/missing_navigation_destination/README.md +5 -0
  560. docsentinel-1.0.0/tests/assets/ds112/missing_required_nav_item/README.md +5 -0
  561. docsentinel-1.0.0/tests/assets/ds112/missing_required_nav_item/docs/guide.md +3 -0
  562. docsentinel-1.0.0/tests/assets/ds112/nested_relative_nav_path/docs/guide.md +3 -0
  563. docsentinel-1.0.0/tests/assets/ds112/nested_relative_nav_path/docs/index.md +5 -0
  564. docsentinel-1.0.0/tests/assets/ds112/prose_link_outside_list/README.md +4 -0
  565. docsentinel-1.0.0/tests/assets/ds112/reference_style_navigation_item/README.md +7 -0
  566. docsentinel-1.0.0/tests/assets/ds112/reference_style_navigation_item/docs/guide.md +3 -0
  567. docsentinel-1.0.0/tests/assets/ds112/required_pages_all_listed/README.md +6 -0
  568. docsentinel-1.0.0/tests/assets/ds112/required_pages_all_listed/docs/api.md +3 -0
  569. docsentinel-1.0.0/tests/assets/ds112/required_pages_all_listed/docs/guide.md +3 -0
  570. docsentinel-1.0.0/tests/assets/ds112/unsafe_parent_navigation/docs/index.md +5 -0
  571. docsentinel-1.0.0/tests/assets/ds112/valid_nested_navigation/README.md +6 -0
  572. docsentinel-1.0.0/tests/assets/ds112/valid_nested_navigation/docs/index.md +5 -0
  573. docsentinel-1.0.0/tests/assets/ds112/valid_nested_navigation/docs/setup.md +3 -0
  574. docsentinel-1.0.0/tests/assets/ds113/alt_text_not_filename/README.md +6 -0
  575. docsentinel-1.0.0/tests/assets/ds113/asset_path_from_subdir/docs/README.md +5 -0
  576. docsentinel-1.0.0/tests/assets/ds113/asset_path_from_subdir/images/plot.svg +1 -0
  577. docsentinel-1.0.0/tests/assets/ds113/asset_reference_definition/README.md +7 -0
  578. docsentinel-1.0.0/tests/assets/ds113/asset_reference_definition/images/chart.svg +1 -0
  579. docsentinel-1.0.0/tests/assets/ds113/asset_symlink_outside/README.md +6 -0
  580. docsentinel-1.0.0/tests/assets/ds113/bad_asset_under_code/README.md +10 -0
  581. docsentinel-1.0.0/tests/assets/ds113/external_image_is_skipped/README.md +9 -0
  582. docsentinel-1.0.0/tests/assets/ds113/html_image_exists/README.md +5 -0
  583. docsentinel-1.0.0/tests/assets/ds113/html_image_exists/images/icon.png +1 -0
  584. docsentinel-1.0.0/tests/assets/ds113/missing_html_image/README.md +5 -0
  585. docsentinel-1.0.0/tests/assets/ds113/missing_markdown_image/README.md +5 -0
  586. docsentinel-1.0.0/tests/assets/ds113/missing_pdf_attachment/README.md +4 -0
  587. docsentinel-1.0.0/tests/assets/ds113/missing_srcset_candidate/README.md +5 -0
  588. docsentinel-1.0.0/tests/assets/ds113/missing_srcset_candidate/images/small.png +1 -0
  589. docsentinel-1.0.0/tests/assets/ds113/multiple_missing_images/README.md +7 -0
  590. docsentinel-1.0.0/tests/assets/ds113/percent_encoded_asset_path/README.md +5 -0
  591. docsentinel-1.0.0/tests/assets/ds113/relative_image_exists/README.md +5 -0
  592. docsentinel-1.0.0/tests/assets/ds113/relative_image_exists/images/logo.svg +1 -0
  593. docsentinel-1.0.0/tests/assets/ds113/template_asset_is_skipped/README.md +8 -0
  594. docsentinel-1.0.0/tests/assets/ds114/case_distinct_ids_default/a.md +7 -0
  595. docsentinel-1.0.0/tests/assets/ds114/case_distinct_ids_default/b.md +7 -0
  596. docsentinel-1.0.0/tests/assets/ds114/casefold_ids_optin/a.md +7 -0
  597. docsentinel-1.0.0/tests/assets/ds114/casefold_ids_optin/b.md +7 -0
  598. docsentinel-1.0.0/tests/assets/ds114/distinct_frontmatter_ids/a.md +7 -0
  599. docsentinel-1.0.0/tests/assets/ds114/distinct_frontmatter_ids/b.md +7 -0
  600. docsentinel-1.0.0/tests/assets/ds114/duplicate_key_one_document/README.md +9 -0
  601. docsentinel-1.0.0/tests/assets/ds114/frontmatter_like_prose/a.md +4 -0
  602. docsentinel-1.0.0/tests/assets/ds114/frontmatter_like_prose/b.md +4 -0
  603. docsentinel-1.0.0/tests/assets/ds114/id_in_code_fence/a.md +7 -0
  604. docsentinel-1.0.0/tests/assets/ds114/id_in_code_fence/b.md +7 -0
  605. docsentinel-1.0.0/tests/assets/ds114/identical_ids_two_docs/a.md +7 -0
  606. docsentinel-1.0.0/tests/assets/ds114/identical_ids_two_docs/b.md +7 -0
  607. docsentinel-1.0.0/tests/assets/ds114/invalid_nested_metadata/README.md +9 -0
  608. docsentinel-1.0.0/tests/assets/ds114/missing_ids_required/a.md +4 -0
  609. docsentinel-1.0.0/tests/assets/ds114/missing_ids_required/b.md +7 -0
  610. docsentinel-1.0.0/tests/assets/ds114/missing_optional_ids/a.md +3 -0
  611. docsentinel-1.0.0/tests/assets/ds114/missing_optional_ids/b.md +3 -0
  612. docsentinel-1.0.0/tests/assets/ds114/same_h1_distinct_ids/a.md +7 -0
  613. docsentinel-1.0.0/tests/assets/ds114/same_h1_distinct_ids/b.md +7 -0
  614. docsentinel-1.0.0/tests/assets/ds114/three_duplicate_document_ids/a.md +7 -0
  615. docsentinel-1.0.0/tests/assets/ds114/three_duplicate_document_ids/b.md +7 -0
  616. docsentinel-1.0.0/tests/assets/ds114/three_duplicate_document_ids/c.md +7 -0
  617. docsentinel-1.0.0/tests/assets/ds114/unicode_normalized_ids/a.md +7 -0
  618. docsentinel-1.0.0/tests/assets/ds114/unicode_normalized_ids/b.md +7 -0
  619. docsentinel-1.0.0/tests/assets/ds114/whitespace_normalized_ids/a.md +7 -0
  620. docsentinel-1.0.0/tests/assets/ds114/whitespace_normalized_ids/b.md +7 -0
  621. docsentinel-1.0.0/tests/assets/ds115/deprecated_case_sensitive/README.md +4 -0
  622. docsentinel-1.0.0/tests/assets/ds115/deprecated_case_sensitive/mapping.toml +6 -0
  623. docsentinel-1.0.0/tests/assets/ds115/deprecated_casefolded_optin/README.md +4 -0
  624. docsentinel-1.0.0/tests/assets/ds115/deprecated_casefolded_optin/mapping.toml +6 -0
  625. docsentinel-1.0.0/tests/assets/ds115/deprecated_identifier_code_span/README.md +4 -0
  626. docsentinel-1.0.0/tests/assets/ds115/deprecated_identifier_code_span/mapping.toml +6 -0
  627. docsentinel-1.0.0/tests/assets/ds115/deprecated_in_fenced_example/README.md +7 -0
  628. docsentinel-1.0.0/tests/assets/ds115/deprecated_in_fenced_example/mapping.toml +6 -0
  629. docsentinel-1.0.0/tests/assets/ds115/deprecated_local_link_path/README.md +4 -0
  630. docsentinel-1.0.0/tests/assets/ds115/deprecated_local_link_path/mapping.toml +6 -0
  631. docsentinel-1.0.0/tests/assets/ds115/deprecated_module_in_prose/README.md +4 -0
  632. docsentinel-1.0.0/tests/assets/ds115/deprecated_module_in_prose/mapping.toml +6 -0
  633. docsentinel-1.0.0/tests/assets/ds115/historical_archive_exempt/archive/README.md +4 -0
  634. docsentinel-1.0.0/tests/assets/ds115/historical_archive_exempt/mapping.toml +7 -0
  635. docsentinel-1.0.0/tests/assets/ds115/invalid_mapping_duplicate_key/README.md +4 -0
  636. docsentinel-1.0.0/tests/assets/ds115/invalid_mapping_duplicate_key/mapping.toml +11 -0
  637. docsentinel-1.0.0/tests/assets/ds115/mapping_path_outside_root/README.md +4 -0
  638. docsentinel-1.0.0/tests/assets/ds115/multiple_occurrences_same_line/README.md +3 -0
  639. docsentinel-1.0.0/tests/assets/ds115/multiple_occurrences_same_line/mapping.toml +6 -0
  640. docsentinel-1.0.0/tests/assets/ds115/obsolete_name_with_punctuation/README.md +3 -0
  641. docsentinel-1.0.0/tests/assets/ds115/obsolete_name_with_punctuation/mapping.toml +6 -0
  642. docsentinel-1.0.0/tests/assets/ds115/only_current_module_name/README.md +4 -0
  643. docsentinel-1.0.0/tests/assets/ds115/only_current_module_name/mapping.toml +6 -0
  644. docsentinel-1.0.0/tests/assets/ds115/substring_of_longer_name/README.md +4 -0
  645. docsentinel-1.0.0/tests/assets/ds115/substring_of_longer_name/mapping.toml +6 -0
  646. docsentinel-1.0.0/tests/assets/ds115/unconfigured_mapping_is_inert/README.md +4 -0
  647. docsentinel-1.0.0/tests/assets/ds116/absolute_rooted_backslash/README.md +3 -0
  648. docsentinel-1.0.0/tests/assets/ds116/angle_bracket_destination_escape/README.md +3 -0
  649. docsentinel-1.0.0/tests/assets/ds116/encoded_double_decode_attack/README.md +3 -0
  650. docsentinel-1.0.0/tests/assets/ds116/encoded_separator_escape/README.md +3 -0
  651. docsentinel-1.0.0/tests/assets/ds116/entity_encoded_destination_escape/README.md +3 -0
  652. docsentinel-1.0.0/tests/assets/ds116/external_https_url/README.md +3 -0
  653. docsentinel-1.0.0/tests/assets/ds116/html_anchor_href_escape/README.md +3 -0
  654. docsentinel-1.0.0/tests/assets/ds116/html_img_srcset_escape/README.md +3 -0
  655. docsentinel-1.0.0/tests/assets/ds116/nested_image_link_escape/README.md +3 -0
  656. docsentinel-1.0.0/tests/assets/ds116/nested_parent_within_root/docs/README.md +3 -0
  657. docsentinel-1.0.0/tests/assets/ds116/nested_parent_within_root/guide.md +3 -0
  658. docsentinel-1.0.0/tests/assets/ds116/parent_escape_from_root/README.md +3 -0
  659. docsentinel-1.0.0/tests/assets/ds116/percent_encoded_parent_escape/README.md +3 -0
  660. docsentinel-1.0.0/tests/assets/ds116/quoted_refdef_escape/README.md +5 -0
  661. docsentinel-1.0.0/tests/assets/ds116/root_relative_local_link/README.md +3 -0
  662. docsentinel-1.0.0/tests/assets/ds116/root_relative_local_link/docs/guide.md +3 -0
  663. docsentinel-1.0.0/tests/assets/ds116/safe_parent_link_subdir/docs/deep/README.md +3 -0
  664. docsentinel-1.0.0/tests/assets/ds116/safe_parent_link_subdir/docs/guide.md +3 -0
  665. docsentinel-1.0.0/tests/assets/ds116/symlink_escape_is_rejected/README.md +3 -0
  666. docsentinel-1.0.0/tests/assets/ds116/template_link_literal_skipped/README.md +3 -0
  667. docsentinel-1.0.0/tests/assets/ds116/unsafe_code_span_target/README.md +3 -0
  668. docsentinel-1.0.0/tests/assets/ds116/unsafe_image_target/README.md +3 -0
  669. docsentinel-1.0.0/tests/assets/ds116/windows_absolute_drive_path/README.md +3 -0
  670. docsentinel-1.0.0/tests/assets/ds116/windows_unc_network_path/README.md +3 -0
  671. docsentinel-1.0.0/tests/assets/ds117/aligned_three_column_table/README.md +5 -0
  672. docsentinel-1.0.0/tests/assets/ds117/code_span_contains_pipe/README.md +5 -0
  673. docsentinel-1.0.0/tests/assets/ds117/crlf_table_line_positions/README.md +5 -0
  674. docsentinel-1.0.0/tests/assets/ds117/empty_cell_is_valid/README.md +5 -0
  675. docsentinel-1.0.0/tests/assets/ds117/escaped_pipe_cell_text/README.md +5 -0
  676. docsentinel-1.0.0/tests/assets/ds117/extra_body_cell/README.md +5 -0
  677. docsentinel-1.0.0/tests/assets/ds117/html_table_not_parsed/README.md +7 -0
  678. docsentinel-1.0.0/tests/assets/ds117/invalid_alignment_marker/README.md +5 -0
  679. docsentinel-1.0.0/tests/assets/ds117/missing_body_cell/README.md +5 -0
  680. docsentinel-1.0.0/tests/assets/ds117/missing_delimiter_cell/README.md +5 -0
  681. docsentinel-1.0.0/tests/assets/ds117/multiple_broken_tables/README.md +9 -0
  682. docsentinel-1.0.0/tests/assets/ds117/optional_outer_pipes/README.md +6 -0
  683. docsentinel-1.0.0/tests/assets/ds117/pipes_in_regular_paragraph/README.md +5 -0
  684. docsentinel-1.0.0/tests/assets/ds117/table_inside_code_fence/README.md +9 -0
  685. docsentinel-1.0.0/tests/assets/ds117/valid_two_column_table/README.md +6 -0
  686. docsentinel-1.0.0/tests/assets/ds118/allowed_numeric_adr_prefix/docs/adr/0001-fast-path.md +3 -0
  687. docsentinel-1.0.0/tests/assets/ds118/camelcase_path_diagnostic/docs/apiClient.md +3 -0
  688. docsentinel-1.0.0/tests/assets/ds118/deep_nested_clean_paths/docs/user-guides/advanced-setup.md +3 -0
  689. docsentinel-1.0.0/tests/assets/ds118/excluded_vendor_directory/vendor/SomeDoc.md +3 -0
  690. docsentinel-1.0.0/tests/assets/ds118/hyphen_snake_violation/docs/quick-start.md +3 -0
  691. docsentinel-1.0.0/tests/assets/ds118/lower_kebab_docs_paths/README.md +3 -0
  692. docsentinel-1.0.0/tests/assets/ds118/lower_kebab_docs_paths/docs/getting-started.md +3 -0
  693. docsentinel-1.0.0/tests/assets/ds118/multiple_bad_components/BadDocs/Quick_Start.md +3 -0
  694. docsentinel-1.0.0/tests/assets/ds118/naming_disabled_is_inert/docs/Getting Started.md +3 -0
  695. docsentinel-1.0.0/tests/assets/ds118/readme_index_exemptions/README.md +3 -0
  696. docsentinel-1.0.0/tests/assets/ds118/readme_index_exemptions/docs/index.md +3 -0
  697. docsentinel-1.0.0/tests/assets/ds118/spaces_in_filename_violation/docs/Quick Start.md +3 -0
  698. docsentinel-1.0.0/tests/assets/ds118/underscore_kebab_violation/docs/quick_start.md +3 -0
  699. docsentinel-1.0.0/tests/assets/ds118/unicode_filename_policy/docs/caf/303/251-guide.md +3 -0
  700. docsentinel-1.0.0/tests/assets/ds118/uppercase_directory_violation/Docs/README.md +3 -0
  701. docsentinel-1.0.0/tests/assets/ds118/uppercase_filename_violation/docs/GettingStarted.md +3 -0
  702. docsentinel-1.0.0/tests/assets/ds201/clean_document/clean.md +1 -0
  703. docsentinel-1.0.0/tests/assets/ds201/dense_document/dense.md +1 -0
  704. docsentinel-1.0.0/tests/assets/ds201/mixed_documents/clean.md +1 -0
  705. docsentinel-1.0.0/tests/assets/ds201/mixed_documents/dense.md +1 -0
  706. docsentinel-1.0.0/tests/assets/ds201/mixed_documents/dense.txt +1 -0
  707. docsentinel-1.0.0/tests/assets/ds201/short_dense_document/short.md +1 -0
  708. docsentinel-1.0.0/tests/assets/ds202/corpus_all_code/code_only.md +4 -0
  709. docsentinel-1.0.0/tests/assets/ds202/corpus_cache_busts_on_change/doc1.md +1 -0
  710. docsentinel-1.0.0/tests/assets/ds202/corpus_cache_busts_on_change/doc2.md +1 -0
  711. docsentinel-1.0.0/tests/assets/ds202/corpus_cached_for_identical_inputs/doc.md +2 -0
  712. docsentinel-1.0.0/tests/assets/ds202/corpus_deterministic/a.md +2 -0
  713. docsentinel-1.0.0/tests/assets/ds202/corpus_deterministic/b.md +2 -0
  714. docsentinel-1.0.0/tests/assets/ds202/corpus_fits_once/doc.md +1 -0
  715. docsentinel-1.0.0/tests/assets/ds202/corpus_iter_chunks/chunks.md +5 -0
  716. docsentinel-1.0.0/tests/assets/ds202/corpus_multi_document/arch.md +2 -0
  717. docsentinel-1.0.0/tests/assets/ds202/corpus_multi_document/config.md +2 -0
  718. docsentinel-1.0.0/tests/assets/ds202/corpus_single_document/overview.md +5 -0
  719. docsentinel-1.0.0/tests/assets/ds202/distinct_paragraphs/a.md +1 -0
  720. docsentinel-1.0.0/tests/assets/ds202/distinct_paragraphs/b.md +1 -0
  721. docsentinel-1.0.0/tests/assets/ds202/duplicate_tool_paragraph/a.md +1 -0
  722. docsentinel-1.0.0/tests/assets/ds202/duplicate_tool_paragraph/b.md +1 -0
  723. docsentinel-1.0.0/tests/assets/ds202/identical_paragraphs/a.md +1 -0
  724. docsentinel-1.0.0/tests/assets/ds202/identical_paragraphs/b.md +1 -0
  725. docsentinel-1.0.0/tests/assets/ds202/near_duplicate_paragraphs/a.md +1 -0
  726. docsentinel-1.0.0/tests/assets/ds202/near_duplicate_paragraphs/b.md +1 -0
  727. docsentinel-1.0.0/tests/assets/ds202/non_markdown_document/notes.txt +1 -0
  728. docsentinel-1.0.0/tests/assets/ds202/pair_reported_once/a.md +1 -0
  729. docsentinel-1.0.0/tests/assets/ds202/pair_reported_once/b.md +1 -0
  730. docsentinel-1.0.0/tests/assets/ds202/pair_reported_once/c.md +1 -0
  731. docsentinel-1.0.0/tests/assets/ds202/single_chunk_corpus/single.md +1 -0
  732. docsentinel-1.0.0/tests/assets/ds202/within_document_duplication/single.md +7 -0
  733. docsentinel-1.0.0/tests/assets/ds203/borderline_paragraph/a.md +1 -0
  734. docsentinel-1.0.0/tests/assets/ds203/borderline_paragraph/b.md +1 -0
  735. docsentinel-1.0.0/tests/assets/ds203/borderline_paragraph/borderline.md +1 -0
  736. docsentinel-1.0.0/tests/assets/ds203/filler_paragraph/a.md +1 -0
  737. docsentinel-1.0.0/tests/assets/ds203/filler_paragraph/b.md +1 -0
  738. docsentinel-1.0.0/tests/assets/ds203/filler_paragraph/filler.md +1 -0
  739. docsentinel-1.0.0/tests/assets/ds203/filler_with_distinct_paragraph/c.md +1 -0
  740. docsentinel-1.0.0/tests/assets/ds203/filler_with_distinct_paragraph/filler.md +1 -0
  741. docsentinel-1.0.0/tests/assets/ds203/informative_paragraphs/a.md +1 -0
  742. docsentinel-1.0.0/tests/assets/ds203/informative_paragraphs/b.md +1 -0
  743. docsentinel-1.0.0/tests/assets/ds203/keyword_list/a.md +1 -0
  744. docsentinel-1.0.0/tests/assets/ds203/keyword_list/b.md +1 -0
  745. docsentinel-1.0.0/tests/assets/ds203/keyword_list/keywords.md +1 -0
  746. docsentinel-1.0.0/tests/assets/ds203/non_markdown_document/notes.txt +1 -0
  747. docsentinel-1.0.0/tests/assets/ds203/single_chunk_corpus/single.md +1 -0
  748. docsentinel-1.0.0/tests/assets/ds204/calculate_extra_param/src/bad.py +8 -0
  749. docsentinel-1.0.0/tests/assets/ds204/calculate_extra_param_in_package/src/pkg/bad.py +8 -0
  750. docsentinel-1.0.0/tests/assets/ds204/clean_add_function/src/math.py +8 -0
  751. docsentinel-1.0.0/tests/assets/ds204/compute_nonexistent_param/src/pkg/bad.py +8 -0
  752. docsentinel-1.0.0/tests/assets/ds204/docsig_paths_selection/src/bad_src.py +8 -0
  753. docsentinel-1.0.0/tests/assets/ds204/markdown_documents_ignored/src/bad.py +8 -0
  754. docsentinel-1.0.0/tests/assets/ds204/param_does_not_exist/src/calc.py +8 -0
  755. docsentinel-1.0.0/tests/assets/ds204/undocumented_param/src/process.py +7 -0
  756. docsentinel-1.0.0/tests/assets/ds204/well_documented_function/src/add.py +8 -0
  757. docsentinel-1.0.0/tests/assets/ds301/consistent_numbers/a.md +1 -0
  758. docsentinel-1.0.0/tests/assets/ds301/consistent_numbers/b.md +1 -0
  759. docsentinel-1.0.0/tests/assets/ds301/multi_document_corpus/a.md +1 -0
  760. docsentinel-1.0.0/tests/assets/ds301/multi_document_corpus/b.md +1 -0
  761. docsentinel-1.0.0/tests/assets/ds301/multi_document_corpus/c.md +1 -0
  762. docsentinel-1.0.0/tests/assets/ds301/multi_paragraph_claims/multi.md +4 -0
  763. docsentinel-1.0.0/tests/assets/ds301/no_triples/empty.md +1 -0
  764. docsentinel-1.0.0/tests/assets/ds301/non_markdown_documents/a.txt +1 -0
  765. docsentinel-1.0.0/tests/assets/ds301/non_markdown_documents/b.txt +1 -0
  766. docsentinel-1.0.0/tests/assets/ds301/number_contradiction/a.md +1 -0
  767. docsentinel-1.0.0/tests/assets/ds301/number_contradiction/b.md +1 -0
  768. docsentinel-1.0.0/tests/assets/ds301/simple_svo_claim/doc.md +1 -0
  769. docsentinel-1.0.0/tests/assets/ds301/single_claim_document/a.md +1 -0
  770. docsentinel-1.0.0/tests/conftest.py +92 -0
  771. docsentinel-1.0.0/tests/flake8_lint/test_project_lint.py +38 -0
  772. docsentinel-1.0.0/tests/integration/__init__.py +0 -0
  773. docsentinel-1.0.0/tests/integration/test_adversarial_runtime_cases.py +254 -0
  774. docsentinel-1.0.0/tests/integration/test_baseline_ds101_ds102.py +402 -0
  775. docsentinel-1.0.0/tests/integration/test_comment_masking_evasion_ds116_smoke.py +160 -0
  776. docsentinel-1.0.0/tests/integration/test_corpus_model_ds202.py +268 -0
  777. docsentinel-1.0.0/tests/integration/test_deep_profile_end_to_end_ds301.py +219 -0
  778. docsentinel-1.0.0/tests/integration/test_detectors_anchor_identity_and_collisions_ds104.py +1054 -0
  779. docsentinel-1.0.0/tests/integration/test_detectors_code_fence_language_policy_ds110.py +1416 -0
  780. docsentinel-1.0.0/tests/integration/test_detectors_comments_ds102.py +424 -0
  781. docsentinel-1.0.0/tests/integration/test_detectors_complexity_ds201.py +201 -0
  782. docsentinel-1.0.0/tests/integration/test_detectors_contentless_section_detection_ds106.py +1230 -0
  783. docsentinel-1.0.0/tests/integration/test_detectors_contradictions_ds301.py +90 -0
  784. docsentinel-1.0.0/tests/integration/test_detectors_declared_navigation_integrity_ds112.py +1732 -0
  785. docsentinel-1.0.0/tests/integration/test_detectors_deprecated_reference_and_terminology_ds115.py +1863 -0
  786. docsentinel-1.0.0/tests/integration/test_detectors_document_identity_uniqueness_ds114.py +1513 -0
  787. docsentinel-1.0.0/tests/integration/test_detectors_documentation_path_naming_policy_ds118.py +1567 -0
  788. docsentinel-1.0.0/tests/integration/test_detectors_duplication_ds202.py +230 -0
  789. docsentinel-1.0.0/tests/integration/test_detectors_fenced_code_boundary_validation_ds109.py +709 -0
  790. docsentinel-1.0.0/tests/integration/test_detectors_heading_hierarchy_validation_ds105.py +943 -0
  791. docsentinel-1.0.0/tests/integration/test_detectors_links_ds101.py +754 -0
  792. docsentinel-1.0.0/tests/integration/test_detectors_low_information_ds203.py +164 -0
  793. docsentinel-1.0.0/tests/integration/test_detectors_missing_local_media_assets_ds113.py +1529 -0
  794. docsentinel-1.0.0/tests/integration/test_detectors_path_boundary_renderer_evasions_ds116.py +215 -0
  795. docsentinel-1.0.0/tests/integration/test_detectors_paths_ds103.py +665 -0
  796. docsentinel-1.0.0/tests/integration/test_detectors_pipe_table_structural_validation_ds117.py +1352 -0
  797. docsentinel-1.0.0/tests/integration/test_detectors_reference_definition_integrity_ds108.py +1051 -0
  798. docsentinel-1.0.0/tests/integration/test_detectors_repository_root_path_boundaries_ds116.py +1372 -0
  799. docsentinel-1.0.0/tests/integration/test_detectors_signatures_ds204.py +172 -0
  800. docsentinel-1.0.0/tests/integration/test_fast_profile_end_to_end_ds101_ds102_ds103.py +268 -0
  801. docsentinel-1.0.0/tests/integration/test_import_isolation.py +215 -0
  802. docsentinel-1.0.0/tests/integration/test_milestone_0005_final_audit.py +931 -0
  803. docsentinel-1.0.0/tests/integration/test_milestone_0005_fixture_catalog.py +287 -0
  804. docsentinel-1.0.0/tests/integration/test_oracle_parity_ds101_ds103.py +228 -0
  805. docsentinel-1.0.0/tests/integration/test_pre_commit_hook_manifest_ds101_ds102.py +294 -0
  806. docsentinel-1.0.0/tests/integration/test_reporter_hostile_filename.py +146 -0
  807. docsentinel-1.0.0/tests/integration/test_reporting_ds101.py +69 -0
  808. docsentinel-1.0.0/tests/integration/test_scan.py +1714 -0
  809. docsentinel-1.0.0/tests/integration/test_standard_profile_end_to_end_ds201_ds202_ds203_ds204.py +554 -0
  810. docsentinel-1.0.0/tests/integration/test_statistical_size_limits_ds201_ds202_ds203.py +118 -0
  811. docsentinel-1.0.0/tests/integration/test_triples_ds301.py +103 -0
  812. docsentinel-1.0.0/tests/milestone_0005_manifest.py +290 -0
  813. docsentinel-1.0.0/tests/mock/__init__.py +0 -0
  814. docsentinel-1.0.0/tests/mock/test_deep_support.py +438 -0
  815. docsentinel-1.0.0/tests/mock/test_detectors_assets_oracle.py +253 -0
  816. docsentinel-1.0.0/tests/mock/test_detectors_deprecated_oracle.py +295 -0
  817. docsentinel-1.0.0/tests/mock/test_detectors_document_ids_oracle.py +276 -0
  818. docsentinel-1.0.0/tests/mock/test_detectors_documentation_naming_oracle.py +134 -0
  819. docsentinel-1.0.0/tests/mock/test_detectors_low_information.py +51 -0
  820. docsentinel-1.0.0/tests/mock/test_detectors_navigation_oracle.py +290 -0
  821. docsentinel-1.0.0/tests/mock/test_detectors_paths.py +68 -0
  822. docsentinel-1.0.0/tests/mock/test_markdown_blocks_isolation.py +102 -0
  823. docsentinel-1.0.0/tests/mock/test_path_boundaries_oracle.py +246 -0
  824. docsentinel-1.0.0/tests/mock/test_standard_loader.py +283 -0
  825. docsentinel-1.0.0/tests/reference/README.md +21 -0
  826. docsentinel-1.0.0/tests/reference/ds101_links_pre_story_11.py.txt +168 -0
  827. docsentinel-1.0.0/tests/reference/ds103_paths_pre_story_11.py.txt +143 -0
  828. docsentinel-1.0.0/tests/timing_helpers.py +303 -0
  829. docsentinel-1.0.0/tests/unit/__init__.py +0 -0
  830. docsentinel-1.0.0/tests/unit/test_asset_helpers.py +235 -0
  831. docsentinel-1.0.0/tests/unit/test_baseline.py +355 -0
  832. docsentinel-1.0.0/tests/unit/test_code_discovery.py +384 -0
  833. docsentinel-1.0.0/tests/unit/test_config.py +995 -0
  834. docsentinel-1.0.0/tests/unit/test_config_policy_options.py +508 -0
  835. docsentinel-1.0.0/tests/unit/test_config_statistical_size_limits.py +169 -0
  836. docsentinel-1.0.0/tests/unit/test_detectors_anchors.py +451 -0
  837. docsentinel-1.0.0/tests/unit/test_detectors_assets.py +964 -0
  838. docsentinel-1.0.0/tests/unit/test_detectors_comments.py +134 -0
  839. docsentinel-1.0.0/tests/unit/test_detectors_complexity.py +157 -0
  840. docsentinel-1.0.0/tests/unit/test_detectors_contradictions.py +282 -0
  841. docsentinel-1.0.0/tests/unit/test_detectors_corpus.py +360 -0
  842. docsentinel-1.0.0/tests/unit/test_detectors_deprecated.py +1222 -0
  843. docsentinel-1.0.0/tests/unit/test_detectors_document_ids.py +1327 -0
  844. docsentinel-1.0.0/tests/unit/test_detectors_documentation_naming.py +878 -0
  845. docsentinel-1.0.0/tests/unit/test_detectors_duplication.py +95 -0
  846. docsentinel-1.0.0/tests/unit/test_detectors_fence_languages.py +445 -0
  847. docsentinel-1.0.0/tests/unit/test_detectors_fence_languages_adversarial.py +183 -0
  848. docsentinel-1.0.0/tests/unit/test_detectors_fences.py +406 -0
  849. docsentinel-1.0.0/tests/unit/test_detectors_headings.py +487 -0
  850. docsentinel-1.0.0/tests/unit/test_detectors_links.py +214 -0
  851. docsentinel-1.0.0/tests/unit/test_detectors_low_information.py +107 -0
  852. docsentinel-1.0.0/tests/unit/test_detectors_navigation.py +832 -0
  853. docsentinel-1.0.0/tests/unit/test_detectors_path_boundaries.py +632 -0
  854. docsentinel-1.0.0/tests/unit/test_detectors_path_boundaries_adversarial.py +167 -0
  855. docsentinel-1.0.0/tests/unit/test_detectors_paths.py +299 -0
  856. docsentinel-1.0.0/tests/unit/test_detectors_references.py +936 -0
  857. docsentinel-1.0.0/tests/unit/test_detectors_sections.py +813 -0
  858. docsentinel-1.0.0/tests/unit/test_detectors_sections_adversarial.py +146 -0
  859. docsentinel-1.0.0/tests/unit/test_detectors_signatures.py +172 -0
  860. docsentinel-1.0.0/tests/unit/test_detectors_statistical_size_limits.py +262 -0
  861. docsentinel-1.0.0/tests/unit/test_detectors_tables.py +614 -0
  862. docsentinel-1.0.0/tests/unit/test_detectors_tables_adversarial.py +248 -0
  863. docsentinel-1.0.0/tests/unit/test_detectors_triples.py +64 -0
  864. docsentinel-1.0.0/tests/unit/test_engine_analyzer_dispatch.py +221 -0
  865. docsentinel-1.0.0/tests/unit/test_errors.py +83 -0
  866. docsentinel-1.0.0/tests/unit/test_markdown_blocks.py +963 -0
  867. docsentinel-1.0.0/tests/unit/test_markdown_blocks_adversarial.py +301 -0
  868. docsentinel-1.0.0/tests/unit/test_markdown_blocks_code_span_parity.py +298 -0
  869. docsentinel-1.0.0/tests/unit/test_markdown_blocks_comment_masking.py +434 -0
  870. docsentinel-1.0.0/tests/unit/test_markdown_blocks_html_and_destinations.py +330 -0
  871. docsentinel-1.0.0/tests/unit/test_pytest_plugin.py +26 -0
  872. docsentinel-1.0.0/tests/unit/test_reporting.py +653 -0
  873. docsentinel-1.0.0/tests/unit/test_reporting_control_characters.py +281 -0
  874. docsentinel-1.0.0/tests/unit/test_resolver_detector_compat.py +148 -0
  875. docsentinel-1.0.0/tests/unit/test_rules.py +303 -0
  876. docsentinel-1.0.0/tests/unit/test_test_collection.py +190 -0
  877. docsentinel-1.0.0/tests/unit/test_timing_helpers.py +287 -0
  878. docsentinel-1.0.0/uv.lock +1960 -0
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: agent-orchestrator
3
+ description: Use this agent as the cross-agent coordinator for multi-step work that spans several specialists (e.g. "ticket → merged PR"). Use when a request needs design, code, tests, review, and docs in sequence. Plans the sequence, delegates to each agent in order, and syntheses results. Does not write product code itself.
4
+ model: claude-opus-4-8
5
+ tools: Read, Grep, Glob, Bash, TodoWrite, Write
6
+ allowed-tools: Read, Grep, Glob, Bash, TodoWrite, Write
7
+ ---
8
+
9
+ You are the **Orchestrator** for the DocSentinel dev fleet. You decompose a large
10
+ request into an ordered plan and route each step to the right specialist agent,
11
+ keeping the human in the loop at the decision points.
12
+
13
+ ## The fleet you command
14
+
15
+ This is the standing Python-stack dev fleet - every one of these agents is present in the repo:
16
+
17
+ | Agent | Use for | Model |
18
+ |-----------------------|------------------------------------------|--------|
19
+ | `app-architect` | design, ADRs, contracts, tech-debt | opus |
20
+ | `background-reviewer` | async dep/secret/perf/license audits | sonnet |
21
+ | `docs-updater` | docs, runbooks, OpenAPI, docstrings | sonnet |
22
+ | `docs-writer` | docs, runbooks, OpenAPI, docstrings | sonnet |
23
+ | `feature-reviewer` | correctness/security/domain PR review | sonnet |
24
+ | `python-expert` | implementation, fixes, refactors | opus |
25
+ | `security-auditor` | threat models, merge-blocking sec review | opus |
26
+ | `testing-expert` | tests, coverage, test-gap | sonnet |
27
+
28
+
29
+ ## Canonical orchestration: ticket → merged PR
30
+
31
+ 1. **Design** - if non-trivial, `app-architect` writes/updates an ADR. Gate: human approves the ADR.
32
+ 2. **Implement** - `python-expert` creates a feature branch and implements against the ADR; runs tests before/after.
33
+ 3. **Test** - `testing-expert` writes unit + integration tests and reports coverage delta.
34
+ 4. **Security** - `security-auditor` threat-models the change (only if it touches auth/secrets/integrations/untrusted-input ingestion). CRITICAL ⇒ stop.
35
+ 5. **Review** - `feature-reviewer` issues LGTM / REQUEST_CHANGES. Loop back to `python-expert` until LGTM.
36
+ 6. **Docs write** - `docs-writer` writes new docs/runbooks/OpenAPI/docstrings.
37
+ 7. **Docs update** - `docs-updater` updates existing docs/OpenAPI/docstrings.
38
+ 8. **Land** - open a PR (never push to `master`/`master`); summarize the trail.
39
+
40
+ ## Rules
41
+
42
+ - Run independent steps in parallel (e.g. security review and testing together); serialize only where there is a real dependency.
43
+ - Skip steps that don't apply and say why.
44
+ - Stop and ask the human for: ADR approval, any CRITICAL/BLOCK security finding, and before any production-affecting action.
45
+ - You coordinate; you do not edit `src/` or `test/`. Keep a running plan with `TodoWrite` and end with a concise status of every delegated step.
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: app-architect
3
+ description: Use this agent as the high-level design authority for DocSentinel. Use for system design decisions, ADR authoring, defining interface contracts between components, and tech-debt triage. Does NOT write implementation code. Delegate the actual coding to python-expert once an ADR or contract is agreed.
4
+ model: claude-opus-4-8
5
+ tools: Read, Grep, Glob, Write, Edit, WebFetch, WebSearch, TodoWrite
6
+ allowed-tools: Read, Grep, Glob, Write, Edit, WebFetch, WebSearch, TodoWrite
7
+ ---
8
+
9
+ You are the **Architect** for DocSentinel, DocSentinel is a deterministic-first documentation QA project, looking for duplicated text and facts, fact contradictions, low-information facts and high-complexity text..
10
+
11
+ ## Domain model you must hold in your context
12
+
13
+ DocSentinel is at **M0, an inventory scaffold only**. It discovers Markdown files but no detectors exist yet. An empty findings list never means the docs were validated. Every surface in the package `src/docsentinel/` goes through one engine:
14
+
15
+ - **Config layer**: `config.py`. `load_config(root, path=None)` reads `docsentinel.toml` with `tomllib`. The file may contain only a `[docsentinel]` table, whose keys are `include`, `exclude` and `profile`. It returns a frozen `Config(include, exclude, profile)`. Defaults are `("*.md", "**/*.md")`, `(".git", ".venv", "node_modules")` and `"fast"`. Unknown keys, non-list patterns and invalid profiles raise `ConfigError` (a `ValueError` subclass). A missing default file falls back to `Config()`.
16
+ - **Discovery layer**: `discovery.py`. `discover(root, config)` uses `os.walk(topdown=True)`. It prunes symlinked directories and any directory whose name matches an `exclude` pattern. It skips symlinked files and matches relative POSIX paths with `fnmatchcase`. Walk errors propagate through `onerror`. It returns a `tuple[Document, ...]` sorted by path.
17
+ - **Engine**: `engine.py`. `scan(root=".", *, config=None) -> ScanResult` is the single orchestration point.
18
+ - Single-file targets bypass include/exclude matching. Symlinked file targets are rejected with `ValueError`.
19
+ - It runs every entry in the `ANALYZERS: dict[str, Analyzer]` registry, where `Analyzer = Callable[[Path, tuple[Document, ...]], tuple[Finding, ...]]`. This registry is the only pluggable extension point. It is empty in M0.
20
+ - For the `standard` and `deep` profiles it fills `pending` with a fixed "not implemented in M0" reason.
21
+ - **Data contracts**: `models.py`. All are frozen dataclasses:
22
+ - `Document(path, bytes)`
23
+ - `Finding(rule, path, message, severity="warning")`
24
+ - `ScanResult(profile, documents, findings, enabled_rules, pending, notice)`. `enabled_rules` is `tuple(ANALYZERS)`, and `notice` states that this is an inventory only.
25
+ - `ScanResult` is the public contract shared by every consumer. `reporting.render(result, "text"|"json")` serializes it, and JSON uses `dataclasses.asdict`.
26
+ - **Entry points**. All of them call `engine.scan`:
27
+ - The `docsentinel` console script (`cli.main`, argparse) has four subcommands:
28
+ - `scan [root] --config --profile --format`
29
+ - `init`, which creates `docsentinel.toml` with mode `"x"` and never overwrites
30
+ - `rules`
31
+ - `doctor`
32
+ - The public library API in `__init__.py` (`scan`, `load_config`, `Config`, `ConfigError`, `Document`, `Finding`, `ScanResult`).
33
+ - The opt-in pytest plugin `pytest_plugin.py`, enabled with `-p docsentinel.pytest_plugin`. It exposes a `docsentinel_scan` fixture that scans `Path.cwd()` and asserts nothing.
34
+ - The pre-commit hook `docsentinel-fast` in `.pre-commit-hooks.yaml`, which runs `docsentinel scan --profile fast`.
35
+ - **CLI exit-code contract**: `0` means inventory succeeded, not that detectors passed. `1` is reserved for findings. `2` means a config or scan failure (`ConfigError`, `ValueError` or `OSError`).
36
+ - **Profile boundaries**:
37
+ - `fast`: planned structural and reference checks.
38
+ - `standard`: planned corpus and mechanical checks, such as duplicated text and facts.
39
+ - `deep`: planned semantic integrations that are explicitly enabled.
40
+ - None of these checks exist yet. No network or model calls happen. `docs/architecture/README.md` records these boundaries.
41
+ - **Dependencies**: `flakeforge==1.1.0` and `release-saga==1.2.0` are pinned in `pyproject.toml` but not yet imported anywhere.
42
+
43
+ ## What you produce
44
+
45
+ 1. **ADRs** in `docs/adr/` using the **MADR** template (Title, Status, Context and Problem Statement, Decision Drivers, Considered Options, Decision Outcome with consequences, Pros/Cons per option). File name: `NNNN-kebab-title.md` with a zero-padded sequence number.
46
+ 2. **Interface contracts**: precise abstract base signatures, schema definitions, and event contracts - described, not implemented.
47
+ 3. **Tech-debt triage**: a ranked list with impact/effort and recommended sequencing.
48
+
49
+ ## Hard rules
50
+
51
+ - **You never write implementation code.** You may write/edit Markdown in `docs/` and propose signatures inside ADRs. Hand implementation to `python-expert`.
52
+ - Respect project conventions: strictly follow `@docs/dev/python_coding_standard.md`, enforce the repository's typing conventions and use ruff lint.
53
+ - No design may cause secrets or PII to be logged or persisted unredacted.
54
+ - Every cross-component contract change must name the affected components and the migration path.
55
+
56
+ ## Workflow
57
+
58
+ 1. Read the relevant code and existing ADRs (`docs/adr/`) before deciding.
59
+ 2. State the problem, drivers, and 2-4 real options with honest trade-offs.
60
+ 3. Recommend one, with consequences (including what gets harder).
61
+ 4. Write the ADR (use the `/adr-write` skill to scaffold). Mark it `Proposed`.
62
+ 5. List the follow-up coding tasks for `python-expert` and tests for `testing-expert`.
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: background-reviewer
3
+ description: Use this agent as the asynchronous deep reviewer that runs off the hot path. Use for routine code review, dependency audits, secret scanning across new files, performance-regression hunting, and license-compatibility checks. Writes findings to docs/reviews/. Not a merge gate - produces a durable report for the team.
4
+ model: claude-sonnet-4-6
5
+ tools: Read, Grep, Glob, Bash, Write, WebFetch, WebSearch
6
+ allowed-tools: Read, Grep, Glob, Bash, Write, WebFetch, WebSearch
7
+ ---
8
+
9
+ You are the **Background Reviewer** for DocSentinel. You run independently of any single PR and produce a written report rather than a blocking verdict.
10
+
11
+ ## Tasks you perform
12
+
13
+ 1. **Code review**: check for coding style issues, strictly follow `@docs/dev/python_coding_standard.md`, enforce the repository's typing conventions and use ruff lint, RAII via context managers, and your project's log-redaction mechanism (if any) on all loggers.
14
+ 2. **Dependency audit**: run `pip-audit` (or `uv run pip-audit`) and inspect `pyproject.toml`/`uv.lock` for known CVEs and outdated pins. Cross-check advisories with `WebSearch`/`WebFetch` when severity is unclear.
15
+ 3. **Secret scanning**: run `python .claude/hooks/secret_scan.py <files>` across newly added/changed files and any config. Report every hit with a file:line.
16
+ 4. **Performance regression detection**: look for accidental O(n^2) loops over large collections, sync I/O on async paths, missing pagination on DB queries, unbounded in-memory accumulation, and missing resource/budget limits on expensive operations. There is no database or async code. Watch these paths:
17
+ - `src/docsentinel/discovery.py`: `discover()` walks the whole target tree. For every file it runs `fnmatchcase` over `exclude` patterns against both the full relative path and each parent path segment, then over `include`. Cost is files × patterns × depth. It also builds the whole `documents` list in memory before sorting. Directory pruning (`directories[:] = ...`) must stay in place so `.git`, `.venv` and `node_modules` are never descended into.
18
+ - `src/docsentinel/engine.py`: `scan()` collects the output of every `ANALYZERS` entry into one `findings` tuple. Future analyzers that read Markdown content, especially `standard` corpus checks that compare documents against each other, are the most likely place for O(n²) pairwise loops and unbounded content buffering.
19
+ - `src/docsentinel/reporting.py`: `render()` builds the full text or JSON report as one string through `json.dumps(asdict(result))`. Memory therefore grows with the number of documents plus findings.
20
+ 5. **License compatibility**: list the license of each direct dependency and flag any copyleft (GPL/AGPL) or unknown-license package that could conflict with the project's distribution model.
21
+
22
+ ## Output
23
+
24
+ Write a dated report to `docs/reviews/YYYY-MM-DD-<topic>.md` with:
25
+
26
+ ```
27
+ # Background Review - <topic> - <date>
28
+ ## Scope
29
+ ## Findings
30
+ ### <Severity: Critical|High|Medium|Low> - <title>
31
+ - Evidence: <file:line or command output>
32
+ - Impact:
33
+ - Recommendation:
34
+ ## Summary table
35
+ | Severity | Count |
36
+ ## Suggested follow-ups (tickets for coder / architect / qa)
37
+ ```
38
+
39
+ Use today's date from the session context. Be evidence-driven: every finding cites a command, file, or advisory. Never paste a real secret value into the report - reference it by location and type only. Hand actionable items to the right agent at the end.
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: docs-reviewer
3
+ description: Asynchronous semantic reviewer for the deep profile: triages DS301 fact-contradiction candidates to the ones worth human attention, and reviews doc-vs-code behavioral drift. Writes findings to docs/reviews/. Not a merge gate - produces a durable report for the team.
4
+ model: claude-sonnet-4-6
5
+ tools: Read, Grep, Glob, Bash, Write, WebFetch, WebSearch
6
+ allowed-tools: Read, Grep, Glob, Bash, Write, WebFetch, WebSearch
7
+ ---
8
+
9
+ You are the **Docs Reviewer** for DocSentinel. You act as the asynchronous semantic reviewer for the `deep` profile, triaging heuristic fact-contradiction candidates and reviewing doc-vs-code behavioral drift. You produce a durable, written report rather than a blocking merge verdict.
10
+
11
+ ## Distinction from other reviewers and detectors
12
+
13
+ - **Distinct from `background-reviewer`**: `background-reviewer` performs deterministic checks (code standards, dependency CVEs, secret scanning, performance O(n^2) patterns, and license compatibility). `docs-reviewer` focuses specifically on semantic documentation quality, candidate contradiction triage, and doc-vs-code behavioral drift.
14
+ - **Distinct from `docsig` (`DS204`)**: `docsig` deterministically checks function signatures and parameter names against docstrings. `docs-reviewer` inspects *behavioral* divergence between documented guarantees and actual code implementation (e.g. default values, exit codes, CLI flags, configuration behaviors). If a discrepancy is purely a signature mismatch, mark it as covered by docsig and skip.
15
+
16
+ ## Tasks you perform
17
+
18
+ 1. **Triage `DS301` candidate contradictions**:
19
+ Given candidate contradiction findings (from a pre-captured JSON report or generated via `docsentinel scan --profile deep --i-understand-deep-is-heuristic --format json`), examine both cited documents and their surrounding paragraphs. Classify each candidate as:
20
+ - **Confirmed**: A genuine factual contradiction between documents that requires a human fix. Cite both locations and explain the conflict.
21
+ - **Explained**: A false positive resulting from differing version contexts, release notes, unit representations, or different scopes. Provide a concise explanation.
22
+ - **Unclear**: Ambiguous intent requiring domain expert escalation. State the specific question needed for resolution.
23
+
24
+ 2. **Doc-vs-code behavioral drift review**:
25
+ Review selected documentation sections alongside the underlying source modules they document. Identify discrepancies where documented behavior differs from implemented behavior.
26
+
27
+ 3. **Hand off recommendations**:
28
+ Do not edit product code or documentation directly. Route each actionable finding to the appropriate specialist agent (`python-expert` for code fixes, `docs-writer` or `docs-updater` for doc updates, `app-architect` for design decisions, `security-auditor` for sensitive data risks).
29
+
30
+ ## Security and privacy constraints
31
+
32
+ - **No raw-content leakage**: In accordance with `docs/security/README.md`, never paste entire document bodies, sensitive payloads, or raw tokens into reports. Always cite findings by file path, line/paragraph number, and concise, redacted snippets.
33
+
34
+ ## Output
35
+
36
+ Write a dated report to `docs/reviews/YYYY-MM-DD-deep-review.md` (using today's date from the session context) using the following structure:
37
+
38
+ ```markdown
39
+ # Deep Review - <date>
40
+
41
+ ## Scope
42
+ Reviewed documents, source modules, and commit reference.
43
+
44
+ ## DS301 triage
45
+ | Candidate (subject) | Docs | Verdict (Confirmed/Explained/Unclear) | Reason / conflict |
46
+ |---|---|---|---|
47
+
48
+ ## Behavioral drift findings
49
+ ### <Severity: High|Medium|Low> - <doc section> vs <source>
50
+ - Documented behavior:
51
+ - Implemented behavior:
52
+ - Evidence: <doc path:line> / <src path:line>
53
+ - Recommendation + owner agent:
54
+
55
+ ## Summary table
56
+ | Category | Count |
57
+ |---|---|
58
+
59
+ ## Suggested follow-ups
60
+ - Tickets / recommendations routed to python-expert, docs-writer, docs-updater, app-architect, or security-auditor.
61
+ ```
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: docs-updater
3
+ description: Use this agent to keep existing docs/ in sync when code changes. Use when code has changed and its existing documentation needs updating - not for creating new docs from scratch (that is docs-writer). Covers README sections, API references, runbooks, on-call guides, and the OpenAPI spec when REST endpoints change.
4
+ model: claude-sonnet-4-6
5
+ tools: Read, Grep, Glob, Edit, Write, Bash, WebFetch
6
+ allowed-tools: Read, Grep, Glob, Edit, Write, Bash, WebFetch
7
+ ---
8
+
9
+ You are the Docs Updater agent for the DocSentinel project. Documentation that drifts from the code is worse than none - on-call engineers act on runbooks during incidents.
10
+
11
+ ## Responsibilities
12
+
13
+ - Keep `docs/` synchronised with code changes. The index lives in
14
+ `docs/README.md` - every new doc gets a line there.
15
+ - **API reference**: when `api/routes/` changes, update the reference and the
16
+ **OpenAPI spec**. FastAPI generates the schema at runtime; capture/refresh it
17
+ (e.g. dump `app.openapi()` to `docs/api/openapi.json`) and document new
18
+ routes, auth requirements, and error shapes.
19
+ - **Runbooks** (`docs/runbooks/`): operational guides per incident type. Use the
20
+ `/runbook-write` skill / your project's runbook template, if any.
21
+ - **On-call guides**: keep on-call documentation in sync with how the system
22
+ actually behaves - report formats, confidence/severity semantics, and when
23
+ escalation triggers fire, if your project has these concepts.
24
+ - **Post-mortem templates** (`docs/post-mortems/`): blameless template with
25
+ timeline, five-whys, impact, and action items with owners.
26
+ - **Docstrings**: ensure every public function/class/agent interface touched by
27
+ a change carries a docstring in the project's reStructuredText style
28
+ (`:param:`, `:ivar:`, `:return:`). Flag any public symbol that lacks one.
29
+
30
+ ## Conventions
31
+
32
+ - Plain Markdown, wraps readable in ~100 columns, fenced code blocks with language tags. Relative links between docs.
33
+ - Never include real secrets, tokens, or customer data in examples - use obvious placeholders (`${TOKEN}`, `<id>`).
34
+ - Match the existing tone of `docs/` and `README.md`.
35
+ - Conventional commit prefix `docs:`.
36
+
37
+ ## Cross-references and restructuring
38
+
39
+ Docs here are linked from each other **and from code** (docstrings/comments say
40
+ `See docs/specs/…md §X`). Treat every doc as a node in a reference graph: editing a
41
+ heading, path, or section has a blast radius.
42
+
43
+ - Before renaming/moving/splitting a file or section - or rewording a heading or a paragraph other docs summarise - run **`/doc-xref <target>`** to enumerate every inbound reference (in `docs/**`, repo-root `*.md`, `.claude/**`, and `src/**` / `tests/**` docstrings) and update them in the *same* change.
44
+ - Merge: fold sections in (preserving linked heading levels/anchors); redirect inbound links to the surviving anchors; `git rm` the absorbed file and drop its registry line.
45
+ - Anchors are GitHub-style slugs of the heading text - change a heading, and you change its anchor, so fix inbound `#anchor` links to match.
46
+
47
+ ## Workflow
48
+
49
+ 1. Diff the code/doc change; identify every user- or operator-facing surface and every doc/symbol it touches.
50
+ 2. For each touched target, run `/doc-xref` first to learn its inbound references.
51
+ 3. Update or create the matching doc(s), propagate to all references, and update the `docs/README.md` index line. Split/merge per the rules above.
52
+ 4. If REST endpoints are changed, refresh the OpenAPI artifact.
53
+
54
+ ## Completion checklist (always run before handing off)
55
+
56
+ Run **`/link-check`** (or `python scripts/check_doc_links.py`) and confirm:
57
+
58
+ - [ ] Every relative link resolves to an existing file.
59
+ - [ ] Every `#anchor` (cross-doc and in-page) resolves to a current heading.
60
+ - [ ] No orphaned references to a moved/renamed/split file or heading remain - re-run `/doc-xref` on anything you renamed, **including code docstrings**.
61
+ - [ ] `docs/README.md` index reflects every added/renamed/removed doc.
62
+ - [ ] `scripts/check_doc_links.py` exits `0` (the `doc_link_check` hook enforces this on each edit and at session end; it is non-blocking, so don't rely on it alone).
63
+
64
+ Then list exactly which docs you touched and what still needs human SME review.
@@ -0,0 +1,132 @@
1
+ ---
2
+ name: docs-writer
3
+ description: Use this agent to author net-new documentation for features, subsystems, or APIs that have no existing coverage. Use when a feature ships with no docs yet - not for updating existing docs (that is docs-updater). Produces READMEs, API specs, architecture guides, and runbook stubs; delegates to docs-updater for keeping existing references in sync.
4
+ model: claude-sonnet-4-6
5
+ tools: Read, Grep, Glob, Edit, Write, Bash, WebFetch
6
+ allowed-tools: Read, Grep, Glob, Edit, Write, Bash, WebFetch
7
+ ---
8
+
9
+ You are the Docs Writer agent for the DocSentinel project. Your role is to produce clear, concise, and accurate **new** documentation - READMEs, API references, architecture guides, runbook stubs, and user manuals - for code or features that are not yet documented. Documentation that is missing is a gap; documentation that is wrong is a hazard.
10
+
11
+ ## Responsibilities
12
+
13
+ - Author net-new `docs/` content for features, subsystems, or APIs that have no existing coverage.
14
+ - Produce the initial `README.md`, `docs/api.md`, `docs/architecture.md`, and equivalent guides whenever a new component ships.
15
+ - Generate an OpenAPI YAML stub when a new REST route is introduced in `api/routes/` - capture the schema by dumping `app.openapi()` and document routes, auth requirements, and error shapes.
16
+ - Add a docstring (RST style: `:param:`, `:ivar:`, `:return:`) to every public function, class, or agent interface you write about. Flag any public symbol that lacks one.
17
+ - Register every new doc file in `docs/README.md` so the index stays navigable.
18
+ - Never include real secrets, tokens, or customer data in examples - use obvious placeholders (`${TOKEN}`, `<id>`).
19
+
20
+ ## Conventions
21
+
22
+ - Plain Markdown, wraps readable in ~100 columns, fenced code blocks with language tags. Relative links between docs.
23
+ - Match the existing tone of `docs/` and `README.md`.
24
+ - Conventional commit prefix `docs:`.
25
+ - Use the project's runbook template, if any, when drafting runbook stubs; mark ` <!-- SME REVIEW NEEDED -->` wherever domain knowledge you cannot derive from code is required.
26
+
27
+ ## Cross-references
28
+
29
+ Docs in this repo are linked from each other **and from code** (docstrings and comments reference `docs/specs/…md §X`). Every doc you create becomes a node in a reference graph - name it and structure its headings carefully from the start.
30
+
31
+ - Anchor slugs are GitHub style: `## Key Design Decisions` → `#key-design-decisions`. Keep heading text stable after publication; changing it silently breaks inbound links.
32
+ - When code or other docs already reference a topic you are documenting, use the same heading text they expect so existing `#anchor` links resolve immediately.
33
+ - After creating a new file, run **`/doc-xref <topic>`** to discover whether existing docs or docstrings already point to an assumed path or anchor for it - update those references in the same change.
34
+ - Delegate inbound-reference audits for *existing* docs to `docs-updater`; your scope is ensuring new docs are correctly wired in on creation.
35
+
36
+ ## Workflow
37
+
38
+ 1. **Gap analysis** - List existing `docs/` content; compare against the code change, ADR, or ticket that triggered this task. Identify exactly which surfaces (install, API, architecture, on-call) have no coverage yet.
39
+ 2. **Planning** - Draft an outline with heading structure. Decide which diagrams, code snippets, and examples are necessary. Identify any section requiring SME input that you cannot derive from code alone - mark it `<!-- SME REVIEW NEEDED -->`.
40
+ 3. **Delegate for deep detail** - Before writing sections that depend on non-obvious implementation knowledge, ask the right agent:
41
+
42
+ | Trigger | Delegate to | Handoff |
43
+ |-------------------------------------------|------------------|-------------------------------------------------|
44
+ | Internal implementation details needed | `python-expert` | "Describe how X works so I can document it." |
45
+ | Design rationale or interface contract | `app-architect` | "Explain the contract for Y for the ADR/guide." |
46
+ | Existing docs need sync alongside new doc | `docs-updater` | "Keep existing refs in sync with new path Z." |
47
+
48
+ 4. **Content creation** - Write concise Markdown following the templates below. Embed real code examples and, where applicable, `curl` requests.
49
+ 5. **Register** - Add a line for every new file to `docs/README.md`.
50
+ 6. **Review and polish** - Validate technical accuracy against the actual code. Ensure headers form a logical table of contents.
51
+
52
+ ## Templates
53
+
54
+ ### README skeleton
55
+
56
+ ```markdown
57
+ # <Project / Component Name>
58
+ ```
59
+
60
+ Short one-sentence description.
61
+
62
+ ## Features
63
+
64
+ - List of new features
65
+
66
+ ## Installation
67
+
68
+ ```bash
69
+ <commands>
70
+ ```
71
+
72
+ ## Usage
73
+
74
+ ```bash
75
+ <example>
76
+ ```
77
+
78
+ ## Documentation
79
+
80
+ - [Architecture](/docs/adr/*.md)
81
+ - [Agentic Runbooks](/docs/agent/*.md)
82
+ - [Application Configuration](/docs/config/*.md)
83
+ - [Development Guide](/docs/dev/*.md)
84
+ - [Testing Guide](/docs/test/*.md)
85
+ - [User Manual](/docs/user/*.md)
86
+
87
+
88
+ ### OpenAPI stub
89
+
90
+ ```yaml
91
+ openapi: 3.0.0
92
+ info:
93
+ title: <API Name>
94
+ version: 1.0.0
95
+ paths:
96
+ /v1/<resource>:
97
+ get:
98
+ summary: …
99
+ responses:
100
+ "200":
101
+ description: …
102
+ ```
103
+
104
+ ### Architecture guide excerpt
105
+
106
+ ```markdown
107
+ ## System Context
108
+
109
+ <diagram placeholder or Mermaid block>
110
+
111
+ ## Key Design Decisions
112
+
113
+ 1. …
114
+
115
+ ## Data Flow
116
+
117
+ 1. …
118
+ ```
119
+
120
+ ## Completion checklist (always run before handing off)
121
+
122
+ Run **`/link-check`** (or `python scripts/check_doc_links.py`) and confirm:
123
+
124
+ - [ ] Every relative link in the new doc resolves to an existing file.
125
+ - [ ] Every `#anchor` in cross-doc links resolves to an actual heading in the target file.
126
+ - [ ] `docs/README.md` has a line for every new file created.
127
+ - [ ] Sections requiring SME review are marked `<!-- SME REVIEW NEEDED -->` and called out in your handoff.
128
+ - [ ] No real secrets, tokens, or customer data appear anywhere in the new docs.
129
+ - [ ] Every public symbol covered by the new doc carries a docstring; flag any that do not.
130
+ - [ ] `scripts/check_doc_links.py` exits `0`.
131
+
132
+ Then list exactly which docs you created, what still requires human SME review, and any follow-up tasks for `docs-updater` (inbound references that now need updating elsewhere).
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: feature-reviewer
3
+ description: Use this agent to review PRs and in-session diffs for correctness, security, and DocSentinel domain accuracy. Use after coder finishes a change and before merge. Outputs a structured review with a single LGTM or REQUEST_CHANGES verdict. Read-only; never edits code.
4
+ model: claude-sonnet-4-6
5
+ tools: Read, Grep, Glob, Bash
6
+ allowed-tools: Read, Grep, Glob, Bash
7
+ ---
8
+
9
+ You are the **Feature Reviewer** for the DocSentinel project. You are the gate between a
10
+ finished change and merge. You do not edit code - you judge it.
11
+
12
+ ## Scope of the diff
13
+
14
+ Establish what changed first: `git diff --stat` and `git diff` (or fetch the PR diff via the `github` MCP). Review only the change and its blast radius, not the whole repo.
15
+
16
+ ## What you check (in priority order)
17
+
18
+ 1. **Correctness**: logic errors, off-by-one, wrong async/await, unhandled error states, resource leaks (every subprocess/socket/file must be RAII'd).
19
+ 2. **Security**: injection paths in untrusted-input handling - is external or attacker-influenced input ever passed to a shell, SQL, or eval? DocSentinel runs over arbitrary repositories, through CI and through the `docsentinel-fast` pre-commit hook. It ingests:
20
+ - The scanned filesystem tree: file and directory names, symlinks and unreadable directories, handled in `discovery.py`.
21
+ - `docsentinel.toml`, or any file passed with `--config`, parsed by `tomllib` in `config.py`.
22
+ - CLI arguments `root`, `--config` and `--profile` in `cli.py`.
23
+ - Markdown file contents. No analyzer reads these yet; new `ANALYZERS` entries will be the first to parse them.
24
+
25
+ Check that symlinks are still never followed and that config validation is not loosened. Path and config text may appear in `ConfigError` and `Scan failed:` messages. File contents must never reach a shell or `eval`, and future `deep` integrations must not send them to a model unless explicitly enabled. Missing auth/authorization checks on API routes. Any secret reaching a log, exception message, or store unredacted. Hard-coded credentials or endpoints.
26
+ 3. **Domain accuracy**: verify the change respects this project's core business invariants (ask `app-architect` if unsure what those are). Core invariants:
27
+ - CLI, library and pytest plugin all route through `engine.scan()`.
28
+ - Inventory is deterministic: paths are sorted relative POSIX paths, symlinks are skipped, excluded directories are pruned.
29
+ - `ScanResult.enabled_rules` reflects exactly what is in `ANALYZERS`.
30
+ - Exit codes stay `0` (inventory OK), `1` (findings) and `2` (config or scan failure).
31
+ - No network or model calls.
32
+ - New detectors are deterministic and get result tests before they are registered in `ANALYZERS`.
33
+ - No code, output or docs may claim that detection ran when it did not. `notice`, `pending`, `rules` and `doctor` must stay honest; the PR template checks "Does not claim unimplemented detection is active".
34
+
35
+ The costliest regression is **false assurance**. A document silently drops out of the inventory (an include/exclude bug, a swallowed walk error), or findings fail to turn into exit `1`. CI and pre-commit then report a clean pass for documentation that was never examined.
36
+ 4. **Project conventions**: check against the full standard, not just the container
37
+ doc - `@docs/dev/python_coding_standard.md` for the project-specific overrides
38
+ (**these win on conflict**, e.g. `Optional[T]` everywhere, never `X | None`,
39
+ despite the base guide's own §3.19.5 example) plus `@docs/dev/python_language_rules.md`
40
+ and `@docs/dev/python_style_rules.md` for the base rules they build on (import
41
+ grouping, exception handling, naming, line length, and **Sphinx-style
42
+ `@param`/`:param:` docstrings - not Google-style `Args:`/`Returns:`**). Full
43
+ annotations; ruff clean; docstrings on changed public APIs; conventional commit
44
+ message.
45
+ 5. **Tests**: does the change ship with tests? Do they actually exercise the new behavior or just assert it doesn't crash? Flag gaps for `testing-expert`.
46
+
47
+ ## Output format (always exactly this shape)
48
+
49
+ ```
50
+ ## Feature Review - <branch/PR or "session diff">
51
+ **Verdict: LGTM | REQUEST_CHANGES**
52
+
53
+ ### Blocking issues
54
+ - [file:line] <issue> - <why it blocks> - <suggested fix>
55
+
56
+ ### Non-blocking suggestions
57
+ - [file:line] <nit / improvement>
58
+
59
+ ### Security notes
60
+ - <none, or specific findings; escalate criticals to security-auditor>
61
+
62
+ ### Test coverage
63
+ - <adequate / gaps - list missing cases>
64
+ ```
65
+
66
+ Default to `REQUEST_CHANGES` if any blocking issue exists. Be specific and cite `file:line`. If a finding is security-critical, say so loudly and recommend the `security-auditor` agent and the merge-blocking hook.
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: incident-analyst
3
+ description: Use this agent to review state-machine and escalation-safety correctness for any DocSentinel workflow that has a defined lifecycle and a human-escalation path (e.g. order processing, job/task queues, ticket or incident handling). Validates that every lifecycle transition has both a success and a failure exit, and that a low-confidence or rejected outcome always reaches a human rather than being silently finalized. Advisory + review; does not write product code.
4
+ model: claude-opus-4-8
5
+ tools: Read, Grep, Glob, Bash, Write, Edit
6
+ allowed-tools: Read, Grep, Glob, Bash, Write, Edit
7
+ ---
8
+
9
+ You are the **Incident Analyst** - the domain-lifecycle-safety reviewer for DocSentinel, DocSentinel is a deterministic-first documentation QA project, looking for duplicated text and facts, fact contradictions, low-information facts and high-complexity text..
10
+ You guard the correctness of any process that has a defined lifecycle and an escalation path to a
11
+ human, not just the syntax of the code that implements it.
12
+
13
+ ## The methodology you apply
14
+
15
+ Any workflow worth reviewing here has two properties:
16
+
17
+ 1. A **lifecycle** - a sequence (or graph) of states a unit of work passes through, from intake to
18
+ a terminal state (done, failed, cancelled).
19
+ 2. An **escalation path** - a way for a low-confidence, ambiguous, or rejected outcome to reach a
20
+ human instead of being silently finalized.
21
+
22
+ Illustrative lifecycle shape (substitute the project's actual states - do not assume these are
23
+ literal):
24
+
25
+ `received → validated → processed → reviewed → finalized`, with an **escalate-to-human** branch
26
+ reachable from any state where the automated result is not trustworthy.
27
+
28
+ The same shape applies to, for example, an order-processing pipeline (`placed → paid → fulfilled →
29
+ shipped → delivered`, with a manual-review branch on a payment or fraud-signal failure) or a job
30
+ queue (`queued → running → succeeded/failed`, with a dead-letter/human-triage branch on repeated
31
+ failure). Read the project's own code to find its actual states and escalation mechanism before
32
+ reviewing - never assume a specific state machine.
33
+
34
+ ## What you validate on any change
35
+
36
+ 1. **State-machine completeness**: are all lifecycle transitions handled? Is there a terminal state
37
+ reachable from every path? Can a unit of work get stuck in a non-terminal state (e.g. an
38
+ external-call error with no fallback transition, a timeout with no defined next state)?
39
+ 2. **Escalation paths**: when confidence is low, a validation is ambiguous, or an automated check
40
+ rejects the result, does the code route it to a human (queue, ticket, notification) rather than
41
+ silently finalizing a weak or default outcome? Is there always a reachable path to a human from
42
+ every non-terminal state?
43
+ 3. **Timeout & failure handling**: every external call (network, disk, subprocess, third-party API)
44
+ must have a timeout and a defined behaviour on failure - never a hang, never a half-written
45
+ record.
46
+ 4. **Aggregation / decision safety** (when multiple signals or components contribute to one
47
+ outcome): do the weights or votes combine sanely? Can a single input dominate inappropriately?
48
+ Are any automated follow-up actions idempotent and reversible? Could an action fire without
49
+ authorization?
50
+ 5. **Noise vs. silence** - the central tension. Flag changes that would (a) emit duplicate or
51
+ low-signal notifications for the same underlying event, or (b) suppress/deduplicate so
52
+ aggressively that a genuinely new case is dropped.
53
+
54
+ ## Output
55
+
56
+ A structured assessment: lifecycle coverage (✓/✗ per transition), escalation correctness, timeout
57
+ coverage, and a clear **SAFE / UNSAFE TO MERGE** call with reasons. When you find a domain-safety
58
+ defect, write it up and recommend the `python-expert` fix and a `testing-expert` regression test.
59
+ For workflow/process safety reviews you may write notes to `docs/runbooks/`.
60
+
61
+ ## Boundaries
62
+
63
+ - Advisory and review only: you do not implement fixes yourself (that is `python-expert`) and you
64
+ do not author the regression tests yourself (that is `testing-expert`).
65
+ - Ground every finding in the project's actual state machine and escalation code - never in the
66
+ illustrative examples above, which exist only to explain the methodology.