codd-dev 2.0.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-2.0.0 → codd_dev-2.1.0}/PKG-INFO +1 -1
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/cli.py +124 -0
- {codd_dev-2.0.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-2.0.0 → codd_dev-2.1.0}/pyproject.toml +1 -1
- {codd_dev-2.0.0 → codd_dev-2.1.0}/.gitignore +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/LICENSE +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/README.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/__main__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/assembler.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/bridge.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/clustering.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/config.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/contracts.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/defaults.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployer.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/design_md.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/drift.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/env_refs.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/extractor.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/fixer.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/generator.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/graph.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/implementer.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/inheritance.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/lexicon.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/measure.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/parsing.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/planner.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/policy.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/propagate.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/propagator.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/registry.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair/history.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/require.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/restore.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/scanner.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/synth.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/traceability.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/validator.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/watch/events.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd/wiring.py +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.0.0 → codd_dev-2.1.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.0.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: 2.
|
|
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
|
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/defaults/runtime_capability_inference.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codd_dev-2.0.0 → codd_dev-2.1.0}/codd/deployment/providers/verification/assertion_handlers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|