codd-dev 2.72.0__tar.gz → 2.74.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.72.0 → codd_dev-2.74.0}/PKG-INFO +1 -1
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/__init__.py +1 -1
- codd_dev-2.74.0/codd/languages/verify_executor.py +391 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/verify_plan.py +47 -2
- {codd_dev-2.72.0 → codd_dev-2.74.0}/pyproject.toml +1 -1
- {codd_dev-2.72.0 → codd_dev-2.74.0}/.gitignore +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/LICENSE +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/README.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/__main__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/assembler.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/bridge.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/cli.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/clustering.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/confidence.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/config.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/config_schema.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/contracts.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/contracts_registry/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/contracts_registry/__main__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/contracts_registry/certify.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/contracts_registry/generate_matrix.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/contracts_registry/registry.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/coverage_execution_coherence.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/defaults.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/defaults.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployer.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/design_md.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/discovery.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/drift.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/e2e_harness.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/env_refs.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/extractor.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fixer.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/generator.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/graph.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/greenfield/pipeline.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/implement_oracle.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/implement_oracle_scope.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/implementer.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/inheritance.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/adapters/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/adapters/runner_report.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/builtin_adapters.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/compat.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/contract.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/loader.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/path_planner.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/profile.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/profiles/go.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/profiles/python.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/profiles/typescript.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/languages/registry.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/measure.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/planner.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/policy.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/project_types.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/propagate.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/propagator.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/reference_resolution.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/registry.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/auto_scope_guard.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/history.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/require.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/restore.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/scanner.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/adapters/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/adapters/_base.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/adapters/nextjs.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/adapters/playwright.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/compose.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/loader.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/lock.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/obligations.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/profile.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/project.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/registry.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/stack/resolve.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/synth.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/test_detection.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/traceability.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/validator.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/vb_marker_authenticity.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/vb_rerun_scope.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/verifiable_behavior_audit.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/watch/events.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd/wiring.py +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/dogfood/README.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/examples/README.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.72.0 → codd_dev-2.74.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.74.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
|
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
"""Contract-driven verify EXECUTOR (Contract Kernel Step 4 — fixtures only).
|
|
2
|
+
|
|
3
|
+
Runs a :class:`~codd.languages.verify_plan.VerifyRunPlan`, captures + parses its
|
|
4
|
+
machine-readable report, and classifies the outcome into a
|
|
5
|
+
:class:`~codd.languages.verify_plan.VerifyClass`. This is the imperative half that
|
|
6
|
+
:mod:`codd.languages.verify_plan`'s pure classifier deliberately is NOT: it spawns
|
|
7
|
+
the process, persists/locates the report, runs the report adapter, and then maps
|
|
8
|
+
the observed signals to a class.
|
|
9
|
+
|
|
10
|
+
NOT WIRED IN. The live ``VerifyRunner`` still uses the legacy path; this executor
|
|
11
|
+
is exercised only by fixtures (``tests/languages/test_verify_executor.py``). The
|
|
12
|
+
switch is Step 6.
|
|
13
|
+
|
|
14
|
+
THE CARDINAL RULE (anti-false-green). A not-green signal ALWAYS beats an
|
|
15
|
+
exit-0 / clean-looking result. Every observation failure — a missing report, an
|
|
16
|
+
unreadable report, zero collected tests, a failed test, a SKIPPED test (a skip is
|
|
17
|
+
not an authentic pass), a missing report adapter, a timeout — is classified as a
|
|
18
|
+
not-green class BEFORE any PASS is considered. There is deliberately NO "allow"
|
|
19
|
+
path: nothing in this module lets a zero/missing/failed/skipped observation become
|
|
20
|
+
PASS. The observation policy fields
|
|
21
|
+
(:class:`~codd.languages.profile.VerifyObservationPolicy`) are the invariant; they
|
|
22
|
+
only ever raise the bar (``min_collected_tests``), never lower it.
|
|
23
|
+
|
|
24
|
+
Mapping of :class:`~codd.languages.adapters.runner_report.RunnerExecution` fields
|
|
25
|
+
to classes (the anti-false-green ordering, GPT §5):
|
|
26
|
+
|
|
27
|
+
* ``report_required`` and report file absent → ``REPORT_MISSING``.
|
|
28
|
+
* report present but ``adapter.parse(...)`` raises → ``REPORT_UNREADABLE``.
|
|
29
|
+
* ``execution.total_cases == 0`` AND ``execution.executed_files == ∅`` (no executed
|
|
30
|
+
file) → ``ZERO_TESTS``; also ``execution.total_cases < observation.min_collected_tests``
|
|
31
|
+
→ ``ZERO_TESTS`` (collected below the floor is "effectively no tests").
|
|
32
|
+
* ``execution.executed_failed_files`` non-empty (any failed test/file) → ``FAIL``.
|
|
33
|
+
* a SKIPPED test was observed (``observation.skipped_tests == "red"``) → ``FAIL``
|
|
34
|
+
(skip is not an authentic pass; see below for how a skip is detected).
|
|
35
|
+
* ``returncode != 0`` → ``FAIL`` (a nonzero exit beats a green-looking report).
|
|
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``.
|
|
42
|
+
|
|
43
|
+
How a SKIP is detected from :class:`RunnerExecution`. The adapters fold a skipped
|
|
44
|
+
case into the FILE-level signal: a file carrying ANY skipped (or failed) case is
|
|
45
|
+
put in ``executed_failed_files``, never ``executed_passed_files`` (see the vitest /
|
|
46
|
+
go-test adapters — "a skip proves nothing"). So a skipped test surfaces here as a
|
|
47
|
+
``executed_failed_files`` member, which the failed-test branch already reds. We
|
|
48
|
+
ALSO red the count-mismatch shape (``passed_cases < total_cases`` while no file is
|
|
49
|
+
marked failed) because a runner that reports cases but where passed < total has a
|
|
50
|
+
non-passed (failed/skipped) case the file rollup may not have attributed — a
|
|
51
|
+
defensive not-green so a partial report never sneaks to PASS.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
from __future__ import annotations
|
|
55
|
+
|
|
56
|
+
import os
|
|
57
|
+
import subprocess # noqa: S404 — argv is from the trusted language profile, shell=False
|
|
58
|
+
from dataclasses import dataclass
|
|
59
|
+
from pathlib import Path
|
|
60
|
+
|
|
61
|
+
from .builtin_adapters import ensure_builtin_adapters_registered
|
|
62
|
+
from .registry import AdapterRegistry, default_adapter_registry
|
|
63
|
+
from .verify_plan import VerifyClass, VerifyRunPlan
|
|
64
|
+
from .adapters.runner_report import RunnerExecution
|
|
65
|
+
|
|
66
|
+
#: Default wall-clock cap for a verify subprocess. A run that exceeds it is a FAIL
|
|
67
|
+
#: (a timeout is never green), never a hang that blocks the gate forever.
|
|
68
|
+
DEFAULT_VERIFY_TIMEOUT_SECONDS = 1800
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
@dataclass(frozen=True)
|
|
72
|
+
class VerifyExecutionResult:
|
|
73
|
+
"""Outcome of running a verify plan through the executor.
|
|
74
|
+
|
|
75
|
+
``verify_class`` is the anti-false-green verdict (only ``PASS`` is green).
|
|
76
|
+
``returncode`` is the subprocess exit code (``None`` if it never spawned / timed
|
|
77
|
+
out). ``execution`` is the parsed :class:`RunnerExecution` (``None`` when no
|
|
78
|
+
report was parsed — tool missing, report absent/unreadable, etc.). ``detail`` is
|
|
79
|
+
a short human reason, always populated for a not-green class.
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
verify_class: VerifyClass
|
|
83
|
+
returncode: int | None
|
|
84
|
+
execution: RunnerExecution | None
|
|
85
|
+
detail: str
|
|
86
|
+
|
|
87
|
+
@property
|
|
88
|
+
def is_green(self) -> bool:
|
|
89
|
+
return self.verify_class.is_green
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def execute_verify_plan(
|
|
93
|
+
plan: VerifyRunPlan,
|
|
94
|
+
project_root: Path,
|
|
95
|
+
*,
|
|
96
|
+
adapter_registry: AdapterRegistry | None = None,
|
|
97
|
+
timeout: float | None = None,
|
|
98
|
+
) -> VerifyExecutionResult:
|
|
99
|
+
"""Run ``plan`` under ``project_root`` and classify the outcome (anti-false-green).
|
|
100
|
+
|
|
101
|
+
Steps, in order:
|
|
102
|
+
|
|
103
|
+
a. cwd = ``project_root / plan.cwd`` (or ``project_root``); env = ``os.environ``
|
|
104
|
+
copy updated with ``plan.env``.
|
|
105
|
+
b. If ``plan.report_path`` is set, UNLINK any stale report file BEFORE running —
|
|
106
|
+
a leftover green report from a prior run must never be read as this run's
|
|
107
|
+
result (the canonical stale-report false-green).
|
|
108
|
+
c. ``subprocess.run(plan.argv, shell=False, …, capture_output=True, text=True,
|
|
109
|
+
timeout=…)``. ``FileNotFoundError`` / ``OSError`` (tool not found / spawn
|
|
110
|
+
failure) → ``TOOL_MISSING``; ``TimeoutExpired`` → ``FAIL`` (never green).
|
|
111
|
+
d. If ``plan.report_capture == "stdout"``, persist the captured stdout to the
|
|
112
|
+
report path (``mkdir`` parents) — ``go test -json`` writes no file itself.
|
|
113
|
+
e. Resolve the runner_report adapter via
|
|
114
|
+
:func:`ensure_builtin_adapters_registered` then ``registry.get(...)``. If the
|
|
115
|
+
plan requires a report but the adapter is unavailable, the executor cannot
|
|
116
|
+
observe → ``REPORT_UNREADABLE`` (fail-closed; never PASS).
|
|
117
|
+
f. Classify with not-green BEFORE any PASS (see module docstring / GPT §5).
|
|
118
|
+
"""
|
|
119
|
+
|
|
120
|
+
registry = adapter_registry if adapter_registry is not None else default_adapter_registry
|
|
121
|
+
run_timeout = timeout if timeout is not None else DEFAULT_VERIFY_TIMEOUT_SECONDS
|
|
122
|
+
|
|
123
|
+
# (a) Resolve cwd + env.
|
|
124
|
+
cwd = (project_root / plan.cwd) if plan.cwd else project_root
|
|
125
|
+
env = os.environ.copy()
|
|
126
|
+
env.update(plan.env)
|
|
127
|
+
|
|
128
|
+
# (b) Anti-false-green: unlink any STALE report before the run so a leftover
|
|
129
|
+
# green report can never be mistaken for this run's output.
|
|
130
|
+
report_path: Path | None = None
|
|
131
|
+
if plan.report_path:
|
|
132
|
+
report_path = (project_root / plan.report_path)
|
|
133
|
+
if not report_path.is_absolute():
|
|
134
|
+
report_path = report_path.resolve()
|
|
135
|
+
try:
|
|
136
|
+
report_path.unlink()
|
|
137
|
+
except FileNotFoundError:
|
|
138
|
+
pass
|
|
139
|
+
except OSError:
|
|
140
|
+
# An unremovable stale file is itself an observability hazard: we cannot
|
|
141
|
+
# guarantee what we read next is THIS run's report → fail-closed.
|
|
142
|
+
return VerifyExecutionResult(
|
|
143
|
+
verify_class=VerifyClass.REPORT_UNREADABLE,
|
|
144
|
+
returncode=None,
|
|
145
|
+
execution=None,
|
|
146
|
+
detail=f"could not remove stale report at {report_path} before run",
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
# (c) Run the command.
|
|
150
|
+
try:
|
|
151
|
+
completed = subprocess.run( # noqa: S603 — trusted argv, shell=False
|
|
152
|
+
list(plan.argv),
|
|
153
|
+
shell=False,
|
|
154
|
+
cwd=str(cwd),
|
|
155
|
+
env=env,
|
|
156
|
+
capture_output=True,
|
|
157
|
+
text=True,
|
|
158
|
+
timeout=run_timeout,
|
|
159
|
+
)
|
|
160
|
+
except (FileNotFoundError, OSError) as exc:
|
|
161
|
+
return VerifyExecutionResult(
|
|
162
|
+
verify_class=VerifyClass.TOOL_MISSING,
|
|
163
|
+
returncode=None,
|
|
164
|
+
execution=None,
|
|
165
|
+
detail=f"verify command could not spawn ({plan.command_str!r}): {exc}",
|
|
166
|
+
)
|
|
167
|
+
except subprocess.TimeoutExpired:
|
|
168
|
+
return VerifyExecutionResult(
|
|
169
|
+
verify_class=VerifyClass.FAIL,
|
|
170
|
+
returncode=None,
|
|
171
|
+
execution=None,
|
|
172
|
+
detail=f"verify command timed out after {run_timeout}s ({plan.command_str!r})",
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
returncode = completed.returncode
|
|
176
|
+
|
|
177
|
+
# (d) Persist captured stdout to the report path when the command streams its
|
|
178
|
+
# machine-readable report to stdout (e.g. `go test -json`).
|
|
179
|
+
if report_path is not None and (plan.report_capture or "").strip().lower() == "stdout":
|
|
180
|
+
try:
|
|
181
|
+
report_path.parent.mkdir(parents=True, exist_ok=True)
|
|
182
|
+
report_path.write_text(completed.stdout or "", encoding="utf-8")
|
|
183
|
+
except OSError as exc:
|
|
184
|
+
return VerifyExecutionResult(
|
|
185
|
+
verify_class=VerifyClass.REPORT_UNREADABLE,
|
|
186
|
+
returncode=returncode,
|
|
187
|
+
execution=None,
|
|
188
|
+
detail=f"could not persist captured stdout to {report_path}: {exc}",
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
# (e) Resolve the runner_report adapter (fail-closed when a required report has
|
|
192
|
+
# no adapter to read it — the executor cannot observe, so it must not PASS).
|
|
193
|
+
ensure_builtin_adapters_registered(registry)
|
|
194
|
+
adapter = None
|
|
195
|
+
if plan.report_adapter is not None:
|
|
196
|
+
adapter = registry.get("runner_report", plan.report_adapter)
|
|
197
|
+
if plan.report_required and adapter is None:
|
|
198
|
+
return VerifyExecutionResult(
|
|
199
|
+
verify_class=VerifyClass.REPORT_UNREADABLE,
|
|
200
|
+
returncode=returncode,
|
|
201
|
+
execution=None,
|
|
202
|
+
detail=(
|
|
203
|
+
f"required runner_report adapter "
|
|
204
|
+
f"{plan.report_adapter!r} is not registered — the executor cannot "
|
|
205
|
+
"observe the report, so the run cannot be classified green "
|
|
206
|
+
"(fail-closed; never PASS)"
|
|
207
|
+
),
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
# (f) Classify — not-green BEFORE any PASS (GPT §5 ordering).
|
|
211
|
+
return _classify(plan, returncode, report_path, adapter, project_root)
|
|
212
|
+
|
|
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
|
+
|
|
246
|
+
def _classify(
|
|
247
|
+
plan: VerifyRunPlan,
|
|
248
|
+
returncode: int,
|
|
249
|
+
report_path: Path | None,
|
|
250
|
+
adapter: object | None,
|
|
251
|
+
project_root: Path,
|
|
252
|
+
) -> VerifyExecutionResult:
|
|
253
|
+
"""Map observed signals to a class, not-green ordered before PASS (pure of I/O
|
|
254
|
+
spawning — it only reads the report and inspects ``returncode``)."""
|
|
255
|
+
|
|
256
|
+
# report_required and report file absent → REPORT_MISSING.
|
|
257
|
+
if plan.report_required:
|
|
258
|
+
if report_path is None or not report_path.exists():
|
|
259
|
+
return VerifyExecutionResult(
|
|
260
|
+
verify_class=VerifyClass.REPORT_MISSING,
|
|
261
|
+
returncode=returncode,
|
|
262
|
+
execution=None,
|
|
263
|
+
detail=(
|
|
264
|
+
f"required report not found at {report_path} after the verify run "
|
|
265
|
+
"(an absent report is a not-green observation, never an empty pass)"
|
|
266
|
+
),
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
execution: RunnerExecution | None = None
|
|
270
|
+
if plan.report_required and adapter is not None and report_path is not None:
|
|
271
|
+
# report present but adapter.parse(...) raises → REPORT_UNREADABLE.
|
|
272
|
+
try:
|
|
273
|
+
execution = adapter.parse(report_path, project_root=project_root) # type: ignore[attr-defined]
|
|
274
|
+
except Exception as exc: # noqa: BLE001 — ANY parse failure is unreadable, not a pass
|
|
275
|
+
return VerifyExecutionResult(
|
|
276
|
+
verify_class=VerifyClass.REPORT_UNREADABLE,
|
|
277
|
+
returncode=returncode,
|
|
278
|
+
execution=None,
|
|
279
|
+
detail=(
|
|
280
|
+
f"report at {report_path} present but unparseable by adapter "
|
|
281
|
+
f"{plan.report_adapter!r}: {exc}"
|
|
282
|
+
),
|
|
283
|
+
)
|
|
284
|
+
|
|
285
|
+
if execution is not None:
|
|
286
|
+
collected = execution.total_cases
|
|
287
|
+
executed_files = execution.executed_files
|
|
288
|
+
# zero tests: nothing collected AND no executed file → ZERO_TESTS.
|
|
289
|
+
if collected == 0 and not executed_files:
|
|
290
|
+
return VerifyExecutionResult(
|
|
291
|
+
verify_class=VerifyClass.ZERO_TESTS,
|
|
292
|
+
returncode=returncode,
|
|
293
|
+
execution=execution,
|
|
294
|
+
detail="report parsed but it observed zero tests (no cases, no executed files)",
|
|
295
|
+
)
|
|
296
|
+
# collected below the policy floor → ZERO_TESTS (effectively no tests). The
|
|
297
|
+
# policy may RAISE min_collected_tests (stricter), never lower it below 1.
|
|
298
|
+
if collected < plan.observation.min_collected_tests:
|
|
299
|
+
return VerifyExecutionResult(
|
|
300
|
+
verify_class=VerifyClass.ZERO_TESTS,
|
|
301
|
+
returncode=returncode,
|
|
302
|
+
execution=execution,
|
|
303
|
+
detail=(
|
|
304
|
+
f"collected {collected} test(s), below the required minimum "
|
|
305
|
+
f"{plan.observation.min_collected_tests} (an under-collected run is "
|
|
306
|
+
"not an authentic pass)"
|
|
307
|
+
),
|
|
308
|
+
)
|
|
309
|
+
# any failed test/file → FAIL. A SKIPPED case is folded by the adapters into
|
|
310
|
+
# executed_failed_files (a skip is not a clean pass), so this branch also
|
|
311
|
+
# reds a skip-tainted file (observation.skipped_tests == "red").
|
|
312
|
+
if execution.executed_failed_files:
|
|
313
|
+
return VerifyExecutionResult(
|
|
314
|
+
verify_class=VerifyClass.FAIL,
|
|
315
|
+
returncode=returncode,
|
|
316
|
+
execution=execution,
|
|
317
|
+
detail=(
|
|
318
|
+
f"report shows failed/skipped test file(s): "
|
|
319
|
+
f"{sorted(execution.executed_failed_files)} (a fail or a skip is "
|
|
320
|
+
"not an authentic pass)"
|
|
321
|
+
),
|
|
322
|
+
)
|
|
323
|
+
# Defensive: per-case granularity available but passed < total ⇒ a non-passed
|
|
324
|
+
# (failed/skipped) case exists that the file rollup did not attribute → red,
|
|
325
|
+
# so a partial report never reaches PASS.
|
|
326
|
+
if execution.test_level_available and execution.passed_cases < execution.total_cases:
|
|
327
|
+
return VerifyExecutionResult(
|
|
328
|
+
verify_class=VerifyClass.FAIL,
|
|
329
|
+
returncode=returncode,
|
|
330
|
+
execution=execution,
|
|
331
|
+
detail=(
|
|
332
|
+
f"report shows {execution.passed_cases} passed of "
|
|
333
|
+
f"{execution.total_cases} collected — a non-passed (failed/skipped) "
|
|
334
|
+
"case is present, which is not an authentic pass"
|
|
335
|
+
),
|
|
336
|
+
)
|
|
337
|
+
|
|
338
|
+
# returncode != 0 → FAIL (a nonzero exit beats a green-looking report).
|
|
339
|
+
if returncode != 0:
|
|
340
|
+
return VerifyExecutionResult(
|
|
341
|
+
verify_class=VerifyClass.FAIL,
|
|
342
|
+
returncode=returncode,
|
|
343
|
+
execution=execution,
|
|
344
|
+
detail=f"verify command exited {returncode} (nonzero exit beats a green-looking report)",
|
|
345
|
+
)
|
|
346
|
+
|
|
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
|
+
)
|
|
383
|
+
|
|
384
|
+
# All not-green checks passed: rc==0, required report parsed, collected ≥ floor,
|
|
385
|
+
# no failed/skipped, every required scope covered → the only green class.
|
|
386
|
+
return VerifyExecutionResult(
|
|
387
|
+
verify_class=VerifyClass.PASS,
|
|
388
|
+
returncode=returncode,
|
|
389
|
+
execution=execution,
|
|
390
|
+
detail="verify passed (exit 0, report parsed, collected ≥ minimum, no failed/skipped tests)",
|
|
391
|
+
)
|
|
@@ -29,12 +29,29 @@ from .profile import VerifyObservationPolicy
|
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
class VerifyClass(str, Enum):
|
|
32
|
-
"""Semantic class of a verify outcome (design §v2.69a).
|
|
32
|
+
"""Semantic class of a verify outcome (design §v2.69a / §5).
|
|
33
|
+
|
|
34
|
+
``REPORT_MISSING`` vs ``REPORT_UNREADABLE`` are deliberately distinct (GPT §5,
|
|
35
|
+
"MECE では missing と unreadable は別"): the report being ABSENT is a different
|
|
36
|
+
observability failure from the report being PRESENT but unparseable (a garbled
|
|
37
|
+
JSON/JSONL, or no adapter able to read it). Both are not-green — only ``PASS``
|
|
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).
|
|
47
|
+
"""
|
|
33
48
|
|
|
34
49
|
PASS = "PASS"
|
|
35
50
|
FAIL = "FAIL"
|
|
36
51
|
ZERO_TESTS = "ZERO_TESTS"
|
|
37
52
|
REPORT_MISSING = "REPORT_MISSING"
|
|
53
|
+
REPORT_UNREADABLE = "REPORT_UNREADABLE"
|
|
54
|
+
SCOPE_MISSING = "SCOPE_MISSING"
|
|
38
55
|
TOOL_MISSING = "TOOL_MISSING"
|
|
39
56
|
CONFIG_ERROR = "CONFIG_ERROR"
|
|
40
57
|
|
|
@@ -55,7 +72,19 @@ class VerifyRunPlan:
|
|
|
55
72
|
report_adapter: str | None
|
|
56
73
|
report_required: bool
|
|
57
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], ...]
|
|
58
81
|
observation: VerifyObservationPolicy
|
|
82
|
+
#: ``report.capture`` from the verify CommandSpec (e.g. Go's ``stdout``). When
|
|
83
|
+
#: ``"stdout"`` the verify command streams its machine-readable report to stdout
|
|
84
|
+
#: and the EXECUTOR must persist that captured stdout to ``report_path`` before
|
|
85
|
+
#: the adapter reads it (``go test -json`` writes no file of its own). ``None``
|
|
86
|
+
#: ⇒ the command produces the report file directly (no executor capture).
|
|
87
|
+
report_capture: str | None = None
|
|
59
88
|
|
|
60
89
|
@property
|
|
61
90
|
def command_str(self) -> str:
|
|
@@ -76,6 +105,20 @@ def build_verify_plan(contract: ResolvedLanguageContract) -> VerifyRunPlan | Non
|
|
|
76
105
|
return None
|
|
77
106
|
report = cmd.report
|
|
78
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
|
+
)
|
|
79
122
|
return VerifyRunPlan(
|
|
80
123
|
language_id=contract.language_id,
|
|
81
124
|
argv=tuple(cmd.argv),
|
|
@@ -84,7 +127,9 @@ def build_verify_plan(contract: ResolvedLanguageContract) -> VerifyRunPlan | Non
|
|
|
84
127
|
report_path=(report.path if report else None),
|
|
85
128
|
report_adapter=(report.adapter if report else None),
|
|
86
129
|
report_required=bool(report and report.path),
|
|
87
|
-
|
|
130
|
+
report_capture=(report.capture if report else None),
|
|
131
|
+
must_include_test_sets=must_include,
|
|
132
|
+
required_test_sets=required_test_sets,
|
|
88
133
|
# None on the command ⇒ the strict defaults (the invariant), never weaker.
|
|
89
134
|
observation=(cmd.observation or VerifyObservationPolicy()),
|
|
90
135
|
)
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|