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