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.
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/PKG-INFO +1 -1
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/examples/verify-mode-plan.md +34 -80
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/SKILL.md +31 -8
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/codex.md +134 -12
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/copilot.md +134 -12
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/cursor.md +135 -13
- kingmadoc-0.3.0.dev11/skill/reference/diagram-rules.md +81 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/reference/formats.md +60 -1
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/config.py +24 -2
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/plan/analyzer.py +4 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/plan/generator.py +6 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/templates/plan_default.md.j2 +35 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_config.py +7 -0
- kingmadoc-0.3.0.dev10/skill/reference/diagram-rules.md +0 -41
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/.featuredoc.yml +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/.github/workflows/ci.yml +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/.github/workflows/release.yml +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/.gitignore +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/CHANGELOG.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/CLAUDE.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/CONTRIBUTING.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/LICENSE +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/README.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/docs/conventions.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/docs/index.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/docs/releasing.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/docs/roadmap.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/docs/test-plan.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/README.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop/manage.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop/requirements.txt +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop/shop/__init__.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop/shop/models.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop/shop/services.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop/shop/settings.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop/shop/urls.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop/shop/views.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop-discount/shop/discounts.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/fixtures/shop-discount/shop/services.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/results/2026-09-27T111837Z.json +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/results/2026-09-27T112600Z.json +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/results/2026-09-27T162715Z.json +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/results/2026-09-28T064505Z.json +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/results/2026-09-28T092643Z.json +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/results/2026-09-28T093046Z.json +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/scenarios/explain-branch.yml +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/scenarios/explain-feature.yml +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/scenarios/explain-fo-to.yml +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/evals/scenarios/plan-feature.yml +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/pyproject.toml +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/scripts/build_skill_variants.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/scripts/build_threat_reference.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/scripts/import_tmt_knowledge_base.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/scripts/run_evals.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/SKILL.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/reference/arc42.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/reference/c4-model.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/reference/c4.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/reference/models.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/reference/split.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/reference/stories.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/reference/threat-model.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/skill/explaining-code/reference/threats.md +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/__init__.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/about.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/adr.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/cli.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/d2_binary.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/diagrams/__init__.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/diagrams/base.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/diagrams/d2.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/diagrams/mermaid.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/diagrams/plantuml.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/documents.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/exceptions.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/explain.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/__init__.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/branch.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/collect.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/data_model.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/dominators.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/js_modules.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/projects.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/routes.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/facts/services.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/git.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/naming.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/plan/__init__.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/plan/dependencies.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/plan/models.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/plandoc.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/raster.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/render.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/scaffold.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/screenshots.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/skills.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/templates/adr.md.j2 +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/templates/domain_design.md.j2 +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/templates/functional_design.md.j2 +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/templates/security_design.md.j2 +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/templates/technical_design.md.j2 +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/templating.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/threats/__init__.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/threats/filters.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/threats/knowledge_base.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/threats/model.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/threats/report.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/threats/sdl_knowledge_base.json +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/verify/__init__.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/verify/changes.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/verify/commands.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/verify/deviations.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/verify/locate.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/verify/report.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/src/kingmadoc/vscode.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/conftest.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/data/d2-sample.svg +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/d2/class.d2 +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/d2/component.d2 +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/d2/container.d2 +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/d2/context.d2 +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/d2/sequence.d2 +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/mermaid/class.mmd +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/mermaid/component.mmd +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/mermaid/container.mmd +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/mermaid/context.mmd +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/mermaid/sequence.mmd +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/plantuml/class.puml +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/plantuml/component.puml +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/plantuml/container.puml +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/plantuml/context.puml +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/backends/plantuml/sequence.puml +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/mermaid/component.mmd +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/mermaid/container.mmd +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/fixtures/mermaid/context.mmd +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_adr.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_adr_numbering.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_analyzer.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_cli.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_cli_encoding.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_cli_init.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_cli_plan_custom_template.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_cli_sigint.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_cli_verify_config.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_config_poetry.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_config_shape.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_d2_download.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_dependencies.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_dependency_graph_model.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_design_diagrams_compile.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_design_models.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_diagram_backends.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_diagrams_mermaid.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_documents.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_duplicate_names.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_evals.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_explain.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_explain_check.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_explain_config.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_explain_status.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_extra_designs_coverage.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_facts.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_facts_code.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_facts_data_model.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_facts_dominators.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_functional_design.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_generator.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_grep_performance.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_manifests.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_max_lines_per_file.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_output_dir.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_plan_e2e.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_plandoc.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_properties.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_raster.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_render.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_scaffold.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_screenshots.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_security_domain_designs.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_skill.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_skill_explaining_code.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_skill_models.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_skills_install.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_source_dirs.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_summary_slug_diagram_defaults.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_technical_design.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_templating_security.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_threats.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_verify.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_verify_locate.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_version.py +0 -0
- {kingmadoc-0.3.0.dev10 → kingmadoc-0.3.0.dev11}/tests/test_vscode_preview.py +0 -0
- {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.
|
|
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-
|
|
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 |
|
|
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 (
|
|
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
|
-
│ │ ├──
|
|
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
|
-
│ │ ├──
|
|
176
|
+
│ │ ├── 8aa219ffee19f95c
|
|
188
177
|
│ │ ├── 8b1b03f5681dbbd2
|
|
189
|
-
│ │ ├── 8dbb0f299a88491e
|
|
190
178
|
│ │ ├── 8ee2b55b51643314
|
|
191
|
-
│ │ ├── 9047d8cfcf2f6c04
|
|
192
|
-
│ │ ├── 91e931027e8ebe98
|
|
193
|
-
│ │ ├── 95c1bd9692d5af02
|
|
194
179
|
│ │ ├── 969910a0ba7bf0a2
|
|
195
|
-
│ │ ├──
|
|
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
|
-
│ │ ├──
|
|
216
|
-
│ │ ├── d5d6e65cc7402c90
|
|
191
|
+
│ │ ├── cd82d38bc12deabd
|
|
217
192
|
│ │ ├── d6e5d66b09a82b49
|
|
218
|
-
│ │ ├──
|
|
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
|
-
│ │
|
|
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
|
|
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, `.
|
|
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
|
|
99
|
-
|
|
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
|
-
|
|
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
|
|
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, `.
|
|
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
|
|
99
|
-
|
|
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
|
-
|
|
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).
|
|
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
|
-
|
|
247
|
-
|
|
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 ``)
|
|
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
|
+
``.
|
|
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
|