codd-dev 1.41.0__tar.gz → 2.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {codd_dev-1.41.0 → codd_dev-2.0.0}/PKG-INFO +73 -28
- {codd_dev-1.41.0 → codd_dev-2.0.0}/README.md +72 -27
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/__init__.py +1 -1
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/cli.py +174 -1
- codd_dev-2.0.0/codd/lexicon_cli/__init__.py +17 -0
- codd_dev-2.0.0/codd/lexicon_cli/formatters/__init__.py +12 -0
- codd_dev-2.0.0/codd/lexicon_cli/formatters/html.py +51 -0
- codd_dev-2.0.0/codd/lexicon_cli/formatters/json_fmt.py +24 -0
- codd_dev-2.0.0/codd/lexicon_cli/formatters/md.py +64 -0
- codd_dev-2.0.0/codd/lexicon_cli/inspector.py +266 -0
- codd_dev-2.0.0/codd/lexicon_cli/manager.py +207 -0
- codd_dev-2.0.0/codd/lexicon_cli/reporter.py +88 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/pyproject.toml +5 -5
- {codd_dev-1.41.0 → codd_dev-2.0.0}/.gitignore +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/LICENSE +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/__main__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/_git_helper.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/assembler.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/bridge.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/clustering.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/coherence_engine.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/config.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/contracts.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/builder.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/extractor.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/dag/runner.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/defaults.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployer.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/design_md.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/diff/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/diff/apply.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/diff/engine.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/diff/persistence.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/drift.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/e2e_generator.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/e2e_runner.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/elicit/apply.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/elicit/engine.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/elicit/finding.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/env_refs.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/extract_ai.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/extractor.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/fixer.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/fixup_drift.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/generator.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/graph.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/hitl_session.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/implementer.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/inheritance.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/init/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/lexicon.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/approval.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/parser.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/mcp_server.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/measure.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/parsing.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/planner.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/policy.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/propagate.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/propagator.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/registry.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair/engine.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair/history.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair/loop.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair/schema.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/repair_slice.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/require.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/require_plugins.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/require_propagate.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/restore.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/routes_extractor.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/scanner.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/schema_refs.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/synth.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/traceability.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/validator.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/watch/__init__.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/watch/events.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/watch/watcher.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd/wiring.py +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/docs/requirements/README.md +0 -0
- {codd_dev-1.41.0 → codd_dev-2.0.0}/tests/integration/standalone_repair_skeleton/README.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codd-dev
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.0
|
|
4
4
|
Summary: CoDD: Coherence-Driven Development — cross-artifact change impact analysis
|
|
5
5
|
Project-URL: Homepage, https://github.com/yohey-w/codd-dev
|
|
6
6
|
Project-URL: Repository, https://github.com/yohey-w/codd-dev
|
|
@@ -61,17 +61,18 @@ Description-Content-Type: text/markdown
|
|
|
61
61
|
|
|
62
62
|
CoDD treats **requirements -> design -> implementation -> tests** as one DAG, mechanically verifies the coherence of every node, and lets an LLM repair inconsistencies automatically when they appear. Humans write only **what to build** and **where the boundaries are**.
|
|
63
63
|
|
|
64
|
-
## Where We Are (
|
|
64
|
+
## Where We Are (v2.0.0 — Lexicon-Driven Completeness)
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
v2.0.0 is a **positioning shift, not just a version bump**. v1.x delivered the *extract → diagnose → repair* pipeline; v2.0 adds the **constraint side** as a first-class plug-in surface.
|
|
67
67
|
|
|
68
68
|
- ✅ Dogfooded on a real project (Next.js + Prisma + TypeScript Web app)
|
|
69
|
-
- ✅ `codd verify --auto-repair`
|
|
69
|
+
- ✅ `codd verify --auto-repair` reaches `PARTIAL_SUCCESS` on a real LMS project (attempts=4 / applied_patches=4)
|
|
70
70
|
- ✅ DAG completeness with 9 coherence checks operational
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
71
|
+
- ✅ **31 lexicon plug-ins** across 7 domains (Methodology / Web / Mobile / Backend-API / Data / Ops / Compliance / Process)
|
|
72
|
+
- ✅ **`codd elicit` / `codd diff` / `codd brownfield`** — coverage and drift discovery for greenfield + brownfield projects
|
|
73
|
+
- ✅ **`codd init --suggest-lexicons`** — auto-detect stack from manifest files, suggest lexicons to install
|
|
74
|
+
- ✅ **`codd lexicon list/install/diff` + `codd coverage report`** — plug-in management CLI + matrix reports (JSON / Markdown / HTML)
|
|
75
|
+
- ✅ Generality Gate three-layer architecture (Layer A core / Layer B templates / Layer C plug-ins) — zero specific framework / domain literals in core code
|
|
75
76
|
|
|
76
77
|
```bash
|
|
77
78
|
pip install codd-dev
|
|
@@ -85,14 +86,14 @@ pip install codd-dev
|
|
|
85
86
|
|
|
86
87
|
```bash
|
|
87
88
|
pip install codd-dev
|
|
88
|
-
codd --version #
|
|
89
|
+
codd --version # 2.0.0 or later
|
|
89
90
|
```
|
|
90
91
|
|
|
91
92
|
### 2. Add codd.yaml to your project
|
|
92
93
|
|
|
93
94
|
```yaml
|
|
94
95
|
# codd.yaml
|
|
95
|
-
codd_required_version: ">=
|
|
96
|
+
codd_required_version: ">=2.0.0"
|
|
96
97
|
|
|
97
98
|
dag:
|
|
98
99
|
design_docs:
|
|
@@ -194,7 +195,36 @@ This structurally prevents incidents such as smartphone-only navigation disappea
|
|
|
194
195
|
|
|
195
196
|
---
|
|
196
197
|
|
|
197
|
-
##
|
|
198
|
+
## What's New in v2.0
|
|
199
|
+
|
|
200
|
+
### Lexicon-driven completeness — the missing constraint side
|
|
201
|
+
|
|
202
|
+
The North Star says "write only requirements + constraints." v1.x mostly handled the requirements side. v2.0 makes the **constraint side** mechanical and reusable.
|
|
203
|
+
|
|
204
|
+
A *lexicon* is a plug-in describing the coverage axes of an industry standard:
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
codd_plugins/lexicons/
|
|
208
|
+
├── babok/ # BABOK v3 elicitation lexicon
|
|
209
|
+
├── web_a11y_wcag22_aa/ # WCAG 2.2 A/AA
|
|
210
|
+
├── api_rest_openapi/ # REST + OpenAPI 3.1
|
|
211
|
+
├── web_security_owasp/ # OWASP Top 10 + ASVS
|
|
212
|
+
├── compliance_iso27001/ # ISO/IEC 27001:2022
|
|
213
|
+
├── data_governance_appi_gdpr/ # GDPR + APPI
|
|
214
|
+
├── ops_kubernetes/ # Kubernetes contracts
|
|
215
|
+
└── ... 24 more
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Each lexicon ships a manifest, axes, severity rules, coverage matrix, and prompt extension — `codd elicit` and `codd coverage report` consume them dynamically.
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
codd init --suggest-lexicons # detect stack → suggest lexicons
|
|
222
|
+
codd lexicon install web_responsive web_a11y_wcag22_aa
|
|
223
|
+
codd lexicon diff web_responsive # text-grep coverage hint
|
|
224
|
+
codd coverage report --format html # matrix across all installed lexicons
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### v2.0.0 Key Features
|
|
198
228
|
|
|
199
229
|
| Feature | Role |
|
|
200
230
|
|---------|------|
|
|
@@ -252,26 +282,28 @@ C9 `environment_coverage` verified all axis x variant coverage for viewport (sma
|
|
|
252
282
|
|
|
253
283
|
## Architecture - 4-Release Evolution and Next Plans
|
|
254
284
|
|
|
255
|
-
### Achieved (v1.31.0 -
|
|
285
|
+
### Achieved (v1.31.0 - v2.0.0)
|
|
256
286
|
|
|
257
287
|
| Release | Milestone |
|
|
258
288
|
|---------|-----------|
|
|
259
|
-
| v1.31.0 | Inner 100% (internal coherence)
|
|
260
|
-
| v1.32.0 | Outer 100% (target environment coverage Layer C9)
|
|
261
|
-
| v1.33.0 | Caveat-resolution path proven
|
|
262
|
-
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
|
267
|
-
|
|
268
|
-
|
|
|
269
|
-
| v1.
|
|
270
|
-
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
289
|
+
| v1.31.0 | Inner 100% (internal coherence) — eliminated manual type fixes with the typecheck repair loop |
|
|
290
|
+
| v1.32.0 | Outer 100% (target environment coverage Layer C9) — absorbed viewport / RBAC / locale axes through a unified abstraction |
|
|
291
|
+
| v1.33.0 | Caveat-resolution path proven — real CDP run-journey + LLM auto-repair attempt passed |
|
|
292
|
+
| v1.34.0 | Full pipeline proven — auto-repair reached PARTIAL_SUCCESS through dogfooding on a single Next.js Web project |
|
|
293
|
+
| v1.35.0 | `codd elicit` — Discovery Engine with lexicon-aware coverage-mode |
|
|
294
|
+
| v1.36.0 | RepairLoop strategy v2 — generic fallback chain replaces stack-specific hardcoding |
|
|
295
|
+
| v1.37.0 | `codd diff` — brownfield drift detection (implementation_only / requirement_only / drift) |
|
|
296
|
+
| v1.38.0 | `codd brownfield` pipeline — extract → diff → elicit orchestration |
|
|
297
|
+
| v1.39.0 / v1.40.0 | Lexicon plug-ins 30 across 7 domains (Web / Mobile / Backend-API / Data / Ops / Compliance / Process) |
|
|
298
|
+
| v1.41.0 | `codd init --suggest-lexicons` — manifest-file scan → suggested lexicons appended |
|
|
299
|
+
| v1.42.0 | `codd lexicon list/install/diff` + `codd coverage report` — plug-in management CLI + matrix reports |
|
|
300
|
+
| **v2.0.0** | **Lexicon-Driven Completeness milestone** — 31 lexicons (~280 axes), constraint side now mechanical |
|
|
301
|
+
|
|
302
|
+
### Next (v2.x roadmap, in flux)
|
|
303
|
+
|
|
304
|
+
- Multi-domain dogfooding beyond Web (Mobile / CLI / embedded)
|
|
305
|
+
- elicit + verify bidirectional loop — proposed-finding apply → re-verify cycle
|
|
306
|
+
- AI-default coverage classification (`covered` / `implicit` / `gap`) replacing text-grep hints
|
|
275
307
|
|
|
276
308
|
See [CHANGELOG.md](CHANGELOG.md).
|
|
277
309
|
|
|
@@ -339,6 +371,19 @@ Recipes live under `codd/hooks/recipes/`.
|
|
|
339
371
|
|
|
340
372
|
---
|
|
341
373
|
|
|
374
|
+
## Contributors
|
|
375
|
+
|
|
376
|
+
CoDD is shaped by the following people:
|
|
377
|
+
|
|
378
|
+
- **[@yohey-w](https://github.com/yohey-w)** — Maintainer / Architect
|
|
379
|
+
- **[@Seika86](https://github.com/Seika86)** — Sprint regex insight (PR #11)
|
|
380
|
+
- **[@v-kato](https://github.com/v-kato)** — Brownfield reproduction reports (Issues #17 / #18 / #19)
|
|
381
|
+
- **[@dev-komenzar](https://github.com/dev-komenzar)** — `source_dirs` bug reproduction (Issue #13)
|
|
382
|
+
|
|
383
|
+
External signals (issues / PRs / lexicon suggestions) are welcome — see [Issues](https://github.com/yohey-w/codd-dev/issues).
|
|
384
|
+
|
|
385
|
+
---
|
|
386
|
+
|
|
342
387
|
## License
|
|
343
388
|
|
|
344
389
|
MIT License - see [LICENSE](LICENSE).
|
|
@@ -21,17 +21,18 @@
|
|
|
21
21
|
|
|
22
22
|
CoDD treats **requirements -> design -> implementation -> tests** as one DAG, mechanically verifies the coherence of every node, and lets an LLM repair inconsistencies automatically when they appear. Humans write only **what to build** and **where the boundaries are**.
|
|
23
23
|
|
|
24
|
-
## Where We Are (
|
|
24
|
+
## Where We Are (v2.0.0 — Lexicon-Driven Completeness)
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
v2.0.0 is a **positioning shift, not just a version bump**. v1.x delivered the *extract → diagnose → repair* pipeline; v2.0 adds the **constraint side** as a first-class plug-in surface.
|
|
27
27
|
|
|
28
28
|
- ✅ Dogfooded on a real project (Next.js + Prisma + TypeScript Web app)
|
|
29
|
-
- ✅ `codd verify --auto-repair`
|
|
29
|
+
- ✅ `codd verify --auto-repair` reaches `PARTIAL_SUCCESS` on a real LMS project (attempts=4 / applied_patches=4)
|
|
30
30
|
- ✅ DAG completeness with 9 coherence checks operational
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
31
|
+
- ✅ **31 lexicon plug-ins** across 7 domains (Methodology / Web / Mobile / Backend-API / Data / Ops / Compliance / Process)
|
|
32
|
+
- ✅ **`codd elicit` / `codd diff` / `codd brownfield`** — coverage and drift discovery for greenfield + brownfield projects
|
|
33
|
+
- ✅ **`codd init --suggest-lexicons`** — auto-detect stack from manifest files, suggest lexicons to install
|
|
34
|
+
- ✅ **`codd lexicon list/install/diff` + `codd coverage report`** — plug-in management CLI + matrix reports (JSON / Markdown / HTML)
|
|
35
|
+
- ✅ Generality Gate three-layer architecture (Layer A core / Layer B templates / Layer C plug-ins) — zero specific framework / domain literals in core code
|
|
35
36
|
|
|
36
37
|
```bash
|
|
37
38
|
pip install codd-dev
|
|
@@ -45,14 +46,14 @@ pip install codd-dev
|
|
|
45
46
|
|
|
46
47
|
```bash
|
|
47
48
|
pip install codd-dev
|
|
48
|
-
codd --version #
|
|
49
|
+
codd --version # 2.0.0 or later
|
|
49
50
|
```
|
|
50
51
|
|
|
51
52
|
### 2. Add codd.yaml to your project
|
|
52
53
|
|
|
53
54
|
```yaml
|
|
54
55
|
# codd.yaml
|
|
55
|
-
codd_required_version: ">=
|
|
56
|
+
codd_required_version: ">=2.0.0"
|
|
56
57
|
|
|
57
58
|
dag:
|
|
58
59
|
design_docs:
|
|
@@ -154,7 +155,36 @@ This structurally prevents incidents such as smartphone-only navigation disappea
|
|
|
154
155
|
|
|
155
156
|
---
|
|
156
157
|
|
|
157
|
-
##
|
|
158
|
+
## What's New in v2.0
|
|
159
|
+
|
|
160
|
+
### Lexicon-driven completeness — the missing constraint side
|
|
161
|
+
|
|
162
|
+
The North Star says "write only requirements + constraints." v1.x mostly handled the requirements side. v2.0 makes the **constraint side** mechanical and reusable.
|
|
163
|
+
|
|
164
|
+
A *lexicon* is a plug-in describing the coverage axes of an industry standard:
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
codd_plugins/lexicons/
|
|
168
|
+
├── babok/ # BABOK v3 elicitation lexicon
|
|
169
|
+
├── web_a11y_wcag22_aa/ # WCAG 2.2 A/AA
|
|
170
|
+
├── api_rest_openapi/ # REST + OpenAPI 3.1
|
|
171
|
+
├── web_security_owasp/ # OWASP Top 10 + ASVS
|
|
172
|
+
├── compliance_iso27001/ # ISO/IEC 27001:2022
|
|
173
|
+
├── data_governance_appi_gdpr/ # GDPR + APPI
|
|
174
|
+
├── ops_kubernetes/ # Kubernetes contracts
|
|
175
|
+
└── ... 24 more
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Each lexicon ships a manifest, axes, severity rules, coverage matrix, and prompt extension — `codd elicit` and `codd coverage report` consume them dynamically.
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
codd init --suggest-lexicons # detect stack → suggest lexicons
|
|
182
|
+
codd lexicon install web_responsive web_a11y_wcag22_aa
|
|
183
|
+
codd lexicon diff web_responsive # text-grep coverage hint
|
|
184
|
+
codd coverage report --format html # matrix across all installed lexicons
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### v2.0.0 Key Features
|
|
158
188
|
|
|
159
189
|
| Feature | Role |
|
|
160
190
|
|---------|------|
|
|
@@ -212,26 +242,28 @@ C9 `environment_coverage` verified all axis x variant coverage for viewport (sma
|
|
|
212
242
|
|
|
213
243
|
## Architecture - 4-Release Evolution and Next Plans
|
|
214
244
|
|
|
215
|
-
### Achieved (v1.31.0 -
|
|
245
|
+
### Achieved (v1.31.0 - v2.0.0)
|
|
216
246
|
|
|
217
247
|
| Release | Milestone |
|
|
218
248
|
|---------|-----------|
|
|
219
|
-
| v1.31.0 | Inner 100% (internal coherence)
|
|
220
|
-
| v1.32.0 | Outer 100% (target environment coverage Layer C9)
|
|
221
|
-
| v1.33.0 | Caveat-resolution path proven
|
|
222
|
-
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
|
227
|
-
|
|
228
|
-
|
|
|
229
|
-
| v1.
|
|
230
|
-
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
249
|
+
| v1.31.0 | Inner 100% (internal coherence) — eliminated manual type fixes with the typecheck repair loop |
|
|
250
|
+
| v1.32.0 | Outer 100% (target environment coverage Layer C9) — absorbed viewport / RBAC / locale axes through a unified abstraction |
|
|
251
|
+
| v1.33.0 | Caveat-resolution path proven — real CDP run-journey + LLM auto-repair attempt passed |
|
|
252
|
+
| v1.34.0 | Full pipeline proven — auto-repair reached PARTIAL_SUCCESS through dogfooding on a single Next.js Web project |
|
|
253
|
+
| v1.35.0 | `codd elicit` — Discovery Engine with lexicon-aware coverage-mode |
|
|
254
|
+
| v1.36.0 | RepairLoop strategy v2 — generic fallback chain replaces stack-specific hardcoding |
|
|
255
|
+
| v1.37.0 | `codd diff` — brownfield drift detection (implementation_only / requirement_only / drift) |
|
|
256
|
+
| v1.38.0 | `codd brownfield` pipeline — extract → diff → elicit orchestration |
|
|
257
|
+
| v1.39.0 / v1.40.0 | Lexicon plug-ins 30 across 7 domains (Web / Mobile / Backend-API / Data / Ops / Compliance / Process) |
|
|
258
|
+
| v1.41.0 | `codd init --suggest-lexicons` — manifest-file scan → suggested lexicons appended |
|
|
259
|
+
| v1.42.0 | `codd lexicon list/install/diff` + `codd coverage report` — plug-in management CLI + matrix reports |
|
|
260
|
+
| **v2.0.0** | **Lexicon-Driven Completeness milestone** — 31 lexicons (~280 axes), constraint side now mechanical |
|
|
261
|
+
|
|
262
|
+
### Next (v2.x roadmap, in flux)
|
|
263
|
+
|
|
264
|
+
- Multi-domain dogfooding beyond Web (Mobile / CLI / embedded)
|
|
265
|
+
- elicit + verify bidirectional loop — proposed-finding apply → re-verify cycle
|
|
266
|
+
- AI-default coverage classification (`covered` / `implicit` / `gap`) replacing text-grep hints
|
|
235
267
|
|
|
236
268
|
See [CHANGELOG.md](CHANGELOG.md).
|
|
237
269
|
|
|
@@ -299,6 +331,19 @@ Recipes live under `codd/hooks/recipes/`.
|
|
|
299
331
|
|
|
300
332
|
---
|
|
301
333
|
|
|
334
|
+
## Contributors
|
|
335
|
+
|
|
336
|
+
CoDD is shaped by the following people:
|
|
337
|
+
|
|
338
|
+
- **[@yohey-w](https://github.com/yohey-w)** — Maintainer / Architect
|
|
339
|
+
- **[@Seika86](https://github.com/Seika86)** — Sprint regex insight (PR #11)
|
|
340
|
+
- **[@v-kato](https://github.com/v-kato)** — Brownfield reproduction reports (Issues #17 / #18 / #19)
|
|
341
|
+
- **[@dev-komenzar](https://github.com/dev-komenzar)** — `source_dirs` bug reproduction (Issue #13)
|
|
342
|
+
|
|
343
|
+
External signals (issues / PRs / lexicon suggestions) are welcome — see [Issues](https://github.com/yohey-w/codd-dev/issues).
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
302
347
|
## License
|
|
303
348
|
|
|
304
349
|
MIT License - see [LICENSE](LICENSE).
|
|
@@ -559,6 +559,115 @@ def _offer_lexicon_suggestions(project_root: Path) -> None:
|
|
|
559
559
|
click.echo(f"{rel_path} updated ({len(suggestions)} suggested lexicons)")
|
|
560
560
|
|
|
561
561
|
|
|
562
|
+
@main.group("lexicon")
|
|
563
|
+
def lexicon_cmd() -> None:
|
|
564
|
+
"""Manage bundled lexicon plug-ins."""
|
|
565
|
+
|
|
566
|
+
|
|
567
|
+
@lexicon_cmd.command("list")
|
|
568
|
+
@click.option("--installed", "installed_only", is_flag=True, help="Show installed lexicons only.")
|
|
569
|
+
@click.option("--available", "available_only", is_flag=True, help="Show available, uninstalled lexicons only.")
|
|
570
|
+
@click.option("--all", "show_all", is_flag=True, help="Show installed and available lexicons.")
|
|
571
|
+
@click.option("--path", "project_path", default=".", help="Project root directory")
|
|
572
|
+
def lexicon_list_cmd(installed_only: bool, available_only: bool, show_all: bool, project_path: str) -> None:
|
|
573
|
+
"""List installed and bundled lexicons."""
|
|
574
|
+
from codd.lexicon_cli.manager import LexiconManager
|
|
575
|
+
|
|
576
|
+
if sum(bool(value) for value in (installed_only, available_only, show_all)) > 1:
|
|
577
|
+
click.echo("Error: choose only one of --installed, --available, or --all.")
|
|
578
|
+
raise SystemExit(1)
|
|
579
|
+
|
|
580
|
+
manager = LexiconManager(Path(project_path).resolve())
|
|
581
|
+
installed = manager.installed()
|
|
582
|
+
available = manager.uninstalled()
|
|
583
|
+
if installed_only:
|
|
584
|
+
_echo_lexicon_records("Installed", installed)
|
|
585
|
+
return
|
|
586
|
+
if available_only:
|
|
587
|
+
_echo_lexicon_records("Available", available)
|
|
588
|
+
return
|
|
589
|
+
|
|
590
|
+
_echo_lexicon_records("Installed", installed)
|
|
591
|
+
if show_all or not installed_only:
|
|
592
|
+
click.echo("")
|
|
593
|
+
_echo_lexicon_records("Available", available)
|
|
594
|
+
|
|
595
|
+
|
|
596
|
+
@lexicon_cmd.command("install")
|
|
597
|
+
@click.argument("lexicon_ids", nargs=-1, required=True)
|
|
598
|
+
@click.option("--path", "project_path", default=".", help="Project root directory")
|
|
599
|
+
def lexicon_install_cmd(lexicon_ids: tuple[str, ...], project_path: str) -> None:
|
|
600
|
+
"""Install bundled lexicons into project_lexicon.yaml."""
|
|
601
|
+
from codd.lexicon_cli.manager import LexiconManager
|
|
602
|
+
|
|
603
|
+
manager = LexiconManager(Path(project_path).resolve())
|
|
604
|
+
try:
|
|
605
|
+
result = manager.install(lexicon_ids)
|
|
606
|
+
except (OSError, ValueError, yaml.YAMLError) as exc:
|
|
607
|
+
click.echo(f"Error: {exc}")
|
|
608
|
+
raise SystemExit(1)
|
|
609
|
+
|
|
610
|
+
for lexicon_id in result.installed:
|
|
611
|
+
click.echo(f"Installed: {lexicon_id}")
|
|
612
|
+
for lexicon_id in result.skipped:
|
|
613
|
+
click.echo(f"Skipped: {lexicon_id} already installed")
|
|
614
|
+
rel_path = _display_path(result.project_lexicon_path, manager.project_root)
|
|
615
|
+
click.echo(f"Updated: {rel_path}")
|
|
616
|
+
for record in result.records:
|
|
617
|
+
if record.recommended_kinds:
|
|
618
|
+
preview = ", ".join(record.recommended_kinds[:5])
|
|
619
|
+
suffix = "" if len(record.recommended_kinds) <= 5 else ", ..."
|
|
620
|
+
click.echo(f"{record.id} recommended kinds: {preview}{suffix}")
|
|
621
|
+
severity_rules = record.path / "severity_rules.yaml"
|
|
622
|
+
if severity_rules.is_file():
|
|
623
|
+
click.echo(f"{record.id} severity rules: {_display_path(severity_rules, manager.project_root)}")
|
|
624
|
+
|
|
625
|
+
|
|
626
|
+
@lexicon_cmd.command("diff")
|
|
627
|
+
@click.argument("lexicon_id")
|
|
628
|
+
@click.option("--path", "project_path", default=".", help="Project root directory")
|
|
629
|
+
@click.option(
|
|
630
|
+
"--format",
|
|
631
|
+
"format_name",
|
|
632
|
+
type=click.Choice(["json", "md"]),
|
|
633
|
+
default="md",
|
|
634
|
+
show_default=True,
|
|
635
|
+
help="Output format.",
|
|
636
|
+
)
|
|
637
|
+
@click.option("--with-ai", is_flag=True, default=False, help="Use AI-backed elicit coverage mode.")
|
|
638
|
+
@click.option("--ai-cmd", default=None, help="Override AI CLI command for --with-ai.")
|
|
639
|
+
def lexicon_diff_cmd(
|
|
640
|
+
lexicon_id: str,
|
|
641
|
+
project_path: str,
|
|
642
|
+
format_name: str,
|
|
643
|
+
with_ai: bool,
|
|
644
|
+
ai_cmd: str | None,
|
|
645
|
+
) -> None:
|
|
646
|
+
"""Inspect one lexicon against project requirements and design text."""
|
|
647
|
+
from codd.lexicon_cli.formatters.json_fmt import to_json
|
|
648
|
+
from codd.lexicon_cli.formatters.md import format_diff_md
|
|
649
|
+
from codd.lexicon_cli.inspector import LexiconInspector
|
|
650
|
+
|
|
651
|
+
try:
|
|
652
|
+
result = LexiconInspector(Path(project_path).resolve()).inspect(
|
|
653
|
+
lexicon_id,
|
|
654
|
+
with_ai=with_ai,
|
|
655
|
+
ai_command=ai_cmd,
|
|
656
|
+
)
|
|
657
|
+
except (OSError, ValueError, json.JSONDecodeError, yaml.YAMLError) as exc:
|
|
658
|
+
click.echo(f"Error: {exc}")
|
|
659
|
+
raise SystemExit(1)
|
|
660
|
+
|
|
661
|
+
click.echo(to_json(result) if format_name == "json" else format_diff_md(result), nl=False)
|
|
662
|
+
|
|
663
|
+
|
|
664
|
+
def _echo_lexicon_records(label: str, records: list[Any]) -> None:
|
|
665
|
+
click.echo(f"{label} ({len(records)}):")
|
|
666
|
+
for record in records:
|
|
667
|
+
description = f" {record.description}" if record.description else ""
|
|
668
|
+
click.echo(f" {record.id:<32} ({record.observation_dimensions} axes){description}")
|
|
669
|
+
|
|
670
|
+
|
|
562
671
|
@main.command()
|
|
563
672
|
@click.option("--path", default=".", help="Project root directory")
|
|
564
673
|
def scan(path: str):
|
|
@@ -2721,7 +2830,7 @@ def validate(lexicon: bool, design_tokens: bool, screen_flow: bool, edges: bool,
|
|
|
2721
2830
|
raise SystemExit(run_validate(project_root, codd_dir))
|
|
2722
2831
|
|
|
2723
2832
|
|
|
2724
|
-
@main.
|
|
2833
|
+
@main.group(invoke_without_command=True)
|
|
2725
2834
|
@click.option("--path", default=".", show_default=True, help="Project root directory")
|
|
2726
2835
|
@click.option(
|
|
2727
2836
|
"--e2e-threshold",
|
|
@@ -2745,7 +2854,9 @@ def validate(lexicon: bool, design_tokens: bool, screen_flow: bool, edges: bool,
|
|
|
2745
2854
|
help="Screen-flow coverage threshold percentage.",
|
|
2746
2855
|
)
|
|
2747
2856
|
@click.option("--json", "as_json", is_flag=True, help="Output machine-readable JSON.")
|
|
2857
|
+
@click.pass_context
|
|
2748
2858
|
def coverage(
|
|
2859
|
+
ctx: click.Context,
|
|
2749
2860
|
path: str,
|
|
2750
2861
|
e2e_threshold: float,
|
|
2751
2862
|
lexicon_threshold: float,
|
|
@@ -2753,6 +2864,9 @@ def coverage(
|
|
|
2753
2864
|
as_json: bool,
|
|
2754
2865
|
):
|
|
2755
2866
|
"""Coverage metrics merge gate: E2E, design tokens, and lexicon."""
|
|
2867
|
+
if ctx.invoked_subcommand is not None:
|
|
2868
|
+
return
|
|
2869
|
+
|
|
2756
2870
|
from codd.coverage_metrics import run_coverage
|
|
2757
2871
|
|
|
2758
2872
|
project_root = Path(path).resolve()
|
|
@@ -2800,6 +2914,65 @@ def coverage(
|
|
|
2800
2914
|
raise SystemExit(0 if report.all_passed else 1)
|
|
2801
2915
|
|
|
2802
2916
|
|
|
2917
|
+
@coverage.command("report")
|
|
2918
|
+
@click.option(
|
|
2919
|
+
"--lexicons",
|
|
2920
|
+
default="all",
|
|
2921
|
+
show_default=True,
|
|
2922
|
+
help="Lexicons to include: all or a comma-separated id list.",
|
|
2923
|
+
)
|
|
2924
|
+
@click.option("--path", "project_path", default=".", show_default=True, help="Project root directory")
|
|
2925
|
+
@click.option(
|
|
2926
|
+
"--format",
|
|
2927
|
+
"format_name",
|
|
2928
|
+
type=click.Choice(["json", "md", "html"]),
|
|
2929
|
+
default="md",
|
|
2930
|
+
show_default=True,
|
|
2931
|
+
help="Report output format.",
|
|
2932
|
+
)
|
|
2933
|
+
@click.option("--output", type=click.Path(dir_okay=False, path_type=Path), default=None, help="Write report to file.")
|
|
2934
|
+
@click.option("--with-ai", is_flag=True, default=False, help="Use AI-backed elicit coverage mode.")
|
|
2935
|
+
@click.option("--ai-cmd", default=None, help="Override AI CLI command for --with-ai.")
|
|
2936
|
+
def coverage_report_cmd(
|
|
2937
|
+
lexicons: str,
|
|
2938
|
+
project_path: str,
|
|
2939
|
+
format_name: str,
|
|
2940
|
+
output: Path | None,
|
|
2941
|
+
with_ai: bool,
|
|
2942
|
+
ai_cmd: str | None,
|
|
2943
|
+
) -> None:
|
|
2944
|
+
"""Generate a lexicon coverage matrix report."""
|
|
2945
|
+
from codd.lexicon_cli.formatters.html import format_coverage_report_html
|
|
2946
|
+
from codd.lexicon_cli.formatters.json_fmt import to_json
|
|
2947
|
+
from codd.lexicon_cli.formatters.md import format_coverage_report_md
|
|
2948
|
+
from codd.lexicon_cli.reporter import CoverageReporter
|
|
2949
|
+
|
|
2950
|
+
project_root = Path(project_path).resolve()
|
|
2951
|
+
try:
|
|
2952
|
+
report = CoverageReporter(project_root).build(lexicons, with_ai=with_ai, ai_command=ai_cmd)
|
|
2953
|
+
except (OSError, ValueError, json.JSONDecodeError, yaml.YAMLError) as exc:
|
|
2954
|
+
click.echo(f"Error: {exc}")
|
|
2955
|
+
raise SystemExit(1)
|
|
2956
|
+
|
|
2957
|
+
if format_name == "json":
|
|
2958
|
+
rendered = to_json(report)
|
|
2959
|
+
elif format_name == "html":
|
|
2960
|
+
rendered = format_coverage_report_html(report)
|
|
2961
|
+
else:
|
|
2962
|
+
rendered = format_coverage_report_md(report)
|
|
2963
|
+
|
|
2964
|
+
if output is None:
|
|
2965
|
+
click.echo(rendered, nl=False)
|
|
2966
|
+
return
|
|
2967
|
+
|
|
2968
|
+
output_path = output.expanduser()
|
|
2969
|
+
if not output_path.is_absolute():
|
|
2970
|
+
output_path = project_root / output_path
|
|
2971
|
+
output_path.parent.mkdir(parents=True, exist_ok=True)
|
|
2972
|
+
output_path.write_text(rendered, encoding="utf-8")
|
|
2973
|
+
click.echo(f"Report: {_display_path(output_path, project_root)}")
|
|
2974
|
+
|
|
2975
|
+
|
|
2803
2976
|
@main.command("deploy")
|
|
2804
2977
|
@click.option("--target", default=None, help="Deploy target name from deploy.yaml")
|
|
2805
2978
|
@click.option(
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""CLI helpers for bundled lexicon plug-ins."""
|
|
2
|
+
|
|
3
|
+
from codd.lexicon_cli.inspector import AxisInspection, LexiconDiffResult, TextHit
|
|
4
|
+
from codd.lexicon_cli.manager import InstallResult, LexiconManager, LexiconRecord
|
|
5
|
+
from codd.lexicon_cli.reporter import CoverageMatrixReport, CoverageReporter, CoverageRow
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"AxisInspection",
|
|
9
|
+
"CoverageMatrixReport",
|
|
10
|
+
"CoverageReporter",
|
|
11
|
+
"CoverageRow",
|
|
12
|
+
"InstallResult",
|
|
13
|
+
"LexiconDiffResult",
|
|
14
|
+
"LexiconManager",
|
|
15
|
+
"LexiconRecord",
|
|
16
|
+
"TextHit",
|
|
17
|
+
]
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""Formatters for lexicon CLI output."""
|
|
2
|
+
|
|
3
|
+
from codd.lexicon_cli.formatters.html import format_coverage_report_html
|
|
4
|
+
from codd.lexicon_cli.formatters.json_fmt import to_json
|
|
5
|
+
from codd.lexicon_cli.formatters.md import format_coverage_report_md, format_diff_md
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"format_coverage_report_html",
|
|
9
|
+
"format_coverage_report_md",
|
|
10
|
+
"format_diff_md",
|
|
11
|
+
"to_json",
|
|
12
|
+
]
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"""Self-contained HTML formatter for coverage matrix reports."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from html import escape
|
|
6
|
+
|
|
7
|
+
from codd.lexicon_cli.reporter import CoverageMatrixReport
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def format_coverage_report_html(report: CoverageMatrixReport) -> str:
|
|
11
|
+
rows = "\n".join(
|
|
12
|
+
"<tr>"
|
|
13
|
+
f"<td>{escape(row.lexicon_name)}</td>"
|
|
14
|
+
f"<td>{escape(row.axis_type)}</td>"
|
|
15
|
+
f"<td><span class=\"status {escape(row.status)}\">{escape(row.status)}</span></td>"
|
|
16
|
+
f"<td>{row.hit_count}</td>"
|
|
17
|
+
"</tr>"
|
|
18
|
+
for row in report.rows
|
|
19
|
+
)
|
|
20
|
+
return f"""<!doctype html>
|
|
21
|
+
<html lang="en">
|
|
22
|
+
<head>
|
|
23
|
+
<meta charset="utf-8">
|
|
24
|
+
<title>CoDD Coverage Matrix Report</title>
|
|
25
|
+
<style>
|
|
26
|
+
body {{ font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; margin: 2rem; color: #1f2933; }}
|
|
27
|
+
h1 {{ font-size: 1.7rem; margin-bottom: 0.25rem; }}
|
|
28
|
+
.meta {{ color: #52616b; margin: 0.2rem 0; }}
|
|
29
|
+
table {{ border-collapse: collapse; width: 100%; margin-top: 1.25rem; }}
|
|
30
|
+
th, td {{ border: 1px solid #d8dee4; padding: 0.45rem 0.6rem; text-align: left; }}
|
|
31
|
+
th {{ background: #f4f7f9; }}
|
|
32
|
+
.status {{ border-radius: 4px; padding: 0.1rem 0.35rem; background: #eef2f7; }}
|
|
33
|
+
.covered_text_match, .covered, .implicit {{ background: #e7f6ed; color: #125c2f; }}
|
|
34
|
+
.unknown, .gap {{ background: #fff4d6; color: #724c00; }}
|
|
35
|
+
</style>
|
|
36
|
+
</head>
|
|
37
|
+
<body>
|
|
38
|
+
<h1>Coverage Matrix Report</h1>
|
|
39
|
+
<p class="meta">Project: {escape(report.project_root)}</p>
|
|
40
|
+
<p class="meta">Mode: {escape(report.mode)}</p>
|
|
41
|
+
<p class="meta">Generated: {escape(report.generated_at)}</p>
|
|
42
|
+
<p class="meta">Totals: {report.totals["axes"]} axes, {report.totals["covered"]} covered signals ({report.totals["covered_pct"]:.2f}%), {report.totals["unknown"]} unknown.</p>
|
|
43
|
+
<table>
|
|
44
|
+
<thead><tr><th>Lexicon</th><th>Axis</th><th>Status</th><th>Hits</th></tr></thead>
|
|
45
|
+
<tbody>
|
|
46
|
+
{rows}
|
|
47
|
+
</tbody>
|
|
48
|
+
</table>
|
|
49
|
+
</body>
|
|
50
|
+
</html>
|
|
51
|
+
"""
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""JSON formatter for lexicon CLI data."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import asdict, is_dataclass
|
|
6
|
+
import json
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def to_json(value: Any) -> str:
|
|
12
|
+
return json.dumps(_plain(value), indent=2, ensure_ascii=False) + "\n"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _plain(value: Any) -> Any:
|
|
16
|
+
if is_dataclass(value):
|
|
17
|
+
return _plain(asdict(value))
|
|
18
|
+
if isinstance(value, Path):
|
|
19
|
+
return value.as_posix()
|
|
20
|
+
if isinstance(value, dict):
|
|
21
|
+
return {str(key): _plain(item) for key, item in value.items()}
|
|
22
|
+
if isinstance(value, (list, tuple)):
|
|
23
|
+
return [_plain(item) for item in value]
|
|
24
|
+
return value
|