codd-dev 2.73.0__tar.gz → 2.75.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.73.0 → codd_dev-2.75.0}/PKG-INFO +1 -1
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/__init__.py +1 -1
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/languages/profiles/go.yaml +7 -1
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/languages/verify_executor.py +75 -6
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/languages/verify_plan.py +31 -1
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/verify_runner.py +268 -7
- {codd_dev-2.73.0 → codd_dev-2.75.0}/pyproject.toml +1 -1
- {codd_dev-2.73.0 → codd_dev-2.75.0}/.gitignore +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/LICENSE +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/README.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/__main__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/assembler.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/bridge.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/cli.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/clustering.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/confidence.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/config.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/config_schema.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/contracts.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/contracts_registry/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/contracts_registry/__main__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/contracts_registry/certify.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/contracts_registry/generate_matrix.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/contracts_registry/registry.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/coverage_execution_coherence.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/defaults.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/defaults.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployer.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/design_md.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/discovery.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/drift.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/e2e_harness.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/env_refs.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/extractor.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fixer.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/generator.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/graph.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/greenfield/pipeline.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/implement_oracle.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/implement_oracle_scope.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/implementer.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/inheritance.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/languages/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/languages/adapters/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/languages/adapters/runner_report.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/languages/builtin_adapters.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/languages/compat.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/languages/contract.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/languages/loader.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/languages/path_planner.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/languages/profile.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/languages/profiles/python.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/languages/profiles/typescript.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/languages/registry.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/lexicon.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/measure.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/planner.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/policy.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/project_types.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/propagate.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/propagator.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/reference_resolution.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/registry.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/auto_scope_guard.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/history.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/require.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/restore.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/scanner.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/stack/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/stack/adapters/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/stack/adapters/_base.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/stack/adapters/nextjs.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/stack/adapters/playwright.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/stack/compose.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/stack/loader.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/stack/lock.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/stack/obligations.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/stack/profile.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/stack/project.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/stack/registry.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/stack/resolve.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/synth.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/test_detection.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/traceability.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/validator.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/vb_marker_authenticity.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/vb_rerun_scope.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/verifiable_behavior_audit.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/watch/events.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd/wiring.py +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/dogfood/README.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/examples/README.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.73.0 → codd_dev-2.75.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.75.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
|
|
@@ -170,7 +170,13 @@ commands:
|
|
|
170
170
|
argv: ["go", "test", "-json", "./..."]
|
|
171
171
|
cwd: "{module_root}"
|
|
172
172
|
env:
|
|
173
|
-
|
|
173
|
+
# -buildvcs=false: a greenfield Go output dir is frequently NOT a clean git
|
|
174
|
+
# repo, so `go test`/`go build` fail with "error obtaining VCS status / use
|
|
175
|
+
# -buildvcs=false". The legacy _go_aware_env added this for the legacy path;
|
|
176
|
+
# the contract executor runs verify with plan.env, so the hardener must be
|
|
177
|
+
# DECLARED here or the contract path regresses the VCS-stamp failure. ONLY on
|
|
178
|
+
# verify — build/vet/typecheck env is read by implement_oracle (pinned tests).
|
|
179
|
+
GOFLAGS: "-mod=readonly -buildvcs=false"
|
|
174
180
|
report:
|
|
175
181
|
capture: stdout
|
|
176
182
|
path: ".codd/verify/go-test.jsonl"
|
|
@@ -33,7 +33,12 @@ to classes (the anti-false-green ordering, GPT §5):
|
|
|
33
33
|
* a SKIPPED test was observed (``observation.skipped_tests == "red"``) → ``FAIL``
|
|
34
34
|
(skip is not an authentic pass; see below for how a skip is detected).
|
|
35
35
|
* ``returncode != 0`` → ``FAIL`` (a nonzero exit beats a green-looking report).
|
|
36
|
-
*
|
|
36
|
+
* a required test set (``plan.required_test_sets``) had ZERO executed files in the
|
|
37
|
+
parsed report → ``SCOPE_MISSING`` (Step 5; the "unit-only PASS" hole). Checked
|
|
38
|
+
LAST, after the zero/failed/rc!=0 branches (so a more fundamental failure always
|
|
39
|
+
wins) and just before PASS (so a scope miss on an exit-0 clean report is RED).
|
|
40
|
+
* else (rc==0, report parsed, collected ≥ floor, no failed/skipped, every required
|
|
41
|
+
scope covered) → ``PASS``.
|
|
37
42
|
|
|
38
43
|
How a SKIP is detected from :class:`RunnerExecution`. The adapters fold a skipped
|
|
39
44
|
case into the FILE-level signal: a file carrying ANY skipped (or failed) case is
|
|
@@ -206,6 +211,38 @@ def execute_verify_plan(
|
|
|
206
211
|
return _classify(plan, returncode, report_path, adapter, project_root)
|
|
207
212
|
|
|
208
213
|
|
|
214
|
+
def _norm_rel_posix(path: str) -> str:
|
|
215
|
+
"""Normalize a path to comparable project-relative POSIX form for scope matching.
|
|
216
|
+
|
|
217
|
+
Mirrors how :class:`RunnerExecution` already stores executed files (project-
|
|
218
|
+
relative, POSIX) but is defensive about a stray ``./`` prefix / backslash and a
|
|
219
|
+
trailing slash so a root and an executed-file path compare on the same footing.
|
|
220
|
+
Uses PREFIX stripping (not ``lstrip("./")``, which is a character class and would
|
|
221
|
+
wrongly eat a legitimate leading dot, e.g. ``.codd/x`` → ``codd/x``).
|
|
222
|
+
"""
|
|
223
|
+
p = str(path or "").replace("\\", "/")
|
|
224
|
+
if p.startswith("./"):
|
|
225
|
+
p = p[2:]
|
|
226
|
+
return p.rstrip("/")
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
def _set_is_covered(root: str, executed: list[str]) -> bool:
|
|
230
|
+
"""True iff some executed file falls under ``root`` (a directory prefix match).
|
|
231
|
+
|
|
232
|
+
``root`` is normalized like the executed paths. A root of ``.`` or ``""`` (a
|
|
233
|
+
colocated set, whose tests sit anywhere among the sources) is trivially covered
|
|
234
|
+
by ANY executed file. A specific root such as ``tests/e2e`` is covered only by an
|
|
235
|
+
executed file equal to it or beneath it (``path == root`` or
|
|
236
|
+
``path.startswith(root + "/")``) — so ``tests/unit/...`` never counts as covering
|
|
237
|
+
``tests/e2e``.
|
|
238
|
+
"""
|
|
239
|
+
norm_root = _norm_rel_posix(root)
|
|
240
|
+
if norm_root in ("", "."):
|
|
241
|
+
return bool(executed)
|
|
242
|
+
prefix = norm_root + "/"
|
|
243
|
+
return any(p == norm_root or p.startswith(prefix) for p in executed)
|
|
244
|
+
|
|
245
|
+
|
|
209
246
|
def _classify(
|
|
210
247
|
plan: VerifyRunPlan,
|
|
211
248
|
returncode: int,
|
|
@@ -307,13 +344,45 @@ def _classify(
|
|
|
307
344
|
detail=f"verify command exited {returncode} (nonzero exit beats a green-looking report)",
|
|
308
345
|
)
|
|
309
346
|
|
|
310
|
-
#
|
|
311
|
-
#
|
|
312
|
-
#
|
|
313
|
-
#
|
|
347
|
+
# Step 5 — SCOPE observation. A clean, exit-0, parsed report can still be a
|
|
348
|
+
# FALSE green if it never ran a test set it was REQUIRED to cover (the
|
|
349
|
+
# "unit-only PASS" hole: a mutation that only ran unit tests while an e2e set
|
|
350
|
+
# was required). For each required ``(set_id, root)``, check whether ANY file
|
|
351
|
+
# the report says it executed falls under that set's root; a required set with
|
|
352
|
+
# ZERO covering executed files → SCOPE_MISSING (RED).
|
|
353
|
+
#
|
|
354
|
+
# Ordering: this runs AFTER the zero/failed/rc!=0 branches above (so a more
|
|
355
|
+
# fundamental failure always wins — a report with a FAILED file is FAIL even if
|
|
356
|
+
# e2e is also uncovered, because the failed-file branch returned earlier) and
|
|
357
|
+
# is the LAST not-green gate BEFORE PASS (so a scope miss on an otherwise
|
|
358
|
+
# green-looking exit-0 report is correctly RED, never PASS).
|
|
359
|
+
#
|
|
360
|
+
# We only have something to check when a report was parsed; the no-report /
|
|
361
|
+
# failing cases are already classified above. ``execution.executed_files`` are
|
|
362
|
+
# project-relative, POSIX, normalized test-file paths (see RunnerExecution), so
|
|
363
|
+
# we match a root the same way: strip leading ``./``, POSIX separators, and
|
|
364
|
+
# treat ``root`` as a directory PREFIX — a path covers the root iff
|
|
365
|
+
# ``path == root`` or ``path.startswith(root + "/")``. A root of ``.`` or ``""``
|
|
366
|
+
# (a colocated set) matches every executed file, so any executed file trivially
|
|
367
|
+
# covers it.
|
|
368
|
+
if execution is not None and plan.required_test_sets:
|
|
369
|
+
executed = [_norm_rel_posix(p) for p in execution.executed_files]
|
|
370
|
+
for set_id, raw_root in plan.required_test_sets:
|
|
371
|
+
if not _set_is_covered(raw_root, executed):
|
|
372
|
+
return VerifyExecutionResult(
|
|
373
|
+
verify_class=VerifyClass.SCOPE_MISSING,
|
|
374
|
+
returncode=returncode,
|
|
375
|
+
execution=execution,
|
|
376
|
+
detail=(
|
|
377
|
+
f"required test set {set_id!r} (root {raw_root!r}) had zero "
|
|
378
|
+
f"executed files in the report — the verify did not run what it "
|
|
379
|
+
f"must cover (a report that is green only because it skipped a "
|
|
380
|
+
f"required set is not an authentic pass)"
|
|
381
|
+
),
|
|
382
|
+
)
|
|
314
383
|
|
|
315
384
|
# All not-green checks passed: rc==0, required report parsed, collected ≥ floor,
|
|
316
|
-
# no failed/skipped → the only green class.
|
|
385
|
+
# no failed/skipped, every required scope covered → the only green class.
|
|
317
386
|
return VerifyExecutionResult(
|
|
318
387
|
verify_class=VerifyClass.PASS,
|
|
319
388
|
returncode=returncode,
|
|
@@ -36,6 +36,14 @@ class VerifyClass(str, Enum):
|
|
|
36
36
|
observability failure from the report being PRESENT but unparseable (a garbled
|
|
37
37
|
JSON/JSONL, or no adapter able to read it). Both are not-green — only ``PASS``
|
|
38
38
|
is green — but keeping them separate lets the executor report the honest reason.
|
|
39
|
+
|
|
40
|
+
``SCOPE_MISSING`` (Contract Kernel Step 5) is the verify that PARSED a clean,
|
|
41
|
+
exit-0 report but did NOT cover a test set it was REQUIRED to cover (a
|
|
42
|
+
``scope.must_include_test_sets`` entry with zero executed files under its root —
|
|
43
|
+
e.g. only the unit set ran while an e2e set was required). It closes the
|
|
44
|
+
"unit-only PASS" hole: a report that looks green only because it never ran the
|
|
45
|
+
set that matters is not-green, not PASS. Like the others it is NOT green
|
|
46
|
+
(``is_green`` stays PASS-only).
|
|
39
47
|
"""
|
|
40
48
|
|
|
41
49
|
PASS = "PASS"
|
|
@@ -43,6 +51,7 @@ class VerifyClass(str, Enum):
|
|
|
43
51
|
ZERO_TESTS = "ZERO_TESTS"
|
|
44
52
|
REPORT_MISSING = "REPORT_MISSING"
|
|
45
53
|
REPORT_UNREADABLE = "REPORT_UNREADABLE"
|
|
54
|
+
SCOPE_MISSING = "SCOPE_MISSING"
|
|
46
55
|
TOOL_MISSING = "TOOL_MISSING"
|
|
47
56
|
CONFIG_ERROR = "CONFIG_ERROR"
|
|
48
57
|
|
|
@@ -63,6 +72,12 @@ class VerifyRunPlan:
|
|
|
63
72
|
report_adapter: str | None
|
|
64
73
|
report_required: bool
|
|
65
74
|
must_include_test_sets: tuple[str, ...]
|
|
75
|
+
#: Resolved ``(id, root)`` for each ``must_include_test_sets`` id that names a
|
|
76
|
+
#: real TestSet in ``contract.profile.layout.test_sets`` — the scope check (Step
|
|
77
|
+
#: 5) needs the set ROOTS, not just ids, to ask "did any executed file fall under
|
|
78
|
+
#: this set's root?". Populated by :func:`build_verify_plan`; ids that match no
|
|
79
|
+
#: TestSet are deliberately dropped here (a profile inconsistency, see there).
|
|
80
|
+
required_test_sets: tuple[tuple[str, str], ...]
|
|
66
81
|
observation: VerifyObservationPolicy
|
|
67
82
|
#: ``report.capture`` from the verify CommandSpec (e.g. Go's ``stdout``). When
|
|
68
83
|
#: ``"stdout"`` the verify command streams its machine-readable report to stdout
|
|
@@ -90,6 +105,20 @@ def build_verify_plan(contract: ResolvedLanguageContract) -> VerifyRunPlan | Non
|
|
|
90
105
|
return None
|
|
91
106
|
report = cmd.report
|
|
92
107
|
scope = cmd.scope
|
|
108
|
+
must_include = scope.must_include_test_sets if scope else ()
|
|
109
|
+
# Resolve each must_include id to its TestSet ROOT (the scope check in the
|
|
110
|
+
# executor matches executed_files against roots, so it needs roots, not ids).
|
|
111
|
+
# A must_include id that names NO TestSet in the layout is a PROFILE
|
|
112
|
+
# INCONSISTENCY (a command requires coverage of a set the topology never
|
|
113
|
+
# declares): we keep it simple and just don't add a root for it — but we do
|
|
114
|
+
# NOT drop the id from ``must_include_test_sets`` and we do NOT silently make
|
|
115
|
+
# scope un-checkable for a REAL set; only the unresolvable id is skipped here.
|
|
116
|
+
sets_by_id = {ts.id: ts for ts in contract.profile.layout.test_sets}
|
|
117
|
+
required_test_sets = tuple(
|
|
118
|
+
(set_id, sets_by_id[set_id].root)
|
|
119
|
+
for set_id in must_include
|
|
120
|
+
if set_id in sets_by_id
|
|
121
|
+
)
|
|
93
122
|
return VerifyRunPlan(
|
|
94
123
|
language_id=contract.language_id,
|
|
95
124
|
argv=tuple(cmd.argv),
|
|
@@ -99,7 +128,8 @@ def build_verify_plan(contract: ResolvedLanguageContract) -> VerifyRunPlan | Non
|
|
|
99
128
|
report_adapter=(report.adapter if report else None),
|
|
100
129
|
report_required=bool(report and report.path),
|
|
101
130
|
report_capture=(report.capture if report else None),
|
|
102
|
-
must_include_test_sets=
|
|
131
|
+
must_include_test_sets=must_include,
|
|
132
|
+
required_test_sets=required_test_sets,
|
|
103
133
|
# None on the command ⇒ the strict defaults (the invariant), never weaker.
|
|
104
134
|
observation=(cmd.observation or VerifyObservationPolicy()),
|
|
105
135
|
)
|
|
@@ -9,11 +9,16 @@ import re
|
|
|
9
9
|
from dataclasses import asdict, dataclass, field, is_dataclass
|
|
10
10
|
from datetime import datetime, timezone
|
|
11
11
|
from pathlib import Path
|
|
12
|
-
from typing import Any, Mapping
|
|
12
|
+
from typing import TYPE_CHECKING, Any, Mapping
|
|
13
13
|
import subprocess
|
|
14
14
|
import time
|
|
15
15
|
import warnings
|
|
16
16
|
|
|
17
|
+
if TYPE_CHECKING: # import-time-free type hints (no cycle, no runtime cost)
|
|
18
|
+
from codd.languages.registry import AdapterRegistry, LanguageRegistry
|
|
19
|
+
from codd.languages.verify_executor import VerifyExecutionResult
|
|
20
|
+
from codd.languages.verify_plan import VerifyRunPlan
|
|
21
|
+
|
|
17
22
|
import yaml
|
|
18
23
|
|
|
19
24
|
from codd.config import find_codd_dir, load_project_config
|
|
@@ -119,6 +124,20 @@ class VerificationResult:
|
|
|
119
124
|
#: One-line status of the deterministic parse check over project sources
|
|
120
125
|
#: ("checked N file(s)", "disabled", "N parse error(s)", "not checked").
|
|
121
126
|
source_integrity: str = "not checked"
|
|
127
|
+
# ── Step 6 contract-switch trace (additive; defaults keep old constructors
|
|
128
|
+
# valid). ``verify_path`` records which path produced the test verdict:
|
|
129
|
+
# "contract" — the contract executor ran (its verdict is FINAL),
|
|
130
|
+
# "legacy_fallback" — a PRE-execution fallback to the legacy ladder fired,
|
|
131
|
+
# "legacy" — no contract machinery was in play (the default).
|
|
132
|
+
#: Which path produced the test-command verdict ("contract"/"legacy_fallback"/"legacy").
|
|
133
|
+
verify_path: str = "legacy"
|
|
134
|
+
#: True when a PRE-execution legacy fallback fired (never after the contract
|
|
135
|
+
#: executor ran — there is no post-execution rescue). The v3.0.0 cut gates on
|
|
136
|
+
#: ``fallback_used == 0``.
|
|
137
|
+
fallback_used: bool = False
|
|
138
|
+
#: Why the fallback fired ("no_language"/"no_verify_plan"/
|
|
139
|
+
#: "missing_adapter_legacy_compatible"), else ``None``.
|
|
140
|
+
fallback_reason: str | None = None
|
|
122
141
|
|
|
123
142
|
@property
|
|
124
143
|
def executed_anything(self) -> bool:
|
|
@@ -156,10 +175,25 @@ class VerifyRunner:
|
|
|
156
175
|
project_root: Path,
|
|
157
176
|
codd_yaml: Mapping[str, Any] | None,
|
|
158
177
|
runtime_skip: tuple[str, ...] | list[str] | set[str] | None = None,
|
|
178
|
+
*,
|
|
179
|
+
language_registry: "LanguageRegistry | None" = None,
|
|
180
|
+
adapter_registry: "AdapterRegistry | None" = None,
|
|
159
181
|
):
|
|
160
182
|
self.project_root = Path(project_root).resolve()
|
|
161
183
|
self.codd_yaml = dict(codd_yaml or {})
|
|
162
184
|
self.runtime_skip = frozenset(str(item) for item in (runtime_skip or ()))
|
|
185
|
+
# Contract-Kernel registries. ``None`` ⇒ the process-wide defaults
|
|
186
|
+
# (``default_registry`` / ``default_adapter_registry``); they are
|
|
187
|
+
# keyword-only injection seams so a hermetic test can drive the
|
|
188
|
+
# contract-first verify path against a synthetic profile + fake adapter
|
|
189
|
+
# WITHOUT a real go/pytest toolchain. Production never passes them.
|
|
190
|
+
self._language_registry = language_registry
|
|
191
|
+
self._adapter_registry = adapter_registry
|
|
192
|
+
# fallback_used observability (Step 6 trace). Set by ``_run_test_command``
|
|
193
|
+
# and read by ``run()`` when it builds the ``VerificationResult``.
|
|
194
|
+
self._verify_path: str = "legacy"
|
|
195
|
+
self._fallback_used: bool = False
|
|
196
|
+
self._fallback_reason: str | None = None
|
|
163
197
|
|
|
164
198
|
def run(self) -> VerificationResult:
|
|
165
199
|
"""Reset DAG state, run C1-C7 checks, then run executable verification tests.
|
|
@@ -237,6 +271,9 @@ class VerifyRunner:
|
|
|
237
271
|
tests_summary=tests_summary,
|
|
238
272
|
typecheck_executed=typecheck_executed,
|
|
239
273
|
source_integrity=source_integrity,
|
|
274
|
+
verify_path=self._verify_path,
|
|
275
|
+
fallback_used=self._fallback_used,
|
|
276
|
+
fallback_reason=self._fallback_reason,
|
|
240
277
|
)
|
|
241
278
|
# The honesty rule. Plain `codd verify` stays pass-WITH-WARNING by
|
|
242
279
|
# default because existing brownfield/CI configurations may be
|
|
@@ -488,14 +525,198 @@ class VerifyRunner:
|
|
|
488
525
|
def _run_test_command(
|
|
489
526
|
self, settings: dict[str, Any]
|
|
490
527
|
) -> tuple[bool, str | None, str, VerificationFailure | None]:
|
|
491
|
-
"""Resolve and run the project's test command.
|
|
528
|
+
"""Resolve and run the project's test command — CONTRACT-FIRST (Step 6).
|
|
529
|
+
|
|
530
|
+
Returns ``(tests_executed, test_command, tests_summary, test_failure)`` —
|
|
531
|
+
``test_failure is not None`` ⇒ a failure (``passed=False``);
|
|
532
|
+
``tests_executed`` feeds ``executed_anything`` / the honesty rule.
|
|
533
|
+
|
|
534
|
+
This is THE single live point where the Contract Kernel's anti-false-green
|
|
535
|
+
verify executor enters production verify. Decision tree (in order):
|
|
536
|
+
|
|
537
|
+
1. Resolve the language contract. A declared-but-UNKNOWN language is
|
|
538
|
+
``UnknownLanguageError`` → RED (never a fallback). A malformed language
|
|
539
|
+
declaration is a broken contract even when an explicit command exists,
|
|
540
|
+
so this RED is checked FIRST (before the explicit-command override).
|
|
541
|
+
2. EXPLICIT author command override. An explicit ``fix.test_command`` /
|
|
542
|
+
``verify.test_command`` in codd.yaml is author intent that, in the
|
|
543
|
+
legacy ladder, beats all detection (test_detection priority 1-2). It
|
|
544
|
+
designates the command the author wants run AS THEIR verification — so
|
|
545
|
+
routing a project with an explicit command into the PROFILE's verify
|
|
546
|
+
pipeline would verify a DIFFERENT command than the author asked for
|
|
547
|
+
(itself a false-green vector: "pass" the profile command while the
|
|
548
|
+
author's real suite never ran). The contract's stricter observation is
|
|
549
|
+
the policy for the profile-DERIVED default, not an override of an
|
|
550
|
+
explicit author substitution. So an explicit command → pre-execution
|
|
551
|
+
legacy fallback (reason ``explicit_test_command``); the legacy evidence
|
|
552
|
+
path runs it and keeps its OWN anti-false-green guards (JS zero-collected
|
|
553
|
+
hard-fail, pytest exit-5 = no-tests, nonzero/timeout = fail). Marked
|
|
554
|
+
``fallback_used=True`` so the v3.0.0 ``fallback_used == 0`` cut surfaces
|
|
555
|
+
it as migration debt (not a permanent green-washing escape hatch). This
|
|
556
|
+
is language-AGNOSTIC (gates on "did the author provide a command", never
|
|
557
|
+
on a language name) and PRE-execution (no post-execution rescue).
|
|
558
|
+
2b. Structural-only opt-out. ``verify.allow_structural_only: true`` is the
|
|
559
|
+
author's explicit declaration that there is no executable verification
|
|
560
|
+
(the honesty rule already honors it). Forcing the contract executor would
|
|
561
|
+
run a verify command the author declared absent → pre-execution legacy
|
|
562
|
+
fallback (reason ``structural_only``); like (2), an author opt-out that
|
|
563
|
+
pre-empts the contract path.
|
|
564
|
+
3. No ``project.language`` (contract is ``None``) → pre-execution legacy
|
|
565
|
+
fallback (reason ``no_language``).
|
|
566
|
+
4. No verify command in the profile (``build_verify_plan`` is ``None``) →
|
|
567
|
+
pre-execution legacy fallback (reason ``no_verify_plan``).
|
|
568
|
+
5. Scoped runner_report-adapter gate (NOT full ``require_complete()`` —
|
|
569
|
+
other adapter kinds are unimplemented and would RED everything): if the
|
|
570
|
+
plan requires a report and the runner_report adapter is unavailable,
|
|
571
|
+
a ``strict`` profile → RED; a ``legacy_compatible`` profile →
|
|
572
|
+
pre-execution legacy fallback (reason
|
|
573
|
+
``missing_adapter_legacy_compatible``).
|
|
574
|
+
6. Otherwise run the contract executor. Its verdict is FINAL — there is
|
|
575
|
+
NO post-execution legacy rescue (a contract not-green is never turned
|
|
576
|
+
green by re-running the legacy ladder).
|
|
577
|
+
"""
|
|
578
|
+
from codd.test_detection import _explicit_test_command
|
|
579
|
+
from codd.languages.contract import resolve_language_contract
|
|
580
|
+
from codd.languages.registry import (
|
|
581
|
+
UnknownLanguageError,
|
|
582
|
+
default_adapter_registry,
|
|
583
|
+
)
|
|
584
|
+
from codd.languages.verify_plan import build_verify_plan
|
|
585
|
+
|
|
586
|
+
# (1) Resolve the language contract — a declared-unknown language is RED.
|
|
587
|
+
try:
|
|
588
|
+
contract = resolve_language_contract(
|
|
589
|
+
settings,
|
|
590
|
+
language_registry=self._language_registry,
|
|
591
|
+
adapter_registry=self._adapter_registry,
|
|
592
|
+
)
|
|
593
|
+
except UnknownLanguageError as exc:
|
|
594
|
+
self._mark_contract_path()
|
|
595
|
+
return (
|
|
596
|
+
False,
|
|
597
|
+
None,
|
|
598
|
+
"unknown declared language",
|
|
599
|
+
VerificationFailure(
|
|
600
|
+
check_name="test_command",
|
|
601
|
+
source="test_command",
|
|
602
|
+
message=(
|
|
603
|
+
f"project.language is declared but unknown: {exc}. A declared "
|
|
604
|
+
"language with no matching profile is RED, never a silent "
|
|
605
|
+
"fallback to the legacy test ladder."
|
|
606
|
+
),
|
|
607
|
+
details={"failure_class": "unknown_declared_language"},
|
|
608
|
+
),
|
|
609
|
+
)
|
|
610
|
+
|
|
611
|
+
# (2) Explicit author command override (checked AFTER the unknown-language
|
|
612
|
+
# RED, BEFORE all other routing). An explicit fix/verify.test_command is a
|
|
613
|
+
# deliberate author substitution that the legacy ladder honors over
|
|
614
|
+
# detection; the contract path would otherwise run the profile's DEFAULT
|
|
615
|
+
# verify command instead — verifying something the author did not ask for.
|
|
616
|
+
# Pre-execution legacy fallback; the legacy guards still prevent green-on-
|
|
617
|
+
# nothing. Language-agnostic + migration debt (fallback_used=True).
|
|
618
|
+
if _explicit_test_command(settings):
|
|
619
|
+
return self._legacy_test_command(settings, reason="explicit_test_command")
|
|
620
|
+
|
|
621
|
+
# (2b) Structural-only opt-out. ``verify.allow_structural_only: true`` is the
|
|
622
|
+
# author's EXPLICIT declaration that structural DAG coherence is the whole
|
|
623
|
+
# contract here and there is no executable verification (doc-only repos, or a
|
|
624
|
+
# suite that runs in a separate CI stage) — already honored by
|
|
625
|
+
# ``structural_only_allowed()`` / the honesty rule. Forcing the contract
|
|
626
|
+
# executor on such a project would run a verify command the author declared
|
|
627
|
+
# absent (a spurious not-green) and add no anti-false-green value (the honesty
|
|
628
|
+
# rule is the gate whenever this opt-out is NOT set). So it is a pre-execution
|
|
629
|
+
# opt-out, like the explicit-command override: route to legacy (which, with no
|
|
630
|
+
# detected command, yields the structural-only result the author asked for).
|
|
631
|
+
if structural_only_allowed(settings):
|
|
632
|
+
return self._legacy_test_command(settings, reason="structural_only")
|
|
633
|
+
|
|
634
|
+
# (3) No declared language → legacy fallback (the common existing case).
|
|
635
|
+
if contract is None:
|
|
636
|
+
return self._legacy_test_command(settings, reason="no_language")
|
|
637
|
+
|
|
638
|
+
# (4) No verify command in the profile → legacy fallback.
|
|
639
|
+
plan = build_verify_plan(contract)
|
|
640
|
+
if plan is None:
|
|
641
|
+
return self._legacy_test_command(settings, reason="no_verify_plan")
|
|
642
|
+
|
|
643
|
+
# (5) Scoped runner_report-adapter gate (NOT full require_complete()). The
|
|
644
|
+
# executor reads the report via ``default_adapter_registry.get("runner_report",
|
|
645
|
+
# plan.report_adapter)`` — so we gate on exactly that capability, ensuring
|
|
646
|
+
# builtins are registered first. Only when the plan REQUIRES a report.
|
|
647
|
+
registry = (
|
|
648
|
+
self._adapter_registry
|
|
649
|
+
if self._adapter_registry is not None
|
|
650
|
+
else default_adapter_registry
|
|
651
|
+
)
|
|
652
|
+
if plan.report_required:
|
|
653
|
+
from codd.languages.builtin_adapters import (
|
|
654
|
+
ensure_builtin_adapters_registered,
|
|
655
|
+
)
|
|
656
|
+
|
|
657
|
+
ensure_builtin_adapters_registered(registry)
|
|
658
|
+
adapter = (
|
|
659
|
+
registry.get("runner_report", plan.report_adapter)
|
|
660
|
+
if plan.report_adapter is not None
|
|
661
|
+
else None
|
|
662
|
+
)
|
|
663
|
+
if adapter is None:
|
|
664
|
+
if contract.profile.strictness == "strict":
|
|
665
|
+
self._mark_contract_path()
|
|
666
|
+
return (
|
|
667
|
+
False,
|
|
668
|
+
plan.command_str,
|
|
669
|
+
"required runner_report adapter unavailable (strict)",
|
|
670
|
+
VerificationFailure(
|
|
671
|
+
check_name="test_command",
|
|
672
|
+
source="test_command",
|
|
673
|
+
message=(
|
|
674
|
+
f"strict language {contract.language_id!r} declares a "
|
|
675
|
+
f"required runner_report adapter "
|
|
676
|
+
f"{plan.report_adapter!r} that is not registered — the "
|
|
677
|
+
"executor cannot observe the report, so the run cannot "
|
|
678
|
+
"be classified green (fail-closed; RED, no fallback)."
|
|
679
|
+
),
|
|
680
|
+
details={
|
|
681
|
+
"failure_class": "missing_runner_report_adapter",
|
|
682
|
+
"report_adapter": plan.report_adapter,
|
|
683
|
+
"language": contract.language_id,
|
|
684
|
+
},
|
|
685
|
+
),
|
|
686
|
+
)
|
|
687
|
+
# legacy_compatible → pre-execution fallback (NOT a RED).
|
|
688
|
+
return self._legacy_test_command(
|
|
689
|
+
settings, reason="missing_adapter_legacy_compatible"
|
|
690
|
+
)
|
|
691
|
+
|
|
692
|
+
# (6) Run the contract executor. Its verdict is FINAL (no legacy rescue).
|
|
693
|
+
from codd.languages.verify_executor import execute_verify_plan
|
|
694
|
+
|
|
695
|
+
self._mark_contract_path()
|
|
696
|
+
result = execute_verify_plan(plan, self.project_root, adapter_registry=registry)
|
|
697
|
+
return self._tuple_from_execution(plan, result)
|
|
698
|
+
|
|
699
|
+
def _mark_contract_path(self) -> None:
|
|
700
|
+
"""Record that the live contract executor produced this run's test verdict."""
|
|
701
|
+
self._verify_path = "contract"
|
|
702
|
+
self._fallback_used = False
|
|
703
|
+
self._fallback_reason = None
|
|
492
704
|
|
|
493
|
-
|
|
494
|
-
:
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
705
|
+
def _legacy_test_command(
|
|
706
|
+
self, settings: dict[str, Any], *, reason: str
|
|
707
|
+
) -> tuple[bool, str | None, str, VerificationFailure | None]:
|
|
708
|
+
"""PRE-execution legacy fallback — the original detect+run test ladder.
|
|
709
|
+
|
|
710
|
+
Used ONLY before the contract executor runs (an explicit author command /
|
|
711
|
+
structural-only opt-out / no language / no verify plan / legacy_compatible
|
|
712
|
+
profile with a missing runner_report adapter). Records the fallback trace so
|
|
713
|
+
the v3.0.0 cut can gate on ``fallback_used == 0``. There is deliberately NO
|
|
714
|
+
post-execution variant: once the contract executor has run, its verdict is
|
|
715
|
+
final.
|
|
498
716
|
"""
|
|
717
|
+
self._verify_path = "legacy_fallback"
|
|
718
|
+
self._fallback_used = True
|
|
719
|
+
self._fallback_reason = reason
|
|
499
720
|
command = detect_test_command(self.project_root, config=settings)
|
|
500
721
|
if not command:
|
|
501
722
|
return False, None, "no test command detected", None
|
|
@@ -504,6 +725,46 @@ class VerifyRunner:
|
|
|
504
725
|
)
|
|
505
726
|
return executed, command, summary, failure
|
|
506
727
|
|
|
728
|
+
def _tuple_from_execution(
|
|
729
|
+
self, plan: "VerifyRunPlan", result: "VerifyExecutionResult"
|
|
730
|
+
) -> tuple[bool, str | None, str, VerificationFailure | None]:
|
|
731
|
+
"""Map a :class:`VerifyExecutionResult` to the ``_run_test_command`` 4-tuple.
|
|
732
|
+
|
|
733
|
+
The anti-false-green mapping — only ``PASS`` is green; every other class is
|
|
734
|
+
a failure, and ``TOOL_MISSING`` additionally did NOT execute:
|
|
735
|
+
|
|
736
|
+
* ``PASS`` → ``(True, cmd, detail, None)``.
|
|
737
|
+
* ``TOOL_MISSING``→ ``(False, cmd, detail, FAILURE)`` — never ran AND a
|
|
738
|
+
failure (so it can never count as green-on-nothing).
|
|
739
|
+
* any other not-green (FAIL / ZERO_TESTS / REPORT_MISSING /
|
|
740
|
+
REPORT_UNREADABLE / SCOPE_MISSING) → ``(True, cmd, detail, FAILURE)`` —
|
|
741
|
+
it executed; it is a failure.
|
|
742
|
+
"""
|
|
743
|
+
from codd.languages.verify_plan import VerifyClass
|
|
744
|
+
|
|
745
|
+
command = plan.command_str
|
|
746
|
+
if result.verify_class is VerifyClass.PASS:
|
|
747
|
+
return True, command, result.detail, None
|
|
748
|
+
|
|
749
|
+
failure = VerificationFailure(
|
|
750
|
+
check_name="test_command",
|
|
751
|
+
source="test_command",
|
|
752
|
+
message=result.detail,
|
|
753
|
+
details={
|
|
754
|
+
"command": command,
|
|
755
|
+
"verify_class": result.verify_class.value,
|
|
756
|
+
"verify_path": "contract",
|
|
757
|
+
"returncode": result.returncode,
|
|
758
|
+
"failure_class": "verify_contract_not_green",
|
|
759
|
+
},
|
|
760
|
+
)
|
|
761
|
+
if result.verify_class is VerifyClass.TOOL_MISSING:
|
|
762
|
+
# Did not run AND is a failure — never green.
|
|
763
|
+
return False, command, result.detail, failure
|
|
764
|
+
# FAIL / ZERO_TESTS / REPORT_MISSING / REPORT_UNREADABLE / SCOPE_MISSING:
|
|
765
|
+
# the command executed and the observation is not-green.
|
|
766
|
+
return True, command, result.detail, failure
|
|
767
|
+
|
|
507
768
|
def _run_evidence_command(
|
|
508
769
|
self,
|
|
509
770
|
command: str,
|
|
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
|