kingmadoc 0.3.0.dev10__tar.gz → 0.3.0.dev11__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 (195) hide show
  1. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/PKG-INFO +1 -1
  2. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/examples/verify-mode-plan.md +34 -80
  3. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/SKILL.md +31 -8
  4. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/codex.md +134 -12
  5. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/copilot.md +134 -12
  6. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/cursor.md +135 -13
  7. kingmadoc-0.3.0.dev11/skill/reference/diagram-rules.md +81 -0
  8. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/reference/formats.md +60 -1
  9. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/config.py +24 -2
  10. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/plan/analyzer.py +4 -0
  11. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/plan/generator.py +6 -0
  12. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/templates/plan_default.md.j2 +35 -0
  13. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_config.py +7 -0
  14. kingmadoc-0.3.0.dev10/skill/reference/diagram-rules.md +0 -41
  15. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/.featuredoc.yml +0 -0
  16. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  17. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  18. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/.github/workflows/ci.yml +0 -0
  19. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/.github/workflows/release.yml +0 -0
  20. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/.gitignore +0 -0
  21. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/CHANGELOG.md +0 -0
  22. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/CLAUDE.md +0 -0
  23. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/CONTRIBUTING.md +0 -0
  24. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/LICENSE +0 -0
  25. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/README.md +0 -0
  26. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/docs/conventions.md +0 -0
  27. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/docs/index.md +0 -0
  28. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/docs/releasing.md +0 -0
  29. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/docs/roadmap.md +0 -0
  30. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/docs/test-plan.md +0 -0
  31. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/README.md +0 -0
  32. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop/manage.py +0 -0
  33. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop/requirements.txt +0 -0
  34. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop/shop/__init__.py +0 -0
  35. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop/shop/models.py +0 -0
  36. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop/shop/services.py +0 -0
  37. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop/shop/settings.py +0 -0
  38. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop/shop/urls.py +0 -0
  39. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop/shop/views.py +0 -0
  40. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop-discount/shop/discounts.py +0 -0
  41. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop-discount/shop/services.py +0 -0
  42. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/results/2026-09-27T111837Z.json +0 -0
  43. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/results/2026-09-27T112600Z.json +0 -0
  44. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/results/2026-09-27T162715Z.json +0 -0
  45. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/results/2026-09-28T064505Z.json +0 -0
  46. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/results/2026-09-28T092643Z.json +0 -0
  47. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/results/2026-09-28T093046Z.json +0 -0
  48. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/scenarios/explain-branch.yml +0 -0
  49. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/scenarios/explain-feature.yml +0 -0
  50. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/scenarios/explain-fo-to.yml +0 -0
  51. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/scenarios/plan-feature.yml +0 -0
  52. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/pyproject.toml +0 -0
  53. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/scripts/build_skill_variants.py +0 -0
  54. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/scripts/build_threat_reference.py +0 -0
  55. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/scripts/import_tmt_knowledge_base.py +0 -0
  56. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/scripts/run_evals.py +0 -0
  57. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/SKILL.md +0 -0
  58. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/reference/arc42.md +0 -0
  59. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/reference/c4-model.md +0 -0
  60. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/reference/c4.md +0 -0
  61. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/reference/models.md +0 -0
  62. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/reference/split.md +0 -0
  63. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/reference/stories.md +0 -0
  64. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/reference/threat-model.md +0 -0
  65. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/reference/threats.md +0 -0
  66. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/__init__.py +0 -0
  67. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/about.py +0 -0
  68. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/adr.py +0 -0
  69. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/cli.py +0 -0
  70. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/d2_binary.py +0 -0
  71. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/diagrams/__init__.py +0 -0
  72. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/diagrams/base.py +0 -0
  73. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/diagrams/d2.py +0 -0
  74. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/diagrams/mermaid.py +0 -0
  75. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/diagrams/plantuml.py +0 -0
  76. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/documents.py +0 -0
  77. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/exceptions.py +0 -0
  78. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/explain.py +0 -0
  79. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/__init__.py +0 -0
  80. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/branch.py +0 -0
  81. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/collect.py +0 -0
  82. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/data_model.py +0 -0
  83. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/dominators.py +0 -0
  84. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/js_modules.py +0 -0
  85. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/projects.py +0 -0
  86. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/routes.py +0 -0
  87. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/services.py +0 -0
  88. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/git.py +0 -0
  89. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/naming.py +0 -0
  90. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/plan/__init__.py +0 -0
  91. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/plan/dependencies.py +0 -0
  92. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/plan/models.py +0 -0
  93. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/plandoc.py +0 -0
  94. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/raster.py +0 -0
  95. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/render.py +0 -0
  96. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/scaffold.py +0 -0
  97. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/screenshots.py +0 -0
  98. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/skills.py +0 -0
  99. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/templates/adr.md.j2 +0 -0
  100. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/templates/domain_design.md.j2 +0 -0
  101. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/templates/functional_design.md.j2 +0 -0
  102. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/templates/security_design.md.j2 +0 -0
  103. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/templates/technical_design.md.j2 +0 -0
  104. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/templating.py +0 -0
  105. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/threats/__init__.py +0 -0
  106. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/threats/filters.py +0 -0
  107. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/threats/knowledge_base.py +0 -0
  108. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/threats/model.py +0 -0
  109. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/threats/report.py +0 -0
  110. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/threats/sdl_knowledge_base.json +0 -0
  111. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/verify/__init__.py +0 -0
  112. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/verify/changes.py +0 -0
  113. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/verify/commands.py +0 -0
  114. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/verify/deviations.py +0 -0
  115. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/verify/locate.py +0 -0
  116. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/verify/report.py +0 -0
  117. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/vscode.py +0 -0
  118. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/conftest.py +0 -0
  119. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/data/d2-sample.svg +0 -0
  120. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/d2/class.d2 +0 -0
  121. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/d2/component.d2 +0 -0
  122. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/d2/container.d2 +0 -0
  123. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/d2/context.d2 +0 -0
  124. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/d2/sequence.d2 +0 -0
  125. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/mermaid/class.mmd +0 -0
  126. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/mermaid/component.mmd +0 -0
  127. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/mermaid/container.mmd +0 -0
  128. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/mermaid/context.mmd +0 -0
  129. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/mermaid/sequence.mmd +0 -0
  130. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/plantuml/class.puml +0 -0
  131. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/plantuml/component.puml +0 -0
  132. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/plantuml/container.puml +0 -0
  133. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/plantuml/context.puml +0 -0
  134. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/plantuml/sequence.puml +0 -0
  135. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/mermaid/component.mmd +0 -0
  136. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/mermaid/container.mmd +0 -0
  137. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/mermaid/context.mmd +0 -0
  138. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_adr.py +0 -0
  139. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_adr_numbering.py +0 -0
  140. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_analyzer.py +0 -0
  141. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_cli.py +0 -0
  142. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_cli_encoding.py +0 -0
  143. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_cli_init.py +0 -0
  144. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_cli_plan_custom_template.py +0 -0
  145. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_cli_sigint.py +0 -0
  146. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_cli_verify_config.py +0 -0
  147. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_config_poetry.py +0 -0
  148. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_config_shape.py +0 -0
  149. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_d2_download.py +0 -0
  150. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_dependencies.py +0 -0
  151. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_dependency_graph_model.py +0 -0
  152. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_design_diagrams_compile.py +0 -0
  153. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_design_models.py +0 -0
  154. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_diagram_backends.py +0 -0
  155. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_diagrams_mermaid.py +0 -0
  156. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_documents.py +0 -0
  157. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_duplicate_names.py +0 -0
  158. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_evals.py +0 -0
  159. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_explain.py +0 -0
  160. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_explain_check.py +0 -0
  161. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_explain_config.py +0 -0
  162. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_explain_status.py +0 -0
  163. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_extra_designs_coverage.py +0 -0
  164. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_facts.py +0 -0
  165. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_facts_code.py +0 -0
  166. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_facts_data_model.py +0 -0
  167. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_facts_dominators.py +0 -0
  168. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_functional_design.py +0 -0
  169. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_generator.py +0 -0
  170. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_grep_performance.py +0 -0
  171. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_manifests.py +0 -0
  172. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_max_lines_per_file.py +0 -0
  173. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_output_dir.py +0 -0
  174. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_plan_e2e.py +0 -0
  175. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_plandoc.py +0 -0
  176. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_properties.py +0 -0
  177. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_raster.py +0 -0
  178. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_render.py +0 -0
  179. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_scaffold.py +0 -0
  180. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_screenshots.py +0 -0
  181. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_security_domain_designs.py +0 -0
  182. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_skill.py +0 -0
  183. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_skill_explaining_code.py +0 -0
  184. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_skill_models.py +0 -0
  185. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_skills_install.py +0 -0
  186. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_source_dirs.py +0 -0
  187. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_summary_slug_diagram_defaults.py +0 -0
  188. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_technical_design.py +0 -0
  189. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_templating_security.py +0 -0
  190. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_threats.py +0 -0
  191. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_verify.py +0 -0
  192. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_verify_locate.py +0 -0
  193. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_version.py +0 -0
  194. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_vscode_preview.py +0 -0
  195. {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: kingmadoc
3
- Version: 0.3.0.dev10
3
+ Version: 0.3.0.dev11
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
@@ -11,7 +11,7 @@ files_expected: ["src/kingmadoc/cli.py", "src/kingmadoc/verify"]
11
11
  |---|---|
12
12
  | **Project** | KingmaDoc |
13
13
  | **Status** | Draft |
14
- | **Generated** | 2026-09-28T11:26+02:00 by KingmaDoc 0.3.0.dev8 |
14
+ | **Generated** | 2026-09-28T10:44+00:00 by KingmaDoc 0.1.0.dev50 |
15
15
 
16
16
  > Generated before implementation. Fill in every _TODO_ and review everything marked
17
17
  > _(inferred)_: it comes from the codebase analysis and is a starting point, not the truth.
@@ -30,11 +30,17 @@ Add a verify mode that compares a plan doc against the implemented code.
30
30
 
31
31
  - _TODO: what it deliberately does not do._
32
32
 
33
+ ## Planned changes
34
+
35
+ - `src/kingmadoc/cli.py`: _TODO: what changes here and why._
36
+ - `src/kingmadoc/verify`: _TODO: what changes here and why._
37
+
33
38
  ## Requirements
34
39
 
35
40
  _Rewrite each in EARS: WHEN <trigger> THE SYSTEM SHALL <response>._
36
41
 
37
42
  - **REQ-1**: verify produces a doc listing deviations from the plan doc and test/lint results
43
+ Verified by: _TODO_
38
44
 
39
45
  ## Assumptions
40
46
 
@@ -75,6 +81,22 @@ C4Container
75
81
  Rel(user, kingmadoc, "Uses")
76
82
  ```
77
83
 
84
+ ## Class diagram (Mermaid)
85
+
86
+ The classes this feature touches and their direct collaborators.
87
+
88
+ _Disabled in `.featuredoc.yml` (`diagrams`)._
89
+
90
+ ## Sequence diagram (Mermaid)
91
+
92
+ ### Current (inferred)
93
+
94
+ _Disabled in `.featuredoc.yml` (`diagrams`)._
95
+
96
+ ### New
97
+
98
+ _Disabled in `.featuredoc.yml` (`diagrams`)._
99
+
78
100
  ## Open questions
79
101
 
80
102
  - [ ] _TODO: anything else that must be decided before implementation._
@@ -96,15 +118,15 @@ C4Container
96
118
 
97
119
  | Language | Files |
98
120
  |---|---|
99
- | python | 112 |
121
+ | python | 113 |
100
122
  | markdown | 28 |
101
123
  | jinja | 6 |
102
- | json | 5 |
103
124
  | yaml | 3 |
125
+ | json | 2 |
104
126
  | toml | 1 |
105
127
 
106
128
  <details>
107
- <summary>File tree (294 files)</summary>
129
+ <summary>File tree (230 files)</summary>
108
130
 
109
131
  ```text
110
132
  KingmaDoc/
@@ -124,47 +146,19 @@ KingmaDoc/
124
146
  │ ├── constants/
125
147
  │ │ ├── 021ecad571f501c4
126
148
  │ │ ├── 0379b6ca57f0783f
127
- │ │ ├── 0452f760e23a6d88
128
- │ │ ├── 06192107b861970d
129
- │ │ ├── 06ef3073f3824ec2
130
- │ │ ├── 07876857aeea90b1
131
- │ │ ├── 08cf9a45d6a50050
132
149
  │ │ ├── 0b0dfdcede5596e1
133
- │ │ ├── 0bad6ccfaf25648b
134
- │ │ ├── 0e97d01973676578
135
- │ │ ├── 0fe522cdbe58de88
136
- │ │ ├── 134ec28059d06de2
137
- │ │ ├── 15f3fb32b16d7e57
138
- │ │ ├── 18f6b8ff2f1baab4
139
- │ │ ├── 1b994a5d0c3430c4
150
+ │ │ ├── 1b81a71a7607fbf6
140
151
  │ │ ├── 2003bed8cb6acdf2
141
- │ │ ├── 2916d5e15f88e018
142
- │ │ ├── 2b68fb57acc40084
143
- │ │ ├── 2b782d5c2f962f88
144
- │ │ ├── 2be0ee3271f47e06
145
152
  │ │ ├── 2e00d1a2bca2c453
146
- │ │ ├── 30b41cb134ad3951
147
- │ │ ├── 321c789fc8b4c0f3
148
- │ │ ├── 36224745265ee8c1
149
- │ │ ├── 37b48c44fc264edf
150
153
  │ │ ├── 390efa9697d4e1bf
151
154
  │ │ ├── 429e7d227d43fa43
152
- │ │ ├── 433c532377bbde84
153
- │ │ ├── 4457a7b799badfdf
154
- │ │ ├── 472a546c691778e1
155
155
  │ │ ├── 488a16471d4a5a9a
156
156
  │ │ ├── 4c88cacf6c8e4c7d
157
- │ │ ├── 4d29db71b1bc8b24
158
157
  │ │ ├── 4f38a2b8fdbc0e4b
159
- │ │ ├── 51a950d876d1ab4e
160
158
  │ │ ├── 51c35758aac2bab5
161
- │ │ ├── 52fa9b12a8e99f1c
162
159
  │ │ ├── 55915e632dbf0f71
163
- │ │ ├── 561fe03ae02f5a17
164
- │ │ ├── 56c32eb59a5ec5ed
165
160
  │ │ ├── 57e843cfe884a224
166
161
  │ │ ├── 583a89d35ba933dd
167
- │ │ ├── 58d99efc68aa19b7
168
162
  │ │ ├── 5d45513b79aabad7
169
163
  │ │ ├── 5f0dcf0398739489
170
164
  │ │ ├── 5f8c64643045c357
@@ -172,80 +166,40 @@ KingmaDoc/
172
166
  │ │ ├── 686c8cce11251820
173
167
  │ │ ├── 69eaf0facf3541e7
174
168
  │ │ ├── 6b0fa85cb45db293
175
- │ │ ├── 6ba6186093f01b85
176
169
  │ │ ├── 7294e3a783cbf3a8
177
170
  │ │ ├── 7690150393b314b0
178
171
  │ │ ├── 7716c173bdc714c6
179
- │ │ ├── 78f4187c208c7544
180
- │ │ ├── 7bfef669ca020280
181
172
  │ │ ├── 7c1e245a4af2a784
182
- │ │ ├── 7c3cfd7bca628b35
183
- │ │ ├── 7c6945c0632031eb
184
173
  │ │ ├── 80f3eb9fe296aa5f
185
174
  │ │ ├── 8310d3b7a356f92f
186
175
  │ │ ├── 86419387d03b2884
187
- │ │ ├── 87d557d4d7ce8e21
176
+ │ │ ├── 8aa219ffee19f95c
188
177
  │ │ ├── 8b1b03f5681dbbd2
189
- │ │ ├── 8dbb0f299a88491e
190
178
  │ │ ├── 8ee2b55b51643314
191
- │ │ ├── 9047d8cfcf2f6c04
192
- │ │ ├── 91e931027e8ebe98
193
- │ │ ├── 95c1bd9692d5af02
194
179
  │ │ ├── 969910a0ba7bf0a2
195
- │ │ ├── 982f45a072cecbbb
196
- │ │ ├── 9e17c1aadef85e32
197
- │ │ ├── a537bbf4207c137b
180
+ │ │ ├── a50b8adba853bc36
198
181
  │ │ ├── aaad66f0208d6fda
199
182
  │ │ ├── adb700443bac7ce4
200
183
  │ │ ├── b14d3b80cc53ed3d
201
- │ │ ├── b4489de5426f1782
202
- │ │ ├── b4ad5a7efa63c99a
203
- │ │ ├── b607a0ae6852e1cc
204
- │ │ ├── b6dad0dd5ebdf5ec
205
- │ │ ├── bacc1063c7332f9d
206
184
  │ │ ├── bb0b868e4b9a8187
207
- │ │ ├── bbad5588eb7b8055
208
- │ │ ├── bee5e67a8e93cb55
209
- │ │ ├── c06f4747e82bf550
210
185
  │ │ ├── c0b457a05760d55b
211
186
  │ │ ├── c12237819ce468fd
187
+ │ │ ├── c2581a6a64184d40
212
188
  │ │ ├── c743dc86980c4608
213
189
  │ │ ├── c7c62939844fec2e
214
190
  │ │ ├── cc4dfad2dc9d75e2
215
- │ │ ├── ccd6d148a9b2486f
216
- │ │ ├── d5d6e65cc7402c90
191
+ │ │ ├── cd82d38bc12deabd
217
192
  │ │ ├── d6e5d66b09a82b49
218
- │ │ ├── dc8b9fdffcf4ce95
193
+ │ │ ├── da39a3ee5e6b4b0d
219
194
  │ │ ├── e36626a891f1bf04
220
- │ │ ├── e69acc629894311a
221
- │ │ ├── ea35e4be0e371411
222
195
  │ │ ├── eb95a699ef557106
223
- │ │ ├── f1297fd267b34331
224
- │ │ ├── f16726e173deedc4
225
196
  │ │ ├── f4481751579327cb
226
- │ │ ├── f4a76cd809f6b59b
227
197
  │ │ ├── fb02557056414592
228
- │ │ ├── fdfd47c59de6a608
229
- │ │ └── fff51a5fcff07aa9
230
- │ ├── examples/
231
- │ │ ├── 04e6b3400353b141/
232
- │ │ │ └── …
233
- │ │ ├── 1fe65f17de776f9b/
234
- │ │ │ └── …
235
- │ │ ├── 69596e946b8b389f/
236
- │ │ │ └── …
237
- │ │ └── a7da011a58f5abe3/
238
- │ │ └── …
198
+ │ │ └── fdfd47c59de6a608
239
199
  │ ├── unicode_data/
240
200
  │ │ └── 14.0.0/
241
201
  │ │ └── …
242
202
  │ └── .gitignore
243
- ├── .import_linter_cache/
244
- │ ├── .gitignore
245
- │ ├── 3516dc116b537972f63cac11b7ceb5fffe116986.data.json
246
- │ ├── 7972b21a515604c6ceefaf3a33ef88e57b8115b6.data.json
247
- │ ├── CACHEDIR.TAG
248
- │ └── kingmadoc.meta.json
249
203
  ├── docs/
250
204
  │ ├── conventions.md
251
205
  │ ├── index.md
@@ -328,6 +282,7 @@ KingmaDoc/
328
282
  │ ├── test_d2_download.py
329
283
  │ ├── test_dependencies.py
330
284
  │ ├── test_dependency_graph_model.py
285
+ │ ├── test_design_diagrams_compile.py
331
286
  │ ├── test_design_models.py
332
287
  │ ├── test_diagram_backends.py
333
288
  │ ├── test_diagrams_mermaid.py
@@ -370,7 +325,6 @@ KingmaDoc/
370
325
  │ ├── test_verify_locate.py
371
326
  │ ├── test_version.py
372
327
  │ └── test_vscode_preview.py
373
- ├── .coverage
374
328
  ├── .featuredoc.yml
375
329
  ├── .gitignore
376
330
  ├── CHANGELOG.md
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: kingmadoc
3
- description: Generates a Feature Design Doc (plan) before a feature is implemented and a Feature Verification Doc afterwards, with Mermaid C4 diagrams inferred from the codebase. Use when the user asks to plan, design, or scope a new feature before writing code, or to verify, review, or check what was built against its plan. Works without installing anything; uses the kingmadoc CLI when it is available.
3
+ description: Generates a Feature Design Doc (plan) before a feature is implemented and a Feature Verification Doc afterwards, with Mermaid C4 diagrams inferred from the codebase. Use when the user asks to plan, design, or scope a new feature before writing code (also "feature design", "technical design", "document over een issue/fix", "ontwerp", "plan", "hoe gaan we dit oplossen", "technisch ontwerp"), or to verify, review, or check what was built against its plan. Works without installing anything; uses the kingmadoc CLI when it is available.
4
4
  version: 1.2.0
5
5
  allowed-tools: [Read, Write, Glob, Grep, Bash]
6
6
  ---
@@ -52,7 +52,11 @@ brackets); ignore the file if it is absent:
52
52
  - `analyzer.exclude_dirs` [`.git`, `node_modules`, `.venv`, `venv`, `__pycache__`,
53
53
  `dist`, `build`, `*.egg-info`, tool caches], `analyzer.max_files` [`5000`],
54
54
  `analyzer.tree_depth` [`3`].
55
- - `diagrams` [`c4_context`, `c4_container`]: which C4 sections get a diagram.
55
+ - `diagrams` [`c4_context`, `c4_container`, `class`, `sequence`]: which sections get
56
+ a diagram.
57
+ - `diagrams_png` [`embed`]: `embed`, `file` or `off`; see
58
+ [Rendering](reference/diagram-rules.md#rendering).
59
+ - `language` [`en`]: language of fixed sentences, notes and captions (headings stay English).
56
60
  - `extra_designs.functional_design.enabled` / `extra_designs.technical_design.enabled`
57
61
  [`false`]: also write a functional and/or technical design doc. By default only the
58
62
  plan is written. The request decides directly, without asking back: "FO and TO",
@@ -75,7 +79,8 @@ step. Otherwise use Glob/Grep (never read the whole codebase):
75
79
  and note in the appendix that the analysis is truncated.
76
80
  2. **Languages.** Count files per extension: `.py` python, `.js/.jsx/.mjs` javascript,
77
81
  `.ts/.tsx` typescript, `.go` go, `.rs` rust, `.java` java, `.kt` kotlin, `.rb` ruby,
78
- `.php` php, `.cs` csharp, `.md` markdown, `.json` json, `.toml` toml,
82
+ `.php` php, `.cs` csharp, `.vb` vb, `.ps1` powershell, `.sql` sql, `.xml` xml,
83
+ `.sh` shell, `.cshtml` razor, `.md` markdown, `.json` json, `.toml` toml,
79
84
  `.yml/.yaml` yaml, and so on. Sort by count, highest first.
80
85
  3. **Top-level directories** that contain files.
81
86
  4. **Entry points**: files named `main.py`, `app.py`, `__main__.py`, `manage.py`,
@@ -95,8 +100,13 @@ step. Otherwise use Glob/Grep (never read the whole codebase):
95
100
  what you actually found.
96
101
  8. **Containers** for the C4 Container diagram: directories with source code
97
102
  (`src/<pkg>` counts as `<pkg>`; skip `tests`, `docs`, `examples`, `scripts`, hidden
98
- directories), at most 6. Technology = the most common language inside. If there are
99
- none, use one container named after the project, described as "Main application".
103
+ directories), at most 6. Technology: first the project files (`.csproj` → C#,
104
+ `.vbproj` → VB.NET, `package.json` → JavaScript/TypeScript, `pyproject.toml` →
105
+ Python), only then the most common extension inside, not counting test data and
106
+ fixtures. If there are none, use one container named after the project, described
107
+ as "Main application".
108
+ 9. **Open changes**: `git status --short` and `git stash list`; note the ones that
109
+ touch the feature (see the plan format's Appendix).
100
110
 
101
111
  ### Step 3. Ask clarifying questions
102
112
 
@@ -109,6 +119,8 @@ message, and say they may skip any:
109
119
  4. Which existing modules will change? (mention the detected containers)
110
120
  5. How will you know it works? List the acceptance criteria.
111
121
 
122
+ Answers already in the conversation or the request are filled in as a proposal
123
+ ("Proposal: … — is this right?"), so the user only confirms or corrects them.
112
124
  If you cannot ask (non-interactive run), or the user skips a question, list it under
113
125
  **Open questions** instead. Use the answers to fill in scope, assumptions, risks and
114
126
  the diagrams, but never beyond what the user said or the code shows.
@@ -128,8 +140,17 @@ the diagrams, but never beyond what the user said or the code shows.
128
140
  the existing files or folders from answer 4 (`[]` if none). Tools read this block.
129
141
  - **Requirements**: each acceptance criterion from answer 5 becomes `- **REQ-n**:` in EARS
130
142
  (`WHEN <trigger> THE SYSTEM SHALL <response>`, `IF <condition> THEN THE SYSTEM SHALL …`),
131
- numbered from 1; none given: one `_TODO_` requirement.
132
- - External systems named in answer 3 go into the C4 Context diagram as `System_Ext`.
143
+ numbered from 1; none given: one `_TODO_` requirement. A vague criterion ("all tests
144
+ pass"): propose concrete EARS requirements and ask for confirmation, rather than one
145
+ vague REQ or invented ones. Under each: `Verified by: <test, test case or command>`
146
+ (or `_TODO_`).
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
149
+ findings marked _(inferred)_.
150
+ - **Generated**: the real system time (`date -Iminutes`).
151
+ - External systems: those from answer 3, plus systems the code demonstrably uses
152
+ (the latter marked _(inferred)_ below the diagram), as `System_Ext` in the Context
153
+ diagram.
133
154
  - Follow the [diagram rules](reference/diagram-rules.md).
134
155
 
135
156
  ### Step 5. Write the file and ask for approval
@@ -187,7 +208,9 @@ Check each item and record every mismatch as a deviation:
187
208
  - **Requirements**: each `REQ-n` is met (name the code or test), partly met, or not met.
188
209
  Files in `files_expected` that were never touched are deviations too.
189
210
  - **Architecture**: containers and external systems in the code match the C4
190
- diagrams (new services, databases, queues or APIs count as deviations).
211
+ diagrams (new services, databases, queues or APIs count as deviations), and the
212
+ built classes and calls match the class and sequence diagrams (Area: Architecture).
213
+ If the diagrams in the plan changed, render them again.
191
214
  - **Assumptions**: still true in the code (e.g. "uses the existing auth module").
192
215
  - **Risks**: each risk is mitigated, accepted, or still open.
193
216
  - **Open questions**: resolved by the implementation, or still open.
@@ -52,7 +52,11 @@ brackets); ignore the file if it is absent:
52
52
  - `analyzer.exclude_dirs` [`.git`, `node_modules`, `.venv`, `venv`, `__pycache__`,
53
53
  `dist`, `build`, `*.egg-info`, tool caches], `analyzer.max_files` [`5000`],
54
54
  `analyzer.tree_depth` [`3`].
55
- - `diagrams` [`c4_context`, `c4_container`]: which C4 sections get a diagram.
55
+ - `diagrams` [`c4_context`, `c4_container`, `class`, `sequence`]: which sections get
56
+ a diagram.
57
+ - `diagrams_png` [`embed`]: `embed`, `file` or `off`; see
58
+ [Rendering](#rendering).
59
+ - `language` [`en`]: language of fixed sentences, notes and captions (headings stay English).
56
60
  - `extra_designs.functional_design.enabled` / `extra_designs.technical_design.enabled`
57
61
  [`false`]: also write a functional and/or technical design doc. By default only the
58
62
  plan is written. The request decides directly, without asking back: "FO and TO",
@@ -75,7 +79,8 @@ step. Otherwise use file search and text search (never read the whole codebase):
75
79
  and note in the appendix that the analysis is truncated.
76
80
  2. **Languages.** Count files per extension: `.py` python, `.js/.jsx/.mjs` javascript,
77
81
  `.ts/.tsx` typescript, `.go` go, `.rs` rust, `.java` java, `.kt` kotlin, `.rb` ruby,
78
- `.php` php, `.cs` csharp, `.md` markdown, `.json` json, `.toml` toml,
82
+ `.php` php, `.cs` csharp, `.vb` vb, `.ps1` powershell, `.sql` sql, `.xml` xml,
83
+ `.sh` shell, `.cshtml` razor, `.md` markdown, `.json` json, `.toml` toml,
79
84
  `.yml/.yaml` yaml, and so on. Sort by count, highest first.
80
85
  3. **Top-level directories** that contain files.
81
86
  4. **Entry points**: files named `main.py`, `app.py`, `__main__.py`, `manage.py`,
@@ -95,8 +100,13 @@ step. Otherwise use file search and text search (never read the whole codebase):
95
100
  what you actually found.
96
101
  8. **Containers** for the C4 Container diagram: directories with source code
97
102
  (`src/<pkg>` counts as `<pkg>`; skip `tests`, `docs`, `examples`, `scripts`, hidden
98
- directories), at most 6. Technology = the most common language inside. If there are
99
- none, use one container named after the project, described as "Main application".
103
+ directories), at most 6. Technology: first the project files (`.csproj` → C#,
104
+ `.vbproj` → VB.NET, `package.json` → JavaScript/TypeScript, `pyproject.toml` →
105
+ Python), only then the most common extension inside, not counting test data and
106
+ fixtures. If there are none, use one container named after the project, described
107
+ as "Main application".
108
+ 9. **Open changes**: `git status --short` and `git stash list`; note the ones that
109
+ touch the feature (see the plan format's Appendix).
100
110
 
101
111
  ### Step 3. Ask clarifying questions
102
112
 
@@ -109,6 +119,8 @@ message, and say they may skip any:
109
119
  4. Which existing modules will change? (mention the detected containers)
110
120
  5. How will you know it works? List the acceptance criteria.
111
121
 
122
+ Answers already in the conversation or the request are filled in as a proposal
123
+ ("Proposal: … — is this right?"), so the user only confirms or corrects them.
112
124
  If you cannot ask (non-interactive run), or the user skips a question, list it under
113
125
  **Open questions** instead. Use the answers to fill in scope, assumptions, risks and
114
126
  the diagrams, but never beyond what the user said or the code shows.
@@ -128,8 +140,17 @@ the diagrams, but never beyond what the user said or the code shows.
128
140
  the existing files or folders from answer 4 (`[]` if none). Tools read this block.
129
141
  - **Requirements**: each acceptance criterion from answer 5 becomes `- **REQ-n**:` in EARS
130
142
  (`WHEN <trigger> THE SYSTEM SHALL <response>`, `IF <condition> THEN THE SYSTEM SHALL …`),
131
- numbered from 1; none given: one `_TODO_` requirement.
132
- - External systems named in answer 3 go into the C4 Context diagram as `System_Ext`.
143
+ numbered from 1; none given: one `_TODO_` requirement. A vague criterion ("all tests
144
+ pass"): propose concrete EARS requirements and ask for confirmation, rather than one
145
+ vague REQ or invented ones. Under each: `Verified by: <test, test case or command>`
146
+ (or `_TODO_`).
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
149
+ findings marked _(inferred)_.
150
+ - **Generated**: the real system time (`date -Iminutes`).
151
+ - External systems: those from answer 3, plus systems the code demonstrably uses
152
+ (the latter marked _(inferred)_ below the diagram), as `System_Ext` in the Context
153
+ diagram.
133
154
  - Follow the [diagram rules](#diagram-rules).
134
155
 
135
156
  ### Step 5. Write the file and ask for approval
@@ -187,7 +208,9 @@ Check each item and record every mismatch as a deviation:
187
208
  - **Requirements**: each `REQ-n` is met (name the code or test), partly met, or not met.
188
209
  Files in `files_expected` that were never touched are deviations too.
189
210
  - **Architecture**: containers and external systems in the code match the C4
190
- diagrams (new services, databases, queues or APIs count as deviations).
211
+ diagrams (new services, databases, queues or APIs count as deviations), and the
212
+ built classes and calls match the class and sequence diagrams (Area: Architecture).
213
+ If the diagrams in the plan changed, render them again.
191
214
  - **Assumptions**: still true in the code (e.g. "uses the existing auth module").
192
215
  - **Risks**: each risk is mitigated, accepted, or still open.
193
216
  - **Open questions**: resolved by the implementation, or still open.
@@ -206,12 +229,17 @@ not run). Show the user the path, the number of deviations, and any failing chec
206
229
 
207
230
  ## Diagram rules
208
231
 
209
- - **Always Mermaid** (ignore `diagram_format`; PlantUML/D2 are CLI-only). No images.
232
+ - **Always Mermaid** (ignore `diagram_format`; PlantUML/D2 are CLI-only). Mermaid is
233
+ the source of truth; every diagram is also rendered to a PNG and embedded in the
234
+ Markdown (see [Rendering](#rendering)).
210
235
  - **Always fenced**: every diagram is a complete ` ```mermaid ` … ` ``` `
211
236
  block, with nothing else inside it.
212
237
  - **Always labeled**:
213
- - the first line after the diagram type is `title <text>`
238
+ - C4 and `sequenceDiagram`: the first line after the diagram type is `title <text>`
214
239
  (`System Context: <project>`, `Containers: <project>`);
240
+ - `classDiagram`, `erDiagram` and `flowchart` have no `title` line; put frontmatter
241
+ before the diagram type instead: `---`, `title: "<text>"`, `---` (quote the
242
+ title: an unquoted `:` breaks the YAML and the render);
215
243
  - every element has a quoted label: `Person(alias, "Label", "Description")`,
216
244
  `System(alias, "Label", "Description")`, `System_Ext(…)`,
217
245
  `Container(alias, "Label", "Technology", "Description")`. Omit an unknown
@@ -223,9 +251,18 @@ not run). Show the user the path, the number of deviations, and any failing chec
223
251
  `System_Boundary` alias ends in `_boundary` and is never used in `Rel`.
224
252
  - **Escaping**: inside quoted labels write `"` as `#quot;`. In titles, leave quotes as
225
253
  they are and drop `#` and `;` (they end a C4 title). Put everything on one line.
254
+ - **Short labels**: about 50 characters at most; split a long message in two.
255
+ - **Sequence aliases**: never `x`, `X`, `o` or `O` (they clash with the `-x` and `-o`
256
+ arrows); use abbreviations of two or more letters (`ct`, `svc`).
226
257
  - **Inferred content**: anything derived from the code (containers, technologies)
227
258
  must be marked _(inferred)_ in the text around the diagram. Do not add systems nobody
228
259
  mentioned and the code does not show.
260
+ - **External systems** (Context diagram): the systems from answer 3, plus systems the
261
+ code demonstrably uses; the latter are marked _(inferred)_ in the text below the
262
+ diagram.
263
+ - **Changed containers**: in the Container diagram, mark each container the feature
264
+ touches with `UpdateElementStyle(<alias>, $bgColor="#d9822b")` or `(changes)` at the
265
+ end of its description.
229
266
  - **Container diagram layout**: the `System_Boundary` holds the containers; the `User`
230
267
  person sits outside it, with `Rel(user, <first container>, "Uses")`.
231
268
 
@@ -243,8 +280,34 @@ C4Context
243
280
  Rel(shop, sendgrid, "Sends email via")
244
281
  ```
245
282
 
246
- If a diagram is disabled in `.featuredoc.yml`, keep its section and replace the
247
- diagram with this line: _Disabled in `.featuredoc.yml` (`diagrams`)._
283
+ `diagrams` in `.featuredoc.yml` [`c4_context`, `c4_container`, `class`, `sequence`]
284
+ selects the diagrams. If one is disabled, keep its section and replace the diagram with
285
+ this line: _Disabled in `.featuredoc.yml` (`diagrams`)._
286
+
287
+ ## Rendering
288
+
289
+ `diagrams_png` in `.featuredoc.yml` [`embed`]: `embed` (below), `file` (the PNG goes to
290
+ `<output_dir>/img/<slug>-<diagram>.png`, linked with `![<title>](img/<slug>-<diagram>.png)`)
291
+ or `off` (no image, only the Mermaid block).
292
+
293
+ 1. Write each ` ```mermaid ` block to a temporary `.mmd` file outside the repo and run:
294
+ `npx -y @mermaid-js/mermaid-cli -i <tmp>.mmd -o <tmp>.png -s 2 -b white -p <puppeteer.json>`
295
+ 2. Set `PUPPETEER_SKIP_DOWNLOAD=true`, and let `puppeteer.json` point at an installed
296
+ browser, so no Chromium is downloaded:
297
+ `{"executablePath": "C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}`
298
+ (or Chrome). Ask the user once before the first npm download: package
299
+ `@mermaid-js/mermaid-cli`, from the npm registry, about 50 MB with dependencies.
300
+ 3. Directly below the block, after one empty line:
301
+ `![<diagram title>](data:image/png;base64,<base64 of the PNG>)`.
302
+ No separate image files go into the repo.
303
+ 4. The ` ```mermaid ` block always stays (GitHub shows no data URIs; the block is the
304
+ source for the next render). On a new render, replace only the image line below
305
+ the same block.
306
+ 5. Look at every PNG after rendering (Read): not empty, no labels cut off at the edge,
307
+ no unexpected extra participants. If needed, fix the Mermaid (split or shorten a
308
+ label) and render again.
309
+ 6. If rendering fails, write `_TODO: PNG not generated: <reason>._` below the block
310
+ (in `language`) and carry on; the document stays valid.
248
311
 
249
312
  ## Output format
250
313
 
@@ -289,18 +352,27 @@ files_expected: [<existing files or folders the user said will change>]
289
352
 
290
353
  - <from the answers, or> _TODO: what it deliberately does not do._
291
354
 
355
+ ## Planned changes
356
+
357
+ - `<path from files_expected>`: <what changes and why, one to three lines, no code
358
+ blocks; the "how" from answer 4, or> _TODO: what changes here and why._
359
+
292
360
  ## Requirements
293
361
 
294
362
  - **REQ-1**: <WHEN <trigger> THE SYSTEM SHALL <response>, from the acceptance criteria, or>
295
363
  _TODO: WHEN <trigger> THE SYSTEM SHALL <response>._
364
+ Verified by: <test, test case or command, or> _TODO_
296
365
 
297
366
  ## Assumptions
298
367
 
299
368
  - _(inferred)_ Built on the existing stack: <stack>.
369
+ - <from the answers, or a code finding marked> _(inferred)_
300
370
  - _TODO: what must be true for this plan to work (users, data, services, limits)._
301
371
 
302
372
  ## Risks
303
373
 
374
+ - <from the answers, or a code finding marked> _(inferred)_ <e.g. a shared base class
375
+ other parts also use>
304
376
  - _TODO: what could go wrong, and how you will notice or limit it._
305
377
 
306
378
  ## C4 Context (Mermaid)
@@ -313,7 +385,23 @@ Who uses the system and which external systems it depends on.
313
385
 
314
386
  The runnable units inside the system _(inferred from source directories)_.
315
387
 
316
- <C4Container diagram>
388
+ <C4Container diagram; containers the feature touches are marked>
389
+
390
+ ## Class diagram (Mermaid)
391
+
392
+ The classes this feature touches and their direct collaborators.
393
+
394
+ <classDiagram>
395
+
396
+ ## Sequence diagram (Mermaid)
397
+
398
+ ### Current (inferred)
399
+
400
+ <sequenceDiagram of today's flow, with the place where it goes wrong as a Note>
401
+
402
+ ### New
403
+
404
+ <sequenceDiagram of the flow after the change>
317
405
 
318
406
  ## Open questions
319
407
 
@@ -330,6 +418,8 @@ The runnable units inside the system _(inferred from source directories)_.
330
418
  - **Entry points:** <`path`, … or _none found_>
331
419
  - **Config files:** <`path`, … or _none found_>
332
420
  - **Test directories:** <`path`, … or _none found_>
421
+ - **Open changes:** <`git status --short` / `git stash list` entries that touch the
422
+ feature, or _none_>
333
423
 
334
424
  | Language | Files |
335
425
  | ---------- | ------- |
@@ -347,6 +437,38 @@ The runnable units inside the system _(inferred from source directories)_.
347
437
 
348
438
  Omit "**Answered while planning**" when nothing was answered.
349
439
 
440
+ - Every diagram is a ` ```mermaid ` block with its PNG below it (see
441
+ [Rendering](diagram-rules.md#rendering)); a disabled diagram keeps its section with
442
+ _Disabled in `.featuredoc.yml` (`diagrams`)._
443
+ - **Generated** is the real system time (`date -Iminutes`), never a guess.
444
+ - **Class diagram**: a `classDiagram` of the classes the feature touches and their
445
+ direct collaborators (inherits, calls, creates), with only the relevant members.
446
+ `<<changed>>` on existing classes that change, `<<new>>` on new ones, and a `note for
447
+ <Class>` saying what is new or changed. Existing classes and relations come from the
448
+ code and are _(inferred)_; new ones only when the user or "Planned changes" name them.
449
+ - **Sequence diagram**: two diagrams, from the entry point (a test or command) to the
450
+ result, with real classes as participants and real method names as messages;
451
+ `activate`/`deactivate` for nested calls, `alt`/`opt` for branches. In **Current**,
452
+ a `Note` marks where it goes wrong.
453
+ - **Open changes**: when an uncommitted change or stash touches the feature, also list
454
+ it under Open questions.
455
+ - `language` in `.featuredoc.yml` [`en`]: headings stay English (the CLI's), but fixed
456
+ sentences, notes and captions are written in that language.
457
+
458
+ File tree example (`tree_depth: 3`; `…` indented under every cut-off folder):
459
+
460
+ ```text
461
+ shop/
462
+ src/
463
+ shop/
464
+ …
465
+ tests/
466
+ unit/
467
+ …
468
+ conftest.py
469
+ pyproject.toml
470
+ ```
471
+
350
472
  ### Functional design doc: `docs/features/<slug>-functional-design.md`
351
473
 
352
474
  Only when enabled. Same header table as the plan, with a **Plan** row linking