kingmadoc 0.3.0.dev14__tar.gz → 0.3.0.dev16__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 (194) hide show
  1. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/PKG-INFO +1 -1
  2. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/skill/SKILL.md +2 -1
  3. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/skill/codex.md +23 -15
  4. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/skill/copilot.md +23 -15
  5. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/skill/cursor.md +23 -15
  6. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/skill/explaining-code/SKILL.md +2 -1
  7. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/skill/reference/diagram-rules.md +18 -12
  8. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/skill/reference/formats.md +3 -2
  9. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/.featuredoc.yml +0 -0
  10. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  11. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  12. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/.github/workflows/ci.yml +0 -0
  13. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/.github/workflows/release.yml +0 -0
  14. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/.gitignore +0 -0
  15. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/CHANGELOG.md +0 -0
  16. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/CLAUDE.md +0 -0
  17. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/CONTRIBUTING.md +0 -0
  18. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/LICENSE +0 -0
  19. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/README.md +0 -0
  20. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/docs/conventions.md +0 -0
  21. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/docs/index.md +0 -0
  22. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/docs/releasing.md +0 -0
  23. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/docs/roadmap.md +0 -0
  24. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/docs/test-plan.md +0 -0
  25. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/README.md +0 -0
  26. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/fixtures/shop/manage.py +0 -0
  27. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/fixtures/shop/requirements.txt +0 -0
  28. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/fixtures/shop/shop/__init__.py +0 -0
  29. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/fixtures/shop/shop/models.py +0 -0
  30. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/fixtures/shop/shop/services.py +0 -0
  31. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/fixtures/shop/shop/settings.py +0 -0
  32. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/fixtures/shop/shop/urls.py +0 -0
  33. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/fixtures/shop/shop/views.py +0 -0
  34. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/fixtures/shop-discount/shop/discounts.py +0 -0
  35. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/fixtures/shop-discount/shop/services.py +0 -0
  36. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/results/2026-09-27T111837Z.json +0 -0
  37. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/results/2026-09-27T112600Z.json +0 -0
  38. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/results/2026-09-27T162715Z.json +0 -0
  39. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/results/2026-09-28T064505Z.json +0 -0
  40. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/results/2026-09-28T092643Z.json +0 -0
  41. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/results/2026-09-28T093046Z.json +0 -0
  42. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/scenarios/explain-branch.yml +0 -0
  43. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/scenarios/explain-feature.yml +0 -0
  44. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/scenarios/explain-fo-to.yml +0 -0
  45. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/evals/scenarios/plan-feature.yml +0 -0
  46. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/examples/verify-mode-plan.md +0 -0
  47. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/pyproject.toml +0 -0
  48. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/scripts/build_skill_variants.py +0 -0
  49. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/scripts/build_threat_reference.py +0 -0
  50. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/scripts/import_tmt_knowledge_base.py +0 -0
  51. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/scripts/run_evals.py +0 -0
  52. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/skill/explaining-code/reference/arc42.md +0 -0
  53. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/skill/explaining-code/reference/c4-model.md +0 -0
  54. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/skill/explaining-code/reference/c4.md +0 -0
  55. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/skill/explaining-code/reference/models.md +0 -0
  56. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/skill/explaining-code/reference/split.md +0 -0
  57. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/skill/explaining-code/reference/stories.md +0 -0
  58. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/skill/explaining-code/reference/threat-model.md +0 -0
  59. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/skill/explaining-code/reference/threats.md +0 -0
  60. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/__init__.py +0 -0
  61. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/about.py +0 -0
  62. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/adr.py +0 -0
  63. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/cli.py +0 -0
  64. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/config.py +0 -0
  65. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/d2_binary.py +0 -0
  66. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/diagrams/__init__.py +0 -0
  67. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/diagrams/base.py +0 -0
  68. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/diagrams/d2.py +0 -0
  69. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/diagrams/mermaid.py +0 -0
  70. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/diagrams/plantuml.py +0 -0
  71. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/documents.py +0 -0
  72. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/exceptions.py +0 -0
  73. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/explain.py +0 -0
  74. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/facts/__init__.py +0 -0
  75. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/facts/branch.py +0 -0
  76. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/facts/collect.py +0 -0
  77. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/facts/data_model.py +0 -0
  78. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/facts/dominators.py +0 -0
  79. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/facts/js_modules.py +0 -0
  80. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/facts/projects.py +0 -0
  81. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/facts/routes.py +0 -0
  82. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/facts/services.py +0 -0
  83. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/git.py +0 -0
  84. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/naming.py +0 -0
  85. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/plan/__init__.py +0 -0
  86. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/plan/analyzer.py +0 -0
  87. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/plan/dependencies.py +0 -0
  88. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/plan/generator.py +0 -0
  89. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/plan/models.py +0 -0
  90. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/plandoc.py +0 -0
  91. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/raster.py +0 -0
  92. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/render.py +0 -0
  93. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/scaffold.py +0 -0
  94. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/screenshots.py +0 -0
  95. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/skills.py +0 -0
  96. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/templates/adr.md.j2 +0 -0
  97. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/templates/domain_design.md.j2 +0 -0
  98. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/templates/functional_design.md.j2 +0 -0
  99. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/templates/plan_default.md.j2 +0 -0
  100. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/templates/security_design.md.j2 +0 -0
  101. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/templates/technical_design.md.j2 +0 -0
  102. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/templating.py +0 -0
  103. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/threats/__init__.py +0 -0
  104. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/threats/filters.py +0 -0
  105. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/threats/knowledge_base.py +0 -0
  106. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/threats/model.py +0 -0
  107. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/threats/report.py +0 -0
  108. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/threats/sdl_knowledge_base.json +0 -0
  109. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/verify/__init__.py +0 -0
  110. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/verify/changes.py +0 -0
  111. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/verify/commands.py +0 -0
  112. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/verify/deviations.py +0 -0
  113. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/verify/locate.py +0 -0
  114. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/verify/report.py +0 -0
  115. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/src/kingmadoc/vscode.py +0 -0
  116. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/conftest.py +0 -0
  117. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/data/d2-sample.svg +0 -0
  118. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/backends/d2/class.d2 +0 -0
  119. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/backends/d2/component.d2 +0 -0
  120. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/backends/d2/container.d2 +0 -0
  121. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/backends/d2/context.d2 +0 -0
  122. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/backends/d2/sequence.d2 +0 -0
  123. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/backends/mermaid/class.mmd +0 -0
  124. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/backends/mermaid/component.mmd +0 -0
  125. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/backends/mermaid/container.mmd +0 -0
  126. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/backends/mermaid/context.mmd +0 -0
  127. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/backends/mermaid/sequence.mmd +0 -0
  128. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/backends/plantuml/class.puml +0 -0
  129. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/backends/plantuml/component.puml +0 -0
  130. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/backends/plantuml/container.puml +0 -0
  131. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/backends/plantuml/context.puml +0 -0
  132. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/backends/plantuml/sequence.puml +0 -0
  133. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/mermaid/component.mmd +0 -0
  134. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/mermaid/container.mmd +0 -0
  135. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/fixtures/mermaid/context.mmd +0 -0
  136. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_adr.py +0 -0
  137. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_adr_numbering.py +0 -0
  138. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_analyzer.py +0 -0
  139. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_cli.py +0 -0
  140. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_cli_encoding.py +0 -0
  141. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_cli_init.py +0 -0
  142. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_cli_plan_custom_template.py +0 -0
  143. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_cli_sigint.py +0 -0
  144. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_cli_verify_config.py +0 -0
  145. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_config.py +0 -0
  146. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_config_poetry.py +0 -0
  147. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_config_shape.py +0 -0
  148. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_d2_download.py +0 -0
  149. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_dependencies.py +0 -0
  150. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_dependency_graph_model.py +0 -0
  151. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_design_diagrams_compile.py +0 -0
  152. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_design_models.py +0 -0
  153. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_diagram_backends.py +0 -0
  154. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_diagrams_mermaid.py +0 -0
  155. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_documents.py +0 -0
  156. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_duplicate_names.py +0 -0
  157. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_evals.py +0 -0
  158. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_explain.py +0 -0
  159. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_explain_check.py +0 -0
  160. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_explain_config.py +0 -0
  161. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_explain_status.py +0 -0
  162. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_extra_designs_coverage.py +0 -0
  163. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_facts.py +0 -0
  164. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_facts_code.py +0 -0
  165. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_facts_data_model.py +0 -0
  166. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_facts_dominators.py +0 -0
  167. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_functional_design.py +0 -0
  168. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_generator.py +0 -0
  169. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_grep_performance.py +0 -0
  170. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_manifests.py +0 -0
  171. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_max_lines_per_file.py +0 -0
  172. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_output_dir.py +0 -0
  173. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_plan_e2e.py +0 -0
  174. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_plandoc.py +0 -0
  175. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_properties.py +0 -0
  176. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_raster.py +0 -0
  177. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_render.py +0 -0
  178. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_scaffold.py +0 -0
  179. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_screenshots.py +0 -0
  180. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_security_domain_designs.py +0 -0
  181. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_skill.py +0 -0
  182. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_skill_explaining_code.py +0 -0
  183. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_skill_models.py +0 -0
  184. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_skills_install.py +0 -0
  185. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_source_dirs.py +0 -0
  186. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_summary_slug_diagram_defaults.py +0 -0
  187. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_technical_design.py +0 -0
  188. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_templating_security.py +0 -0
  189. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_threats.py +0 -0
  190. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_verify.py +0 -0
  191. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_verify_locate.py +0 -0
  192. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_version.py +0 -0
  193. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/tests/test_vscode_preview.py +0 -0
  194. {kingmadoc-0.3.0.dev14 → kingmadoc-0.3.0.dev16}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: kingmadoc
3
- Version: 0.3.0.dev14
3
+ Version: 0.3.0.dev16
4
4
  Summary: Feature docs for AI coding agents: a plan with C4 diagrams before the code, a verification doc after.
5
5
  Project-URL: Homepage, https://github.com/ATkingma/KingmaDoc
6
6
  Project-URL: Issues, https://github.com/ATkingma/KingmaDoc/issues
@@ -145,7 +145,8 @@ the diagrams, but never beyond what the user said or the code shows.
145
145
  vague REQ or invented ones. Under each: `Verified by: <test, test case or command>`
146
146
  (or `_TODO_`).
147
147
  - **Planned changes**: per `files_expected` path what changes and why (the "how" of
148
- answer 4), one to three lines, no code blocks. Risks and assumptions may add code
148
+ answer 4), one to three lines, no code blocks; where a code snippet would help
149
+ (a new method, a changed signature), draw a small `classDiagram` with just those members. Risks and assumptions may add code
149
150
  findings marked _(inferred)_.
150
151
  - **Generated**: the real system time (`date -Iminutes`).
151
152
  - External systems: those from answer 3, plus systems the code demonstrably uses
@@ -145,7 +145,8 @@ the diagrams, but never beyond what the user said or the code shows.
145
145
  vague REQ or invented ones. Under each: `Verified by: <test, test case or command>`
146
146
  (or `_TODO_`).
147
147
  - **Planned changes**: per `files_expected` path what changes and why (the "how" of
148
- answer 4), one to three lines, no code blocks. Risks and assumptions may add code
148
+ answer 4), one to three lines, no code blocks; where a code snippet would help
149
+ (a new method, a changed signature), draw a small `classDiagram` with just those members. Risks and assumptions may add code
149
150
  findings marked _(inferred)_.
150
151
  - **Generated**: the real system time (`date -Iminutes`).
151
152
  - External systems: those from answer 3, plus systems the code demonstrably uses
@@ -233,8 +234,8 @@ Show the user the path, the number of deviations, and any failing check.
233
234
  - **Always Mermaid** (ignore `diagram_format`; PlantUML/D2 are CLI-only). Mermaid is
234
235
  the source of truth; every diagram is also rendered to a PNG and embedded in the
235
236
  Markdown (see [Rendering](#rendering)).
236
- - **Always fenced**: every diagram is a complete ` ```mermaid ` … ` ``` `
237
- block, with nothing else inside it.
237
+ - **Always complete**: every diagram is a complete Mermaid diagram (a ` ```mermaid `
238
+ block, or its `.mmd` file once rendered), with nothing else in it.
238
239
  - **Always labeled**:
239
240
  - C4 and `sequenceDiagram`: the first line after the diagram type is `title <text>`
240
241
  (`System Context: <project>`, `Containers: <project>`);
@@ -292,7 +293,7 @@ this line: _Disabled in `.featuredoc.yml` (`diagrams`)._
292
293
 
293
294
  `diagrams_png` in `.featuredoc.yml` [`embed`]: `embed` (below), `file` (the PNG goes to
294
295
  `<output_dir>/img/<slug>-<diagram>.png`, linked with `![<title>](img/<slug>-<diagram>.png)`)
295
- or `off` (no image, only the Mermaid block).
296
+ or `off` (no image; the ` ```mermaid ` block stays in the document).
296
297
 
297
298
  - **Mode comes only from `.featuredoc.yml`.** No file or no `diagrams_png` key → `embed`.
298
299
  Never infer the mode from existing files (an `img/` folder, how an earlier doc did it).
@@ -300,26 +301,32 @@ or `off` (no image, only the Mermaid block).
300
301
  `![...](data:image/png;base64,`. A relative path such as `](img/` is an error: embed it and
301
302
  delete the loose PNG.
302
303
  - Embed the PNG with a script (read file → base64 → replace the line), never by hand.
304
+ - **No Mermaid source in the document** once its PNG is there: no ` ```mermaid ` block
305
+ and no `<details>` with the source. The source lives in
306
+ `<output_dir>/diagrams/<slug>-<diagram>.mmd`.
303
307
 
304
- 1. Write each ` ```mermaid ` block to a temporary `.mmd` file outside the repo and run:
305
- `npx -y @mermaid-js/mermaid-cli -i <tmp>.mmd -o <tmp>.png -s 2 -b white -t default -p <puppeteer.json>`
308
+ 1. Write each diagram to `<output_dir>/diagrams/<slug>-<diagram>.mmd` (`<diagram>`:
309
+ `c4-context`, `c4-container`, `class`, `sequence-current`, `sequence-new`) and run:
310
+ `npx -y @mermaid-js/mermaid-cli -i <that>.mmd -o <tmp>.png -s 2 -b white -t default -p <puppeteer.json>`
306
311
  (`-t default`: Mermaid's normal theme; newer versions otherwise colour every shape).
307
312
  2. Set `PUPPETEER_SKIP_DOWNLOAD=true`, and let `puppeteer.json` point at an installed
308
313
  browser, so no Chromium is downloaded:
309
314
  `{"executablePath": "C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}`
310
315
  (or Chrome). Ask the user once before the first npm download: package
311
316
  `@mermaid-js/mermaid-cli`, from the npm registry, about 50 MB with dependencies.
312
- 3. Directly below the block, after one empty line:
317
+ 3. In the document, in place of the block, two lines:
318
+ `<!-- kingmadoc:diagram diagrams/<slug>-<diagram>.mmd -->` and
313
319
  `![<diagram title>](data:image/png;base64,<base64 of the PNG>)`.
314
- No separate image files go into the repo.
315
- 4. The ` ```mermaid ` block always stays (GitHub shows no data URIs; the block is the
316
- source for the next render). On a new render, replace only the image line below
317
- the same block.
320
+ No separate image files go into the repo (`file` mode aside).
321
+ 4. To change a diagram, edit its `.mmd` file and render again; replace only the image
322
+ line below its comment. (GitHub shows no data-URI images; there the `.mmd` file is
323
+ the readable version.)
318
324
  5. Look at every PNG after rendering (Read): not empty, no labels cut off at the edge,
319
325
  no unexpected extra participants. If needed, fix the Mermaid (split or shorten a
320
326
  label) and render again.
321
- 6. If rendering fails, write `_TODO: PNG not generated: <reason>._` below the block
322
- (in `language`) and carry on; the document stays valid.
327
+ 6. If rendering fails, keep the ` ```mermaid ` block in the document, write
328
+ `_TODO: PNG not generated: <reason>._` below it (in `language`) and carry on; the
329
+ document stays valid.
323
330
 
324
331
  ## Output format
325
332
 
@@ -367,7 +374,8 @@ files_expected: [<existing files or folders the user said will change>]
367
374
  ## Planned changes
368
375
 
369
376
  - `<path from files_expected>`: <what changes and why, one to three lines, no code
370
- blocks; the "how" from answer 4, or> _TODO: what changes here and why._
377
+ blocks (a small classDiagram with the changed members instead of a snippet); the "how"
378
+ from answer 4, or> _TODO: what changes here and why._
371
379
 
372
380
  ## Requirements
373
381
 
@@ -449,7 +457,7 @@ The classes this feature touches and their direct collaborators.
449
457
 
450
458
  Omit "**Answered while planning**" when nothing was answered.
451
459
 
452
- - Every diagram is a ` ```mermaid ` block with its PNG below it (see
460
+ - Every diagram is its PNG, with the Mermaid source in a `.mmd` file (see
453
461
  [Rendering](diagram-rules.md#rendering)); a disabled diagram keeps its section with
454
462
  _Disabled in `.featuredoc.yml` (`diagrams`)._
455
463
  - **Generated** is the real system time (`date -Iminutes`), never a guess.
@@ -145,7 +145,8 @@ the diagrams, but never beyond what the user said or the code shows.
145
145
  vague REQ or invented ones. Under each: `Verified by: <test, test case or command>`
146
146
  (or `_TODO_`).
147
147
  - **Planned changes**: per `files_expected` path what changes and why (the "how" of
148
- answer 4), one to three lines, no code blocks. Risks and assumptions may add code
148
+ answer 4), one to three lines, no code blocks; where a code snippet would help
149
+ (a new method, a changed signature), draw a small `classDiagram` with just those members. Risks and assumptions may add code
149
150
  findings marked _(inferred)_.
150
151
  - **Generated**: the real system time (`date -Iminutes`).
151
152
  - External systems: those from answer 3, plus systems the code demonstrably uses
@@ -233,8 +234,8 @@ Show the user the path, the number of deviations, and any failing check.
233
234
  - **Always Mermaid** (ignore `diagram_format`; PlantUML/D2 are CLI-only). Mermaid is
234
235
  the source of truth; every diagram is also rendered to a PNG and embedded in the
235
236
  Markdown (see [Rendering](#rendering)).
236
- - **Always fenced**: every diagram is a complete ` ```mermaid ` … ` ``` `
237
- block, with nothing else inside it.
237
+ - **Always complete**: every diagram is a complete Mermaid diagram (a ` ```mermaid `
238
+ block, or its `.mmd` file once rendered), with nothing else in it.
238
239
  - **Always labeled**:
239
240
  - C4 and `sequenceDiagram`: the first line after the diagram type is `title <text>`
240
241
  (`System Context: <project>`, `Containers: <project>`);
@@ -292,7 +293,7 @@ this line: _Disabled in `.featuredoc.yml` (`diagrams`)._
292
293
 
293
294
  `diagrams_png` in `.featuredoc.yml` [`embed`]: `embed` (below), `file` (the PNG goes to
294
295
  `<output_dir>/img/<slug>-<diagram>.png`, linked with `![<title>](img/<slug>-<diagram>.png)`)
295
- or `off` (no image, only the Mermaid block).
296
+ or `off` (no image; the ` ```mermaid ` block stays in the document).
296
297
 
297
298
  - **Mode comes only from `.featuredoc.yml`.** No file or no `diagrams_png` key → `embed`.
298
299
  Never infer the mode from existing files (an `img/` folder, how an earlier doc did it).
@@ -300,26 +301,32 @@ or `off` (no image, only the Mermaid block).
300
301
  `![...](data:image/png;base64,`. A relative path such as `](img/` is an error: embed it and
301
302
  delete the loose PNG.
302
303
  - Embed the PNG with a script (read file → base64 → replace the line), never by hand.
304
+ - **No Mermaid source in the document** once its PNG is there: no ` ```mermaid ` block
305
+ and no `<details>` with the source. The source lives in
306
+ `<output_dir>/diagrams/<slug>-<diagram>.mmd`.
303
307
 
304
- 1. Write each ` ```mermaid ` block to a temporary `.mmd` file outside the repo and run:
305
- `npx -y @mermaid-js/mermaid-cli -i <tmp>.mmd -o <tmp>.png -s 2 -b white -t default -p <puppeteer.json>`
308
+ 1. Write each diagram to `<output_dir>/diagrams/<slug>-<diagram>.mmd` (`<diagram>`:
309
+ `c4-context`, `c4-container`, `class`, `sequence-current`, `sequence-new`) and run:
310
+ `npx -y @mermaid-js/mermaid-cli -i <that>.mmd -o <tmp>.png -s 2 -b white -t default -p <puppeteer.json>`
306
311
  (`-t default`: Mermaid's normal theme; newer versions otherwise colour every shape).
307
312
  2. Set `PUPPETEER_SKIP_DOWNLOAD=true`, and let `puppeteer.json` point at an installed
308
313
  browser, so no Chromium is downloaded:
309
314
  `{"executablePath": "C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}`
310
315
  (or Chrome). Ask the user once before the first npm download: package
311
316
  `@mermaid-js/mermaid-cli`, from the npm registry, about 50 MB with dependencies.
312
- 3. Directly below the block, after one empty line:
317
+ 3. In the document, in place of the block, two lines:
318
+ `<!-- kingmadoc:diagram diagrams/<slug>-<diagram>.mmd -->` and
313
319
  `![<diagram title>](data:image/png;base64,<base64 of the PNG>)`.
314
- No separate image files go into the repo.
315
- 4. The ` ```mermaid ` block always stays (GitHub shows no data URIs; the block is the
316
- source for the next render). On a new render, replace only the image line below
317
- the same block.
320
+ No separate image files go into the repo (`file` mode aside).
321
+ 4. To change a diagram, edit its `.mmd` file and render again; replace only the image
322
+ line below its comment. (GitHub shows no data-URI images; there the `.mmd` file is
323
+ the readable version.)
318
324
  5. Look at every PNG after rendering (Read): not empty, no labels cut off at the edge,
319
325
  no unexpected extra participants. If needed, fix the Mermaid (split or shorten a
320
326
  label) and render again.
321
- 6. If rendering fails, write `_TODO: PNG not generated: <reason>._` below the block
322
- (in `language`) and carry on; the document stays valid.
327
+ 6. If rendering fails, keep the ` ```mermaid ` block in the document, write
328
+ `_TODO: PNG not generated: <reason>._` below it (in `language`) and carry on; the
329
+ document stays valid.
323
330
 
324
331
  ## Output format
325
332
 
@@ -367,7 +374,8 @@ files_expected: [<existing files or folders the user said will change>]
367
374
  ## Planned changes
368
375
 
369
376
  - `<path from files_expected>`: <what changes and why, one to three lines, no code
370
- blocks; the "how" from answer 4, or> _TODO: what changes here and why._
377
+ blocks (a small classDiagram with the changed members instead of a snippet); the "how"
378
+ from answer 4, or> _TODO: what changes here and why._
371
379
 
372
380
  ## Requirements
373
381
 
@@ -449,7 +457,7 @@ The classes this feature touches and their direct collaborators.
449
457
 
450
458
  Omit "**Answered while planning**" when nothing was answered.
451
459
 
452
- - Every diagram is a ` ```mermaid ` block with its PNG below it (see
460
+ - Every diagram is its PNG, with the Mermaid source in a `.mmd` file (see
453
461
  [Rendering](diagram-rules.md#rendering)); a disabled diagram keeps its section with
454
462
  _Disabled in `.featuredoc.yml` (`diagrams`)._
455
463
  - **Generated** is the real system time (`date -Iminutes`), never a guess.
@@ -146,7 +146,8 @@ the diagrams, but never beyond what the user said or the code shows.
146
146
  vague REQ or invented ones. Under each: `Verified by: <test, test case or command>`
147
147
  (or `_TODO_`).
148
148
  - **Planned changes**: per `files_expected` path what changes and why (the "how" of
149
- answer 4), one to three lines, no code blocks. Risks and assumptions may add code
149
+ answer 4), one to three lines, no code blocks; where a code snippet would help
150
+ (a new method, a changed signature), draw a small `classDiagram` with just those members. Risks and assumptions may add code
150
151
  findings marked _(inferred)_.
151
152
  - **Generated**: the real system time (`date -Iminutes`).
152
153
  - External systems: those from answer 3, plus systems the code demonstrably uses
@@ -234,8 +235,8 @@ Show the user the path, the number of deviations, and any failing check.
234
235
  - **Always Mermaid** (ignore `diagram_format`; PlantUML/D2 are CLI-only). Mermaid is
235
236
  the source of truth; every diagram is also rendered to a PNG and embedded in the
236
237
  Markdown (see [Rendering](#rendering)).
237
- - **Always fenced**: every diagram is a complete ` ```mermaid ` … ` ``` `
238
- block, with nothing else inside it.
238
+ - **Always complete**: every diagram is a complete Mermaid diagram (a ` ```mermaid `
239
+ block, or its `.mmd` file once rendered), with nothing else in it.
239
240
  - **Always labeled**:
240
241
  - C4 and `sequenceDiagram`: the first line after the diagram type is `title <text>`
241
242
  (`System Context: <project>`, `Containers: <project>`);
@@ -293,7 +294,7 @@ this line: _Disabled in `.featuredoc.yml` (`diagrams`)._
293
294
 
294
295
  `diagrams_png` in `.featuredoc.yml` [`embed`]: `embed` (below), `file` (the PNG goes to
295
296
  `<output_dir>/img/<slug>-<diagram>.png`, linked with `![<title>](img/<slug>-<diagram>.png)`)
296
- or `off` (no image, only the Mermaid block).
297
+ or `off` (no image; the ` ```mermaid ` block stays in the document).
297
298
 
298
299
  - **Mode comes only from `.featuredoc.yml`.** No file or no `diagrams_png` key → `embed`.
299
300
  Never infer the mode from existing files (an `img/` folder, how an earlier doc did it).
@@ -301,26 +302,32 @@ or `off` (no image, only the Mermaid block).
301
302
  `![...](data:image/png;base64,`. A relative path such as `](img/` is an error: embed it and
302
303
  delete the loose PNG.
303
304
  - Embed the PNG with a script (read file → base64 → replace the line), never by hand.
305
+ - **No Mermaid source in the document** once its PNG is there: no ` ```mermaid ` block
306
+ and no `<details>` with the source. The source lives in
307
+ `<output_dir>/diagrams/<slug>-<diagram>.mmd`.
304
308
 
305
- 1. Write each ` ```mermaid ` block to a temporary `.mmd` file outside the repo and run:
306
- `npx -y @mermaid-js/mermaid-cli -i <tmp>.mmd -o <tmp>.png -s 2 -b white -t default -p <puppeteer.json>`
309
+ 1. Write each diagram to `<output_dir>/diagrams/<slug>-<diagram>.mmd` (`<diagram>`:
310
+ `c4-context`, `c4-container`, `class`, `sequence-current`, `sequence-new`) and run:
311
+ `npx -y @mermaid-js/mermaid-cli -i <that>.mmd -o <tmp>.png -s 2 -b white -t default -p <puppeteer.json>`
307
312
  (`-t default`: Mermaid's normal theme; newer versions otherwise colour every shape).
308
313
  2. Set `PUPPETEER_SKIP_DOWNLOAD=true`, and let `puppeteer.json` point at an installed
309
314
  browser, so no Chromium is downloaded:
310
315
  `{"executablePath": "C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}`
311
316
  (or Chrome). Ask the user once before the first npm download: package
312
317
  `@mermaid-js/mermaid-cli`, from the npm registry, about 50 MB with dependencies.
313
- 3. Directly below the block, after one empty line:
318
+ 3. In the document, in place of the block, two lines:
319
+ `<!-- kingmadoc:diagram diagrams/<slug>-<diagram>.mmd -->` and
314
320
  `![<diagram title>](data:image/png;base64,<base64 of the PNG>)`.
315
- No separate image files go into the repo.
316
- 4. The ` ```mermaid ` block always stays (GitHub shows no data URIs; the block is the
317
- source for the next render). On a new render, replace only the image line below
318
- the same block.
321
+ No separate image files go into the repo (`file` mode aside).
322
+ 4. To change a diagram, edit its `.mmd` file and render again; replace only the image
323
+ line below its comment. (GitHub shows no data-URI images; there the `.mmd` file is
324
+ the readable version.)
319
325
  5. Look at every PNG after rendering (Read): not empty, no labels cut off at the edge,
320
326
  no unexpected extra participants. If needed, fix the Mermaid (split or shorten a
321
327
  label) and render again.
322
- 6. If rendering fails, write `_TODO: PNG not generated: <reason>._` below the block
323
- (in `language`) and carry on; the document stays valid.
328
+ 6. If rendering fails, keep the ` ```mermaid ` block in the document, write
329
+ `_TODO: PNG not generated: <reason>._` below it (in `language`) and carry on; the
330
+ document stays valid.
324
331
 
325
332
  ## Output format
326
333
 
@@ -368,7 +375,8 @@ files_expected: [<existing files or folders the user said will change>]
368
375
  ## Planned changes
369
376
 
370
377
  - `<path from files_expected>`: <what changes and why, one to three lines, no code
371
- blocks; the "how" from answer 4, or> _TODO: what changes here and why._
378
+ blocks (a small classDiagram with the changed members instead of a snippet); the "how"
379
+ from answer 4, or> _TODO: what changes here and why._
372
380
 
373
381
  ## Requirements
374
382
 
@@ -450,7 +458,7 @@ The classes this feature touches and their direct collaborators.
450
458
 
451
459
  Omit "**Answered while planning**" when nothing was answered.
452
460
 
453
- - Every diagram is a ` ```mermaid ` block with its PNG below it (see
461
+ - Every diagram is its PNG, with the Mermaid source in a `.mmd` file (see
454
462
  [Rendering](diagram-rules.md#rendering)); a disabled diagram keeps its section with
455
463
  _Disabled in `.featuredoc.yml` (`diagrams`)._
456
464
  - **Generated** is the real system time (`date -Iminutes`), never a guess.
@@ -41,7 +41,8 @@ Rules:
41
41
  stops it; never a proposal.
42
42
  - **Picture, caption, table. No stories.** Every figure has a numbered caption
43
43
  (`**Figure 3.** …`, no gaps) and at most three sentences; a table decodes it. Never
44
- describe a diagram in prose, never paste code as an image, no filler.
44
+ describe a diagram in prose, never paste code as an image, no filler. Where a code
45
+ snippet would explain a class or signature, draw a small UML class diagram instead.
45
46
  - **Zoom in step by step,** one small diagram per level (at most about fifteen elements).
46
47
  - **Every figure follows its model's notation** ([reference/c4-model.md](reference/c4-model.md),
47
48
  [reference/models.md](reference/models.md)) and passes its checklist: a title, a
@@ -3,8 +3,8 @@
3
3
  - **Always Mermaid** (ignore `diagram_format`; PlantUML/D2 are CLI-only). Mermaid is
4
4
  the source of truth; every diagram is also rendered to a PNG and embedded in the
5
5
  Markdown (see [Rendering](#rendering)).
6
- - **Always fenced**: every diagram is a complete ` ```mermaid ` … ` ``` `
7
- block, with nothing else inside it.
6
+ - **Always complete**: every diagram is a complete Mermaid diagram (a ` ```mermaid `
7
+ block, or its `.mmd` file once rendered), with nothing else in it.
8
8
  - **Always labeled**:
9
9
  - C4 and `sequenceDiagram`: the first line after the diagram type is `title <text>`
10
10
  (`System Context: <project>`, `Containers: <project>`);
@@ -62,7 +62,7 @@ this line: _Disabled in `.featuredoc.yml` (`diagrams`)._
62
62
 
63
63
  `diagrams_png` in `.featuredoc.yml` [`embed`]: `embed` (below), `file` (the PNG goes to
64
64
  `<output_dir>/img/<slug>-<diagram>.png`, linked with `![<title>](img/<slug>-<diagram>.png)`)
65
- or `off` (no image, only the Mermaid block).
65
+ or `off` (no image; the ` ```mermaid ` block stays in the document).
66
66
 
67
67
  - **Mode comes only from `.featuredoc.yml`.** No file or no `diagrams_png` key → `embed`.
68
68
  Never infer the mode from existing files (an `img/` folder, how an earlier doc did it).
@@ -70,23 +70,29 @@ or `off` (no image, only the Mermaid block).
70
70
  `![...](data:image/png;base64,`. A relative path such as `](img/` is an error: embed it and
71
71
  delete the loose PNG.
72
72
  - Embed the PNG with a script (read file → base64 → replace the line), never by hand.
73
+ - **No Mermaid source in the document** once its PNG is there: no ` ```mermaid ` block
74
+ and no `<details>` with the source. The source lives in
75
+ `<output_dir>/diagrams/<slug>-<diagram>.mmd`.
73
76
 
74
- 1. Write each ` ```mermaid ` block to a temporary `.mmd` file outside the repo and run:
75
- `npx -y @mermaid-js/mermaid-cli -i <tmp>.mmd -o <tmp>.png -s 2 -b white -t default -p <puppeteer.json>`
77
+ 1. Write each diagram to `<output_dir>/diagrams/<slug>-<diagram>.mmd` (`<diagram>`:
78
+ `c4-context`, `c4-container`, `class`, `sequence-current`, `sequence-new`) and run:
79
+ `npx -y @mermaid-js/mermaid-cli -i <that>.mmd -o <tmp>.png -s 2 -b white -t default -p <puppeteer.json>`
76
80
  (`-t default`: Mermaid's normal theme; newer versions otherwise colour every shape).
77
81
  2. Set `PUPPETEER_SKIP_DOWNLOAD=true`, and let `puppeteer.json` point at an installed
78
82
  browser, so no Chromium is downloaded:
79
83
  `{"executablePath": "C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}`
80
84
  (or Chrome). Ask the user once before the first npm download: package
81
85
  `@mermaid-js/mermaid-cli`, from the npm registry, about 50 MB with dependencies.
82
- 3. Directly below the block, after one empty line:
86
+ 3. In the document, in place of the block, two lines:
87
+ `<!-- kingmadoc:diagram diagrams/<slug>-<diagram>.mmd -->` and
83
88
  `![<diagram title>](data:image/png;base64,<base64 of the PNG>)`.
84
- No separate image files go into the repo.
85
- 4. The ` ```mermaid ` block always stays (GitHub shows no data URIs; the block is the
86
- source for the next render). On a new render, replace only the image line below
87
- the same block.
89
+ No separate image files go into the repo (`file` mode aside).
90
+ 4. To change a diagram, edit its `.mmd` file and render again; replace only the image
91
+ line below its comment. (GitHub shows no data-URI images; there the `.mmd` file is
92
+ the readable version.)
88
93
  5. Look at every PNG after rendering (Read): not empty, no labels cut off at the edge,
89
94
  no unexpected extra participants. If needed, fix the Mermaid (split or shorten a
90
95
  label) and render again.
91
- 6. If rendering fails, write `_TODO: PNG not generated: <reason>._` below the block
92
- (in `language`) and carry on; the document stays valid.
96
+ 6. If rendering fails, keep the ` ```mermaid ` block in the document, write
97
+ `_TODO: PNG not generated: <reason>._` below it (in `language`) and carry on; the
98
+ document stays valid.
@@ -44,7 +44,8 @@ files_expected: [<existing files or folders the user said will change>]
44
44
  ## Planned changes
45
45
 
46
46
  - `<path from files_expected>`: <what changes and why, one to three lines, no code
47
- blocks; the "how" from answer 4, or> _TODO: what changes here and why._
47
+ blocks (a small classDiagram with the changed members instead of a snippet); the "how"
48
+ from answer 4, or> _TODO: what changes here and why._
48
49
 
49
50
  ## Requirements
50
51
 
@@ -126,7 +127,7 @@ The classes this feature touches and their direct collaborators.
126
127
 
127
128
  Omit "**Answered while planning**" when nothing was answered.
128
129
 
129
- - Every diagram is a ` ```mermaid ` block with its PNG below it (see
130
+ - Every diagram is its PNG, with the Mermaid source in a `.mmd` file (see
130
131
  [Rendering](diagram-rules.md#rendering)); a disabled diagram keeps its section with
131
132
  _Disabled in `.featuredoc.yml` (`diagrams`)._
132
133
  - **Generated** is the real system time (`date -Iminutes`), never a guess.
File without changes
File without changes