codd-dev 1.42.0__tar.gz → 2.1.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.42.0 → codd_dev-2.1.0}/PKG-INFO +73 -28
- {codd_dev-1.42.0 → codd_dev-2.1.0}/README.md +72 -27
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/cli.py +124 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/lexicon_cli/__init__.py +3 -0
- codd_dev-2.1.0/codd/lexicon_cli/threshold.py +159 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/pyproject.toml +5 -5
- {codd_dev-1.42.0 → codd_dev-2.1.0}/.gitignore +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/LICENSE +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/__main__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/_git_helper.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/assembler.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/bridge.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/clustering.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/coherence_engine.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/config.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/contracts.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/builder.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/extractor.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/dag/runner.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/defaults.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployer.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/design_md.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/diff/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/diff/apply.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/diff/engine.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/diff/persistence.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/drift.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/e2e_generator.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/e2e_runner.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/elicit/apply.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/elicit/engine.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/elicit/finding.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/env_refs.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/extract_ai.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/extractor.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/fixer.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/fixup_drift.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/generator.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/graph.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/hitl_session.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/implementer.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/inheritance.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/init/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/lexicon.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/approval.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/parser.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/mcp_server.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/measure.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/parsing.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/planner.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/policy.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/propagate.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/propagator.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/registry.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair/engine.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair/history.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair/loop.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair/schema.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/repair_slice.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/require.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/require_plugins.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/require_propagate.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/restore.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/routes_extractor.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/scanner.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/schema_refs.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/synth.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/traceability.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/validator.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/watch/__init__.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/watch/events.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/watch/watcher.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd/wiring.py +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.0}/docs/requirements/README.md +0 -0
- {codd_dev-1.42.0 → codd_dev-2.1.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: 1.
|
|
3
|
+
Version: 2.1.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).
|
|
@@ -2973,6 +2973,130 @@ def coverage_report_cmd(
|
|
|
2973
2973
|
click.echo(f"Report: {_display_path(output_path, project_root)}")
|
|
2974
2974
|
|
|
2975
2975
|
|
|
2976
|
+
@coverage.command("check")
|
|
2977
|
+
@click.option(
|
|
2978
|
+
"--lexicons",
|
|
2979
|
+
default="all",
|
|
2980
|
+
show_default=True,
|
|
2981
|
+
help="Lexicons to include: all or a comma-separated id list.",
|
|
2982
|
+
)
|
|
2983
|
+
@click.option("--path", "project_path", default=".", show_default=True, help="Project root directory")
|
|
2984
|
+
@click.option(
|
|
2985
|
+
"--threshold",
|
|
2986
|
+
"global_threshold",
|
|
2987
|
+
type=float,
|
|
2988
|
+
default=None,
|
|
2989
|
+
help="Global covered_text_match_pct threshold override.",
|
|
2990
|
+
)
|
|
2991
|
+
@click.option(
|
|
2992
|
+
"--threshold-file",
|
|
2993
|
+
type=click.Path(exists=True, dir_okay=False, path_type=Path),
|
|
2994
|
+
default=None,
|
|
2995
|
+
help="External threshold YAML file.",
|
|
2996
|
+
)
|
|
2997
|
+
@click.option(
|
|
2998
|
+
"--format",
|
|
2999
|
+
"format_name",
|
|
3000
|
+
type=click.Choice(["human", "json", "md"]),
|
|
3001
|
+
default="human",
|
|
3002
|
+
show_default=True,
|
|
3003
|
+
help="Output format.",
|
|
3004
|
+
)
|
|
3005
|
+
@click.option("--with-ai", is_flag=True, default=False, help="Use AI-backed elicit coverage mode.")
|
|
3006
|
+
@click.option("--ai-cmd", default=None, help="Override AI CLI command for --with-ai.")
|
|
3007
|
+
@click.option("--exit-zero", is_flag=True, default=False, help="Always exit 0 for threshold violations.")
|
|
3008
|
+
def coverage_check_cmd(
|
|
3009
|
+
lexicons: str,
|
|
3010
|
+
project_path: str,
|
|
3011
|
+
global_threshold: float | None,
|
|
3012
|
+
threshold_file: Path | None,
|
|
3013
|
+
format_name: str,
|
|
3014
|
+
with_ai: bool,
|
|
3015
|
+
ai_cmd: str | None,
|
|
3016
|
+
exit_zero: bool,
|
|
3017
|
+
) -> None:
|
|
3018
|
+
"""Run a lexicon coverage threshold gate."""
|
|
3019
|
+
from dataclasses import asdict
|
|
3020
|
+
|
|
3021
|
+
from codd.lexicon_cli.formatters.json_fmt import to_json
|
|
3022
|
+
from codd.lexicon_cli.reporter import CoverageReporter
|
|
3023
|
+
from codd.lexicon_cli.threshold import ThresholdConfig, evaluate, load_thresholds
|
|
3024
|
+
|
|
3025
|
+
project_root = Path(project_path).resolve()
|
|
3026
|
+
try:
|
|
3027
|
+
report = CoverageReporter(project_root).build(lexicons, with_ai=with_ai, ai_command=ai_cmd)
|
|
3028
|
+
config = load_thresholds(threshold_file or _default_threshold_path(project_root))
|
|
3029
|
+
if global_threshold is not None:
|
|
3030
|
+
config = ThresholdConfig(default_pct=global_threshold)
|
|
3031
|
+
violations = evaluate(report, config)
|
|
3032
|
+
except (OSError, ValueError, json.JSONDecodeError, yaml.YAMLError) as exc:
|
|
3033
|
+
click.echo(f"Error: {exc}")
|
|
3034
|
+
raise SystemExit(2)
|
|
3035
|
+
|
|
3036
|
+
payload = {
|
|
3037
|
+
"status": "fail" if violations else "pass",
|
|
3038
|
+
"thresholds": asdict(config),
|
|
3039
|
+
"totals": report.totals,
|
|
3040
|
+
"violations": [asdict(violation) for violation in violations],
|
|
3041
|
+
}
|
|
3042
|
+
if format_name == "json":
|
|
3043
|
+
click.echo(to_json(payload), nl=False)
|
|
3044
|
+
elif format_name == "md":
|
|
3045
|
+
click.echo(_format_coverage_check_md(payload), nl=False)
|
|
3046
|
+
else:
|
|
3047
|
+
click.echo(_format_coverage_check_human(payload), nl=False)
|
|
3048
|
+
|
|
3049
|
+
raise SystemExit(0 if exit_zero or not violations else 1)
|
|
3050
|
+
|
|
3051
|
+
|
|
3052
|
+
def _default_threshold_path(project_root: Path) -> Path | None:
|
|
3053
|
+
codd_dir = find_codd_dir(project_root)
|
|
3054
|
+
return codd_dir / "codd.yaml" if codd_dir is not None else None
|
|
3055
|
+
|
|
3056
|
+
|
|
3057
|
+
def _format_coverage_check_human(payload: dict[str, Any]) -> str:
|
|
3058
|
+
status = str(payload["status"]).upper()
|
|
3059
|
+
totals = payload["totals"]
|
|
3060
|
+
lines = [
|
|
3061
|
+
f"Coverage check {status}",
|
|
3062
|
+
f"Axes: {totals['covered']}/{totals['axes']} covered ({totals['covered_pct']:.2f}%)",
|
|
3063
|
+
]
|
|
3064
|
+
violations = payload["violations"]
|
|
3065
|
+
if violations:
|
|
3066
|
+
lines.append("Violations:")
|
|
3067
|
+
for violation in violations:
|
|
3068
|
+
axis = violation["axis"] or "<overall>"
|
|
3069
|
+
lines.append(
|
|
3070
|
+
f" - {violation['lexicon_id']} {axis}: "
|
|
3071
|
+
f"{violation['observed_pct']:.2f}% < {violation['required_pct']:.2f}%"
|
|
3072
|
+
)
|
|
3073
|
+
return "\n".join(lines) + "\n"
|
|
3074
|
+
|
|
3075
|
+
|
|
3076
|
+
def _format_coverage_check_md(payload: dict[str, Any]) -> str:
|
|
3077
|
+
totals = payload["totals"]
|
|
3078
|
+
lines = [
|
|
3079
|
+
"# Coverage Threshold Check",
|
|
3080
|
+
"",
|
|
3081
|
+
f"Status: **{str(payload['status']).upper()}**",
|
|
3082
|
+
f"Axes: {totals['covered']}/{totals['axes']} covered ({totals['covered_pct']:.2f}%)",
|
|
3083
|
+
"",
|
|
3084
|
+
"| Lexicon | Axis | Observed | Required |",
|
|
3085
|
+
"| --- | --- | ---: | ---: |",
|
|
3086
|
+
]
|
|
3087
|
+
violations = payload["violations"]
|
|
3088
|
+
if violations:
|
|
3089
|
+
for violation in violations:
|
|
3090
|
+
axis = violation["axis"] or "<overall>"
|
|
3091
|
+
lines.append(
|
|
3092
|
+
f"| {violation['lexicon_id']} | {axis} | "
|
|
3093
|
+
f"{violation['observed_pct']:.2f}% | {violation['required_pct']:.2f}% |"
|
|
3094
|
+
)
|
|
3095
|
+
else:
|
|
3096
|
+
lines.append("| - | - | - | - |")
|
|
3097
|
+
return "\n".join(lines) + "\n"
|
|
3098
|
+
|
|
3099
|
+
|
|
2976
3100
|
@main.command("deploy")
|
|
2977
3101
|
@click.option("--target", default=None, help="Deploy target name from deploy.yaml")
|
|
2978
3102
|
@click.option(
|
|
@@ -3,15 +3,18 @@
|
|
|
3
3
|
from codd.lexicon_cli.inspector import AxisInspection, LexiconDiffResult, TextHit
|
|
4
4
|
from codd.lexicon_cli.manager import InstallResult, LexiconManager, LexiconRecord
|
|
5
5
|
from codd.lexicon_cli.reporter import CoverageMatrixReport, CoverageReporter, CoverageRow
|
|
6
|
+
from codd.lexicon_cli.threshold import CoverageViolation, ThresholdConfig
|
|
6
7
|
|
|
7
8
|
__all__ = [
|
|
8
9
|
"AxisInspection",
|
|
9
10
|
"CoverageMatrixReport",
|
|
10
11
|
"CoverageReporter",
|
|
11
12
|
"CoverageRow",
|
|
13
|
+
"CoverageViolation",
|
|
12
14
|
"InstallResult",
|
|
13
15
|
"LexiconDiffResult",
|
|
14
16
|
"LexiconManager",
|
|
15
17
|
"LexiconRecord",
|
|
16
18
|
"TextHit",
|
|
19
|
+
"ThresholdConfig",
|
|
17
20
|
]
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"""Threshold gate for lexicon coverage matrix reports."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections import defaultdict
|
|
6
|
+
from dataclasses import dataclass, field
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import Any, Mapping
|
|
9
|
+
|
|
10
|
+
import yaml
|
|
11
|
+
|
|
12
|
+
from codd.lexicon_cli.reporter import CoverageMatrixReport, CoverageRow
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclass(frozen=True)
|
|
16
|
+
class ThresholdConfig:
|
|
17
|
+
default_pct: float = 0.0
|
|
18
|
+
per_lexicon: dict[str, float] = field(default_factory=dict)
|
|
19
|
+
per_axis: dict[str, dict[str, float]] = field(default_factory=dict)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@dataclass(frozen=True)
|
|
23
|
+
class CoverageViolation:
|
|
24
|
+
lexicon_id: str
|
|
25
|
+
axis: str | None
|
|
26
|
+
observed_pct: float
|
|
27
|
+
required_pct: float
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def load_thresholds(codd_yaml_path: Path | None) -> ThresholdConfig:
|
|
31
|
+
"""Load coverage thresholds from codd.yaml, defaulting to no enforcement."""
|
|
32
|
+
if codd_yaml_path is None or not codd_yaml_path.exists():
|
|
33
|
+
return ThresholdConfig()
|
|
34
|
+
|
|
35
|
+
payload = yaml.safe_load(codd_yaml_path.read_text(encoding="utf-8")) or {}
|
|
36
|
+
if not isinstance(payload, Mapping):
|
|
37
|
+
raise ValueError(f"{codd_yaml_path} must contain a YAML mapping")
|
|
38
|
+
|
|
39
|
+
coverage = _mapping(payload.get("coverage"), "coverage", allow_missing=True)
|
|
40
|
+
thresholds = _mapping(coverage.get("thresholds"), "coverage.thresholds", allow_missing=True)
|
|
41
|
+
if not thresholds:
|
|
42
|
+
return ThresholdConfig()
|
|
43
|
+
|
|
44
|
+
default_pct = _threshold_pct(thresholds.get("default"), "coverage.thresholds.default", default=0.0)
|
|
45
|
+
per_lexicon = _load_per_lexicon(thresholds.get("per_lexicon"))
|
|
46
|
+
per_axis = _load_per_axis(thresholds.get("per_axis"))
|
|
47
|
+
return ThresholdConfig(default_pct=default_pct, per_lexicon=per_lexicon, per_axis=per_axis)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def evaluate(matrix_report: CoverageMatrixReport, config: ThresholdConfig) -> list[CoverageViolation]:
|
|
51
|
+
"""Compare a coverage matrix report with configured thresholds."""
|
|
52
|
+
violations: list[CoverageViolation] = []
|
|
53
|
+
rows_by_lexicon: dict[str, list[CoverageRow]] = defaultdict(list)
|
|
54
|
+
for row in matrix_report.rows:
|
|
55
|
+
rows_by_lexicon[row.lexicon_id].append(row)
|
|
56
|
+
|
|
57
|
+
for lexicon_id, rows in sorted(rows_by_lexicon.items()):
|
|
58
|
+
required_pct = config.per_lexicon.get(lexicon_id, config.default_pct)
|
|
59
|
+
observed_pct = _covered_pct(rows)
|
|
60
|
+
if _is_violation(observed_pct, required_pct):
|
|
61
|
+
violations.append(
|
|
62
|
+
CoverageViolation(
|
|
63
|
+
lexicon_id=lexicon_id,
|
|
64
|
+
axis=None,
|
|
65
|
+
observed_pct=observed_pct,
|
|
66
|
+
required_pct=required_pct,
|
|
67
|
+
)
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
axis_thresholds = config.per_axis.get(lexicon_id, {})
|
|
71
|
+
for row in rows:
|
|
72
|
+
if row.axis_type not in axis_thresholds:
|
|
73
|
+
continue
|
|
74
|
+
axis_observed_pct = 100.0 if _is_covered_status(row.status) else 0.0
|
|
75
|
+
axis_required_pct = axis_thresholds[row.axis_type]
|
|
76
|
+
if _is_violation(axis_observed_pct, axis_required_pct):
|
|
77
|
+
violations.append(
|
|
78
|
+
CoverageViolation(
|
|
79
|
+
lexicon_id=lexicon_id,
|
|
80
|
+
axis=row.axis_type,
|
|
81
|
+
observed_pct=axis_observed_pct,
|
|
82
|
+
required_pct=axis_required_pct,
|
|
83
|
+
)
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
return violations
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def _load_per_lexicon(value: Any) -> dict[str, float]:
|
|
90
|
+
data = _mapping(value, "coverage.thresholds.per_lexicon", allow_missing=True)
|
|
91
|
+
result: dict[str, float] = {}
|
|
92
|
+
for key, item in data.items():
|
|
93
|
+
lexicon_id = _non_empty_key(key, "coverage.thresholds.per_lexicon")
|
|
94
|
+
result[lexicon_id] = _threshold_pct(item, f"coverage.thresholds.per_lexicon.{lexicon_id}")
|
|
95
|
+
return result
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def _load_per_axis(value: Any) -> dict[str, dict[str, float]]:
|
|
99
|
+
data = _mapping(value, "coverage.thresholds.per_axis", allow_missing=True)
|
|
100
|
+
result: dict[str, dict[str, float]] = {}
|
|
101
|
+
for key, item in data.items():
|
|
102
|
+
lexicon_id = _non_empty_key(key, "coverage.thresholds.per_axis")
|
|
103
|
+
axes = _mapping(item, f"coverage.thresholds.per_axis.{lexicon_id}")
|
|
104
|
+
result[lexicon_id] = {
|
|
105
|
+
_non_empty_key(axis, f"coverage.thresholds.per_axis.{lexicon_id}"): _threshold_pct(
|
|
106
|
+
threshold,
|
|
107
|
+
f"coverage.thresholds.per_axis.{lexicon_id}.{axis}",
|
|
108
|
+
)
|
|
109
|
+
for axis, threshold in axes.items()
|
|
110
|
+
}
|
|
111
|
+
return result
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def _threshold_pct(value: Any, path: str, *, default: float | None = None) -> float:
|
|
115
|
+
if value is None and default is not None:
|
|
116
|
+
return default
|
|
117
|
+
if isinstance(value, Mapping):
|
|
118
|
+
if "covered_text_match_pct" not in value:
|
|
119
|
+
if default is not None:
|
|
120
|
+
return default
|
|
121
|
+
raise ValueError(f"{path}.covered_text_match_pct is required")
|
|
122
|
+
value = value["covered_text_match_pct"]
|
|
123
|
+
try:
|
|
124
|
+
pct = float(value)
|
|
125
|
+
except (TypeError, ValueError) as exc:
|
|
126
|
+
raise ValueError(f"{path}.covered_text_match_pct must be a number") from exc
|
|
127
|
+
if pct < 0 or pct > 100:
|
|
128
|
+
raise ValueError(f"{path}.covered_text_match_pct must be between 0 and 100")
|
|
129
|
+
return pct
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def _mapping(value: Any, path: str, *, allow_missing: bool = False) -> Mapping[str, Any]:
|
|
133
|
+
if value is None and allow_missing:
|
|
134
|
+
return {}
|
|
135
|
+
if not isinstance(value, Mapping):
|
|
136
|
+
raise ValueError(f"{path} must be a YAML mapping")
|
|
137
|
+
return value
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def _non_empty_key(value: Any, path: str) -> str:
|
|
141
|
+
text = str(value).strip()
|
|
142
|
+
if not text:
|
|
143
|
+
raise ValueError(f"{path} keys must be non-empty")
|
|
144
|
+
return text
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def _covered_pct(rows: list[CoverageRow]) -> float:
|
|
148
|
+
if not rows:
|
|
149
|
+
return 0.0
|
|
150
|
+
covered = sum(1 for row in rows if _is_covered_status(row.status))
|
|
151
|
+
return round((covered / len(rows)) * 100, 2)
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def _is_covered_status(status: str) -> bool:
|
|
155
|
+
return status.casefold() in {"covered", "covered_text_match", "implicit"}
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def _is_violation(observed_pct: float, required_pct: float) -> bool:
|
|
159
|
+
return observed_pct + 1e-9 < required_pct
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "codd-dev"
|
|
7
|
-
version = "1.
|
|
7
|
+
version = "2.1.0"
|
|
8
8
|
description = "CoDD: Coherence-Driven Development — cross-artifact change impact analysis"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -67,10 +67,10 @@ include = [
|
|
|
67
67
|
"codd/hooks/recipes/*.sh",
|
|
68
68
|
"codd/templates/**/*.j2",
|
|
69
69
|
"codd/templates/**/*.tmpl",
|
|
70
|
-
"codd/hooks/pre-commit",
|
|
71
|
-
"codd_plugins/**/*.yaml",
|
|
72
|
-
"codd_plugins/**/*.md",
|
|
73
|
-
"README.md",
|
|
70
|
+
"codd/hooks/pre-commit",
|
|
71
|
+
"codd_plugins/**/*.yaml",
|
|
72
|
+
"codd_plugins/**/*.md",
|
|
73
|
+
"README.md",
|
|
74
74
|
"LICENSE",
|
|
75
75
|
]
|
|
76
76
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|