codd-dev 2.70.0__tar.gz → 2.71.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.70.0 → codd_dev-2.71.0}/PKG-INFO +1 -1
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/__init__.py +1 -1
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/coverage_execution_coherence.py +26 -500
- codd_dev-2.71.0/codd/languages/adapters/__init__.py +14 -0
- codd_dev-2.71.0/codd/languages/adapters/runner_report.py +533 -0
- codd_dev-2.71.0/codd/languages/builtin_adapters.py +87 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/languages/contract.py +16 -1
- {codd_dev-2.70.0 → codd_dev-2.71.0}/pyproject.toml +1 -1
- {codd_dev-2.70.0 → codd_dev-2.71.0}/.gitignore +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/LICENSE +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/README.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/__main__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/assembler.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/bridge.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/cli.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/clustering.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/confidence.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/config.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/config_schema.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/contracts.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/contracts_registry/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/contracts_registry/__main__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/contracts_registry/certify.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/contracts_registry/generate_matrix.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/contracts_registry/registry.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/defaults.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/defaults.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployer.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/design_md.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/discovery.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/drift.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/e2e_harness.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/env_refs.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/extractor.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fixer.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/generator.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/graph.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/greenfield/pipeline.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/implement_oracle.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/implement_oracle_scope.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/implementer.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/inheritance.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/languages/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/languages/compat.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/languages/loader.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/languages/path_planner.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/languages/profile.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/languages/profiles/go.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/languages/profiles/python.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/languages/profiles/typescript.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/languages/registry.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/languages/verify_plan.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/lexicon.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/measure.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/planner.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/policy.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/project_types.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/propagate.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/propagator.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/reference_resolution.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/registry.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/auto_scope_guard.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/history.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/require.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/restore.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/scanner.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/stack/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/stack/adapters/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/stack/adapters/_base.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/stack/adapters/nextjs.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/stack/adapters/playwright.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/stack/compose.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/stack/loader.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/stack/lock.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/stack/obligations.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/stack/profile.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/stack/project.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/stack/registry.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/stack/resolve.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/synth.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/test_detection.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/traceability.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/validator.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/vb_marker_authenticity.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/vb_rerun_scope.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/verifiable_behavior_audit.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/watch/events.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd/wiring.py +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/dogfood/README.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/examples/README.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.70.0 → codd_dev-2.71.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.71.0
|
|
4
4
|
Summary: CoDD: Coherence-Driven Development — cross-artifact change impact analysis
|
|
5
5
|
Project-URL: Homepage, https://github.com/yohey-w/codd-dev
|
|
6
6
|
Project-URL: Repository, https://github.com/yohey-w/codd-dev
|
|
@@ -61,11 +61,10 @@ backstop, UNCHANGED.
|
|
|
61
61
|
|
|
62
62
|
from __future__ import annotations
|
|
63
63
|
|
|
64
|
-
import json
|
|
65
64
|
import subprocess
|
|
66
65
|
from dataclasses import dataclass, field
|
|
67
66
|
from pathlib import Path
|
|
68
|
-
from typing import Any, Callable, Iterable
|
|
67
|
+
from typing import Any, Callable, Iterable
|
|
69
68
|
|
|
70
69
|
from codd.operational_e2e_audit import (
|
|
71
70
|
_classify_test_level,
|
|
@@ -83,6 +82,26 @@ from codd.vb_marker_authenticity import (
|
|
|
83
82
|
build_authenticity_report,
|
|
84
83
|
)
|
|
85
84
|
|
|
85
|
+
# The runner-report parser cluster (RunnerExecution / Protocol / the vitest & Go
|
|
86
|
+
# adapters + their module-level helpers) was RELOCATED to the leaf module
|
|
87
|
+
# :mod:`codd.languages.adapters.runner_report` for the Contract Kernel so the
|
|
88
|
+
# coverage-execution coherence gate AND the language contract resolve ONE source
|
|
89
|
+
# of these adapters. They are RE-EXPORTED here (same objects — identity preserved)
|
|
90
|
+
# so ``from codd.coverage_execution_coherence import RunnerExecution`` and the
|
|
91
|
+
# ``_RUNNER_REPORT_ADAPTERS`` map below keep working unchanged. ``_norm_test_path``
|
|
92
|
+
# moved with them (the moved Go index needs it) and is re-imported here because the
|
|
93
|
+
# inventory/gate code below still uses it. (runner_report imports only stdlib +
|
|
94
|
+
# operational_e2e_audit + vb_marker_authenticity — none import codd.languages —
|
|
95
|
+
# so this import introduces NO cycle.)
|
|
96
|
+
from codd.languages.adapters.runner_report import ( # noqa: E402 — leaf re-export
|
|
97
|
+
GoTestJsonReportAdapter,
|
|
98
|
+
RunnerExecution,
|
|
99
|
+
RunnerReportAdapter,
|
|
100
|
+
RunnerReportUnsupported,
|
|
101
|
+
VitestJsonReportAdapter,
|
|
102
|
+
_norm_test_path,
|
|
103
|
+
)
|
|
104
|
+
|
|
86
105
|
|
|
87
106
|
COHERENCE_CONTRACT_VERSION = "coverage-execution-coherence/v1"
|
|
88
107
|
|
|
@@ -92,504 +111,11 @@ COHERENCE_CONTRACT_VERSION = "coverage-execution-coherence/v1"
|
|
|
92
111
|
# ───────────────────────────────────────────────────────────────────────────
|
|
93
112
|
|
|
94
113
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
class RunnerExecution:
|
|
101
|
-
"""Normalized execution evidence parsed from a verify-campaign report.
|
|
102
|
-
|
|
103
|
-
``executed_passed_files`` / ``executed_failed_files`` are project-relative,
|
|
104
|
-
POSIX, normalized test-file paths. A file is in ``executed_passed_files`` only
|
|
105
|
-
when it ran AND every executed test case in it passed (no failure/error) AND
|
|
106
|
-
it collected at least one case — the file-level pass that the coherence gate
|
|
107
|
-
treats as a VB's execution proof. ``executed_passed_cases`` is the set of
|
|
108
|
-
``"<relfile>::<fully-qualified-test-name>"`` keys for passed cases (when the
|
|
109
|
-
runner reports test-level granularity), available for finer reconciliation;
|
|
110
|
-
it is best-effort and may be empty for a file-level-only runner.
|
|
111
|
-
|
|
112
|
-
``test_level_available`` is True when the report carried per-test-case results
|
|
113
|
-
(vitest JSON does); when False, only file-level reconciliation is possible and
|
|
114
|
-
the gate applies the design's degraded-pass rule (file in runner + no static
|
|
115
|
-
skip/todo). ``total_cases`` / ``passed_cases`` are summary counts for
|
|
116
|
-
diagnostics.
|
|
117
|
-
"""
|
|
118
|
-
|
|
119
|
-
executed_passed_files: frozenset[str] = frozenset()
|
|
120
|
-
executed_failed_files: frozenset[str] = frozenset()
|
|
121
|
-
executed_passed_cases: frozenset[str] = frozenset()
|
|
122
|
-
test_level_available: bool = False
|
|
123
|
-
total_cases: int = 0
|
|
124
|
-
passed_cases: int = 0
|
|
125
|
-
|
|
126
|
-
@property
|
|
127
|
-
def executed_files(self) -> frozenset[str]:
|
|
128
|
-
return self.executed_passed_files | self.executed_failed_files
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
class RunnerReportAdapter(Protocol):
|
|
132
|
-
"""Per-profile parser of a verify-campaign report → :class:`RunnerExecution`.
|
|
133
|
-
|
|
134
|
-
Implementations are PURE and best-effort on shape, but MUST raise on a report
|
|
135
|
-
that is structurally unreadable (missing/garbled) so the gate degrades
|
|
136
|
-
EXPLICITLY rather than silently treating "no parseable executions" as "nothing
|
|
137
|
-
needed to run". ``report_path`` is the resolved campaign report file;
|
|
138
|
-
``project_root`` lets the adapter normalize absolute runner paths to project-
|
|
139
|
-
relative POSIX (the form :class:`TestInventory` and the VB audit use).
|
|
140
|
-
"""
|
|
141
|
-
|
|
142
|
-
def parse(self, report_path: Path, *, project_root: Path) -> RunnerExecution:
|
|
143
|
-
"""Parse the report at ``report_path`` into normalized execution evidence."""
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
def _relativize(raw: str, project_root: Path) -> str | None:
|
|
147
|
-
"""Normalize a runner-emitted path to project-relative POSIX, or ``None``.
|
|
148
|
-
|
|
149
|
-
Runners report absolute file paths (vitest: ``testResults[].name``). We make
|
|
150
|
-
them project-relative + POSIX so they reconcile with the VB audit's
|
|
151
|
-
``matched_tests`` / :class:`TestInventory` keys. A path outside the project
|
|
152
|
-
tree (a stray absolute path) returns ``None`` (it is not one of our tests).
|
|
153
|
-
"""
|
|
154
|
-
|
|
155
|
-
if not raw:
|
|
156
|
-
return None
|
|
157
|
-
text = str(raw).strip()
|
|
158
|
-
if not text:
|
|
159
|
-
return None
|
|
160
|
-
path = Path(text)
|
|
161
|
-
try:
|
|
162
|
-
if path.is_absolute():
|
|
163
|
-
return path.resolve().relative_to(project_root).as_posix()
|
|
164
|
-
except ValueError:
|
|
165
|
-
return None
|
|
166
|
-
# Already relative (or a bare name) — normalize separators only.
|
|
167
|
-
return text.replace("\\", "/").lstrip("./") or None
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
@dataclass(frozen=True)
|
|
171
|
-
class VitestJsonReportAdapter:
|
|
172
|
-
"""vitest (and Jest-compatible) JSON reporter adapter.
|
|
173
|
-
|
|
174
|
-
The vitest ``--reporter=json`` output is a top-level object with
|
|
175
|
-
``testResults: [{name, status, assertionResults: [{status, fullName, ...}]}]``
|
|
176
|
-
(``name`` is the absolute test FILE; ``assertionResults`` are its test CASES,
|
|
177
|
-
each ``status`` one of ``passed`` / ``failed`` / ``skipped`` / ``todo`` /
|
|
178
|
-
``pending``). A file is PASSED only when it ran ≥1 case and NONE failed/errored
|
|
179
|
-
— a file with a failing OR a skipped/todo case is NOT a clean execution proof
|
|
180
|
-
for a VB (a skipped case proves nothing; the static authenticity gate also
|
|
181
|
-
rejects skip, so they agree). Jest's near-identical schema parses through the
|
|
182
|
-
same path.
|
|
183
|
-
"""
|
|
184
|
-
|
|
185
|
-
def parse(self, report_path: Path, *, project_root: Path) -> RunnerExecution:
|
|
186
|
-
try:
|
|
187
|
-
payload = json.loads(report_path.read_text(encoding="utf-8"))
|
|
188
|
-
except (OSError, json.JSONDecodeError) as exc:
|
|
189
|
-
raise RunnerReportUnsupported(
|
|
190
|
-
f"vitest JSON report unreadable at {report_path}: {exc}"
|
|
191
|
-
) from exc
|
|
192
|
-
if not isinstance(payload, dict):
|
|
193
|
-
raise RunnerReportUnsupported(
|
|
194
|
-
f"vitest JSON report at {report_path} is not an object"
|
|
195
|
-
)
|
|
196
|
-
file_results = payload.get("testResults")
|
|
197
|
-
if not isinstance(file_results, list):
|
|
198
|
-
raise RunnerReportUnsupported(
|
|
199
|
-
f"vitest JSON report at {report_path} has no testResults array"
|
|
200
|
-
)
|
|
201
|
-
|
|
202
|
-
passed_files: set[str] = set()
|
|
203
|
-
failed_files: set[str] = set()
|
|
204
|
-
passed_cases: set[str] = set()
|
|
205
|
-
total_cases = 0
|
|
206
|
-
passed_count = 0
|
|
207
|
-
for file_entry in file_results:
|
|
208
|
-
if not isinstance(file_entry, dict):
|
|
209
|
-
continue
|
|
210
|
-
rel = _relativize(str(file_entry.get("name") or ""), project_root)
|
|
211
|
-
if rel is None:
|
|
212
|
-
continue
|
|
213
|
-
cases = file_entry.get("assertionResults")
|
|
214
|
-
cases = cases if isinstance(cases, list) else []
|
|
215
|
-
any_case = False
|
|
216
|
-
file_clean = True
|
|
217
|
-
for case in cases:
|
|
218
|
-
if not isinstance(case, dict):
|
|
219
|
-
continue
|
|
220
|
-
status = str(case.get("status") or "").strip().lower()
|
|
221
|
-
if not status:
|
|
222
|
-
continue
|
|
223
|
-
any_case = True
|
|
224
|
-
total_cases += 1
|
|
225
|
-
if status == "passed":
|
|
226
|
-
passed_count += 1
|
|
227
|
-
name = str(case.get("fullName") or case.get("title") or "").strip()
|
|
228
|
-
if name:
|
|
229
|
-
passed_cases.add(f"{rel}::{name}")
|
|
230
|
-
else:
|
|
231
|
-
# failed / skipped / todo / pending — none is a clean pass; a
|
|
232
|
-
# file carrying any of them is not a VB execution proof.
|
|
233
|
-
file_clean = False
|
|
234
|
-
# Fall back to the file-level status when a runner omits case detail.
|
|
235
|
-
file_status = str(file_entry.get("status") or "").strip().lower()
|
|
236
|
-
if not any_case:
|
|
237
|
-
if file_status == "passed":
|
|
238
|
-
passed_files.add(rel)
|
|
239
|
-
elif file_status in ("failed", "error"):
|
|
240
|
-
failed_files.add(rel)
|
|
241
|
-
# an empty file with no status is neither (collected nothing)
|
|
242
|
-
continue
|
|
243
|
-
if file_clean and file_status not in ("failed", "error"):
|
|
244
|
-
passed_files.add(rel)
|
|
245
|
-
else:
|
|
246
|
-
failed_files.add(rel)
|
|
247
|
-
return RunnerExecution(
|
|
248
|
-
executed_passed_files=frozenset(passed_files),
|
|
249
|
-
executed_failed_files=frozenset(failed_files),
|
|
250
|
-
executed_passed_cases=frozenset(passed_cases),
|
|
251
|
-
test_level_available=total_cases > 0,
|
|
252
|
-
total_cases=total_cases,
|
|
253
|
-
passed_cases=passed_count,
|
|
254
|
-
)
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
@dataclass(frozen=True)
|
|
258
|
-
class GoTestJsonReportAdapter:
|
|
259
|
-
"""``go test -json`` (line-delimited JSON) reporter adapter.
|
|
260
|
-
|
|
261
|
-
``go test -json ./...`` streams one JSON object per line, each a *test event*::
|
|
262
|
-
|
|
263
|
-
{"Action":"run|pass|fail|skip|output|...","Package":"<import/path>",
|
|
264
|
-
"Test":"TestXxx","Elapsed":..}
|
|
265
|
-
|
|
266
|
-
A test's FINAL outcome is the LAST ``pass``/``fail``/``skip`` ``Action`` for its
|
|
267
|
-
``(Package, Test)`` key (Go emits ``run`` then ``output``\\* then exactly one
|
|
268
|
-
terminal action). Subtests are ``Test":"TestX/sub"``. A line WITHOUT a ``Test``
|
|
269
|
-
field is a PACKAGE-level event; a package-level ``fail`` with no test is a build/
|
|
270
|
-
compile/setup failure — an HONEST fail for that whole package, never a silent
|
|
271
|
-
pass (Go emits ``{"Action":"build-fail",..}`` + ``{"Action":"fail","Package":..}``
|
|
272
|
-
with no ``Test`` when a ``*_test.go`` does not compile). Non-JSON lines (rare —
|
|
273
|
-
raw build-error text) are TOLERATED (skip-parse), but a package that compiled
|
|
274
|
-
yet emitted ZERO test events when test files exist is NOT a silent pass (the
|
|
275
|
-
upstream empty-report ``CampaignError`` covers a wholly-empty report; per-package
|
|
276
|
-
"expected tests but ran none" surfaces as those files staying ``not_executed`` in
|
|
277
|
-
the inventory ⇒ any VB they cover is execution-unverified).
|
|
278
|
-
|
|
279
|
-
THE FILE BRIDGE (anti-false-green core). ``go test -json`` reports
|
|
280
|
-
``(Package, Test)`` — NOT a file path — while the coherence gate reconciles at
|
|
281
|
-
FILE granularity (a VB's ``matched_tests`` are the ``_test.go`` FILES its marker
|
|
282
|
-
sits in). A Go *package* is a *directory* (one package per directory; every
|
|
283
|
-
``*_test.go`` in it is the same compiled test binary), so we map
|
|
284
|
-
``Package``→``dir`` by stripping the go.mod ``module`` path prefix, then attribute
|
|
285
|
-
each ``(Package, TestFunc)`` to the ``_test.go`` FILE in that dir that statically
|
|
286
|
-
declares ``func TestFunc`` — a join that is UNAMBIGUOUS because Go forbids two
|
|
287
|
-
top-level ``func TestFunc`` with the same name in one package (a compile error).
|
|
288
|
-
:meth:`normalize_runner_identity` is the pure key used for that join and matches
|
|
289
|
-
:class:`~codd.vb_marker_authenticity.GoTestBlockProfile`'s static block label
|
|
290
|
-
(the leading ``TestFunc`` before any ``/subtest``).
|
|
291
|
-
|
|
292
|
-
SKIP/FAIL granularity (mirrors vitest's "any non-pass case taints the FILE"):
|
|
293
|
-
a ``_test.go`` is in ``executed_passed_files`` only when it had ≥1 passed test
|
|
294
|
-
AND no failed/SKIPPED test attributed to it; ANY failed OR skipped test (a skip
|
|
295
|
-
proves nothing — the same rule the vitest adapter and the static authenticity
|
|
296
|
-
gate apply) puts the file in ``executed_failed_files``. A package-level build/
|
|
297
|
-
setup fail taints EVERY ``_test.go`` in its directory (none could have run).
|
|
298
|
-
``executed_passed_cases`` carries the per-test ``"<relfile>::TestFunc"`` keys
|
|
299
|
-
for the passed tests (finer reconciliation; best-effort, parallel to vitest's
|
|
300
|
-
``fullName`` cases).
|
|
301
|
-
"""
|
|
302
|
-
|
|
303
|
-
def parse(self, report_path: Path, *, project_root: Path) -> RunnerExecution:
|
|
304
|
-
try:
|
|
305
|
-
raw = report_path.read_text(encoding="utf-8")
|
|
306
|
-
except OSError as exc:
|
|
307
|
-
raise RunnerReportUnsupported(
|
|
308
|
-
f"go test -json report unreadable at {report_path}: {exc}"
|
|
309
|
-
) from exc
|
|
310
|
-
events = _parse_go_test_json_lines(raw)
|
|
311
|
-
if events is None:
|
|
312
|
-
raise RunnerReportUnsupported(
|
|
313
|
-
f"go test -json report at {report_path} contained no parseable JSON "
|
|
314
|
-
"event lines (a wholly non-JSON report is unreadable, not an empty pass)"
|
|
315
|
-
)
|
|
316
|
-
|
|
317
|
-
module_path = _read_go_module_path(project_root)
|
|
318
|
-
# Static index: dir → {TestFunc → relfile} for every *_test.go in the tree.
|
|
319
|
-
# Built once; the join that turns (Package, TestFunc) into the FILE the gate
|
|
320
|
-
# keys on. Lazily limited to dirs the runner actually reports below.
|
|
321
|
-
dir_func_index = _go_static_test_func_index(project_root)
|
|
322
|
-
|
|
323
|
-
# Aggregation at TWO granularities (GPT-5.5 design, dogfood go-test-json):
|
|
324
|
-
# * PER-CASE (the VB-verification authority): every PASSED top-level TestFunc
|
|
325
|
-
# contributes ``"<relfile>::TestFunc"`` to ``executed_passed_cases`` —
|
|
326
|
-
# INDEPENDENT of any sibling's outcome. This is what lets a passed ``TestA``
|
|
327
|
-
# prove its VB even when an unrelated ``TestB`` in the SAME file skipped
|
|
328
|
-
# (file-level taint would false-RED ``TestA`` — Go puts many independent
|
|
329
|
-
# ``func TestXxx`` in one file). A skip is NOT a pass, so a skipped func's
|
|
330
|
-
# key never appears ⇒ its VB is correctly unverified.
|
|
331
|
-
# * PER-FILE (coarse signals only — inventory, clean-execution, observability):
|
|
332
|
-
# a file is in ``executed_passed_files`` iff it had ≥1 pass AND no
|
|
333
|
-
# fail/skip/build-fail attributed to it; ANY fail/skip taints it. These
|
|
334
|
-
# NEVER gate a Go VB (the per-case keys do) — they keep the file-level
|
|
335
|
-
# clean-execution gate honest (a skip anywhere still reds the whole run).
|
|
336
|
-
file_passed_funcs: dict[str, set[str]] = {}
|
|
337
|
-
file_tainted: set[str] = set() # any fail/skip/build-fail ⇒ not a clean file
|
|
338
|
-
passed_case_keys: set[str] = set()
|
|
339
|
-
build_failed_dirs: set[str] = set()
|
|
340
|
-
total_cases = 0
|
|
341
|
-
passed_count = 0
|
|
342
|
-
|
|
343
|
-
for ev in events:
|
|
344
|
-
action = ev.get("Action")
|
|
345
|
-
pkg = ev.get("Package")
|
|
346
|
-
test = ev.get("Test")
|
|
347
|
-
rel_dir = _go_package_to_dir(pkg, module_path) if pkg else None
|
|
348
|
-
|
|
349
|
-
if action == "build-fail":
|
|
350
|
-
# A ``build-fail`` carries ``ImportPath`` (not ``Package``/``Test``);
|
|
351
|
-
# recover the dir from it so a non-compiling package taints its dir.
|
|
352
|
-
# Checked FIRST: it has no ``Test`` so it must not fall into the
|
|
353
|
-
# package-level branch below (which only inspects ``fail``).
|
|
354
|
-
bdir = _go_package_to_dir(_go_import_path_base(ev.get("ImportPath")), module_path)
|
|
355
|
-
if bdir is not None:
|
|
356
|
-
build_failed_dirs.add(bdir)
|
|
357
|
-
continue
|
|
358
|
-
if not test:
|
|
359
|
-
# Package-level (no ``Test``) terminal event. A ``fail`` here is EITHER
|
|
360
|
-
# a build/compile/setup failure OR merely the summary of individual test
|
|
361
|
-
# failures. Only the BUILD/SETUP variety taints the whole dir (nothing
|
|
362
|
-
# ran); a summary of per-test failures is already handled by the
|
|
363
|
-
# individual ``fail`` events (GPT edge ruling #1).
|
|
364
|
-
if action == "fail" and rel_dir is not None:
|
|
365
|
-
failed_build = ev.get("FailedBuild")
|
|
366
|
-
output = str(ev.get("Output") or "")
|
|
367
|
-
if failed_build or "[build failed]" in output or "[setup failed]" in output:
|
|
368
|
-
build_failed_dirs.add(rel_dir)
|
|
369
|
-
continue
|
|
370
|
-
if action not in ("pass", "fail", "skip"):
|
|
371
|
-
continue # run/output/etc. are not terminal outcomes
|
|
372
|
-
if rel_dir is None:
|
|
373
|
-
continue # external/std package (not under our module) — ignore
|
|
374
|
-
func = _go_test_func_root(test) # "TestX/sub" → "TestX"
|
|
375
|
-
relfile = dir_func_index.get(rel_dir, {}).get(func)
|
|
376
|
-
total_cases += 1
|
|
377
|
-
# ``relfile is None`` here = an in-tree package whose TestFunc maps to NO
|
|
378
|
-
# static _test.go (a parser miss / generated-or-conditional source). It is
|
|
379
|
-
# NOT credited (fail-closed: it adds to no passed-case key, so it can prove
|
|
380
|
-
# no VB) — but it is NOT hard-failed either, because the static parser's
|
|
381
|
-
# incompleteness must never false-RED a legitimately-running test (the same
|
|
382
|
-
# generality discipline the authenticity gate applies to unparseable user
|
|
383
|
-
# files; see ``feedback_codd_generality_preservation``). It still counts in
|
|
384
|
-
# ``total_cases`` so the report is not deemed empty.
|
|
385
|
-
if action == "pass":
|
|
386
|
-
passed_count += 1
|
|
387
|
-
if relfile is not None:
|
|
388
|
-
file_passed_funcs.setdefault(relfile, set()).add(func)
|
|
389
|
-
passed_case_keys.add(f"{relfile}::{func}")
|
|
390
|
-
else:
|
|
391
|
-
# fail OR skip — a skip proves nothing (vitest/authenticity parity), a
|
|
392
|
-
# fail is honest. Either taints the FILE (the coarse clean-execution
|
|
393
|
-
# signal; the per-case keys above are the VB-verification authority).
|
|
394
|
-
if relfile is not None:
|
|
395
|
-
file_tainted.add(relfile)
|
|
396
|
-
|
|
397
|
-
# Build/setup-failed dirs taint EVERY static _test.go in them (nothing ran).
|
|
398
|
-
for rel_dir in build_failed_dirs:
|
|
399
|
-
for relfile in dir_func_index.get(rel_dir, {}).values():
|
|
400
|
-
file_tainted.add(relfile)
|
|
401
|
-
|
|
402
|
-
passed_files: set[str] = set()
|
|
403
|
-
failed_files: set[str] = set()
|
|
404
|
-
for relfile, funcs in file_passed_funcs.items():
|
|
405
|
-
if relfile in file_tainted:
|
|
406
|
-
failed_files.add(relfile)
|
|
407
|
-
else:
|
|
408
|
-
passed_files.add(relfile)
|
|
409
|
-
failed_files |= file_tainted # tainted files are failed even with no pass
|
|
410
|
-
|
|
411
|
-
return RunnerExecution(
|
|
412
|
-
executed_passed_files=frozenset(passed_files),
|
|
413
|
-
executed_failed_files=frozenset(failed_files),
|
|
414
|
-
executed_passed_cases=frozenset(passed_case_keys),
|
|
415
|
-
test_level_available=total_cases > 0,
|
|
416
|
-
total_cases=total_cases,
|
|
417
|
-
passed_cases=passed_count,
|
|
418
|
-
)
|
|
419
|
-
|
|
420
|
-
@staticmethod
|
|
421
|
-
def produces_test_case_identity() -> bool:
|
|
422
|
-
"""True: this adapter emits per-test-case identities the gate can reconcile.
|
|
423
|
-
|
|
424
|
-
``go test -json`` reports ``(Package, Test)`` per test, and the static
|
|
425
|
-
:class:`~codd.vb_marker_authenticity.GoTestBlockProfile` labels each block
|
|
426
|
-
with its ``TestFunc`` name — so a VB marker can be mapped to the SAME
|
|
427
|
-
``"<relfile>::TestFunc"`` runner-case key and reconciled at TEST granularity
|
|
428
|
-
(not file). The coherence gate keys off this capability to use per-case
|
|
429
|
-
reconciliation for Go while leaving file-level runners (vitest/pytest, which
|
|
430
|
-
do NOT define this method ⇒ treated as False) on the file branch unchanged.
|
|
431
|
-
"""
|
|
432
|
-
return True
|
|
433
|
-
|
|
434
|
-
@staticmethod
|
|
435
|
-
def normalize_runner_identity(package: str, test: str, *, module_path: str | None = None) -> str:
|
|
436
|
-
"""Pure identity key for a runner ``(Package, Test)`` → the static join key.
|
|
437
|
-
|
|
438
|
-
Returns ``"<reldir>::<TestFunc>"`` where ``<reldir>`` is the package's repo-
|
|
439
|
-
root-relative directory (the go.mod ``module`` prefix stripped) and
|
|
440
|
-
``<TestFunc>`` is the top-level function name (a ``TestX/sub`` subtest folds
|
|
441
|
-
to ``TestX``) — the SAME pairing key
|
|
442
|
-
:class:`~codd.vb_marker_authenticity.GoTestBlockProfile` produces from a
|
|
443
|
-
``func TestFunc`` block label, so the gate can pair a runner case with the
|
|
444
|
-
static test block that carries the VB marker. ``module_path`` (the go.mod
|
|
445
|
-
``module`` line) lets the dir be made relative; when absent the package path
|
|
446
|
-
is used as the dir (still a stable, self-consistent key for pairing two
|
|
447
|
-
identities computed the same way).
|
|
448
|
-
"""
|
|
449
|
-
|
|
450
|
-
rel_dir = _go_package_to_dir(package, module_path)
|
|
451
|
-
if rel_dir is None:
|
|
452
|
-
rel_dir = str(package or "").strip().replace("\\", "/")
|
|
453
|
-
return f"{rel_dir}::{_go_test_func_root(test)}"
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
def _parse_go_test_json_lines(raw: str) -> list[dict[str, Any]] | None:
|
|
457
|
-
"""Parse a ``go test -json`` stream into its JSON event objects (tolerant).
|
|
458
|
-
|
|
459
|
-
Each line is one JSON object; NON-JSON lines (raw build-error text Go prints
|
|
460
|
-
before the JSON stream, or a stray banner) are SKIPPED rather than fatal — a
|
|
461
|
-
build failure still surfaces through the structured ``build-fail`` / package
|
|
462
|
-
``fail`` events. Returns ``None`` ONLY when the report has NO parseable JSON
|
|
463
|
-
object at all (a wholly unreadable report is an observability error, not an
|
|
464
|
-
empty pass); an empty/whitespace report also yields ``None``.
|
|
465
|
-
"""
|
|
466
|
-
|
|
467
|
-
events: list[dict[str, Any]] = []
|
|
468
|
-
saw_any_line = False
|
|
469
|
-
for line in raw.splitlines():
|
|
470
|
-
stripped = line.strip()
|
|
471
|
-
if not stripped:
|
|
472
|
-
continue
|
|
473
|
-
saw_any_line = True
|
|
474
|
-
try:
|
|
475
|
-
obj = json.loads(stripped)
|
|
476
|
-
except json.JSONDecodeError:
|
|
477
|
-
continue # non-JSON line (build noise) — tolerate
|
|
478
|
-
if isinstance(obj, dict):
|
|
479
|
-
events.append(obj)
|
|
480
|
-
if not saw_any_line:
|
|
481
|
-
return None
|
|
482
|
-
if not events:
|
|
483
|
-
return None
|
|
484
|
-
return events
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
def _read_go_module_path(project_root: Path) -> str | None:
|
|
488
|
-
"""The ``module`` path declared on go.mod's ``module`` line, or ``None``.
|
|
489
|
-
|
|
490
|
-
go.mod's first meaningful directive is ``module <import/path>``. We read it so a
|
|
491
|
-
runner ``Package`` import-path can be made repo-root-relative. Missing/unreadable
|
|
492
|
-
go.mod ⇒ ``None`` (the package→dir mapper then fails-open: it cannot relativize,
|
|
493
|
-
so it treats the package as external and the file attribution simply finds no
|
|
494
|
-
match — fail-CLOSED toward "not executed", never a false pass).
|
|
495
|
-
"""
|
|
496
|
-
|
|
497
|
-
gomod = project_root / "go.mod"
|
|
498
|
-
try:
|
|
499
|
-
text = gomod.read_text(encoding="utf-8")
|
|
500
|
-
except OSError:
|
|
501
|
-
return None
|
|
502
|
-
for line in text.splitlines():
|
|
503
|
-
stripped = line.strip()
|
|
504
|
-
if stripped.startswith("module "):
|
|
505
|
-
return stripped[len("module ") :].strip().strip('"')
|
|
506
|
-
return None
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
def _go_package_to_dir(package: str | None, module_path: str | None) -> str | None:
|
|
510
|
-
"""Map a Go ``Package`` import-path to its repo-root-relative POSIX directory.
|
|
511
|
-
|
|
512
|
-
``example.com/m/internal/store`` with module ``example.com/m`` → ``internal/store``;
|
|
513
|
-
the module root package itself (``example.com/m``) → ``""`` (the repo root). A
|
|
514
|
-
package that is NOT under the module prefix (an external / stdlib import that has
|
|
515
|
-
no ``_test.go`` of ours) → ``None`` (ignored, like vitest's ``_relativize``
|
|
516
|
-
returning ``None`` for a path outside the project tree). When ``module_path`` is
|
|
517
|
-
unknown, ``None`` (cannot relativize) so the caller fails-closed.
|
|
518
|
-
"""
|
|
519
|
-
|
|
520
|
-
if not package or not module_path:
|
|
521
|
-
return None
|
|
522
|
-
pkg = str(package).strip()
|
|
523
|
-
mod = str(module_path).strip()
|
|
524
|
-
if pkg == mod:
|
|
525
|
-
return ""
|
|
526
|
-
prefix = mod.rstrip("/") + "/"
|
|
527
|
-
if pkg.startswith(prefix):
|
|
528
|
-
return pkg[len(prefix) :].replace("\\", "/").strip("/")
|
|
529
|
-
return None
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
def _go_test_func_root(test: str | None) -> str:
|
|
533
|
-
"""The top-level ``TestFunc`` of a runner ``Test`` field (``TestX/sub`` → ``TestX``)."""
|
|
534
|
-
return str(test or "").split("/", 1)[0].strip()
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
def _go_import_path_base(import_path: str | None) -> str | None:
|
|
538
|
-
"""The package import-path from a ``build-fail`` event's ``ImportPath`` field.
|
|
539
|
-
|
|
540
|
-
``go test -json`` build-failure events carry ``ImportPath`` shaped like
|
|
541
|
-
``"example.com/m/internal/store [example.com/m/internal/store.test]"`` (the test
|
|
542
|
-
binary's import path with a bracketed variant). We take the leading import path
|
|
543
|
-
(before the space/bracket) so it can be mapped to a directory like a normal
|
|
544
|
-
``Package`` field. ``None``/empty ⇒ ``None``.
|
|
545
|
-
"""
|
|
546
|
-
if not import_path:
|
|
547
|
-
return None
|
|
548
|
-
return str(import_path).split(" ", 1)[0].strip() or None
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
def _go_static_test_func_index(project_root: Path) -> dict[str, dict[str, str]]:
|
|
552
|
-
"""Index ``reldir → {TestFunc → relfile}`` over every ``*_test.go`` in the tree.
|
|
553
|
-
|
|
554
|
-
Reuses the SHARED test-file discovery (:func:`_iter_test_files`, the same glob
|
|
555
|
-
the inventory + VB audit consume) so the files indexed here are EXACTLY the files
|
|
556
|
-
the gate keys on, then parses each with the Go structural adapter
|
|
557
|
-
(:class:`~codd.vb_marker_authenticity.GoTestBlockProfile`) to read its top-level
|
|
558
|
-
``func TestFunc`` names. This is the static half of the ``(Package, Test)``→FILE
|
|
559
|
-
join: ``dir = relfile's parent``; ``TestFunc`` is unique within a dir in valid Go
|
|
560
|
-
(duplicate top-level test funcs in one package do not compile), so the map is
|
|
561
|
-
well-defined. Files the adapter cannot parse contribute nothing (fail-closed:
|
|
562
|
-
their tests then read as not-executed, never a false pass).
|
|
563
|
-
"""
|
|
564
|
-
|
|
565
|
-
from codd.vb_marker_authenticity import GoTestBlockProfile
|
|
566
|
-
|
|
567
|
-
adapter = GoTestBlockProfile()
|
|
568
|
-
index: dict[str, dict[str, str]] = {}
|
|
569
|
-
for path in _iter_test_files(project_root, test_dirs=None):
|
|
570
|
-
rel = _norm_test_path(_rel_path(path, project_root))
|
|
571
|
-
if not rel.endswith("_test.go"):
|
|
572
|
-
continue
|
|
573
|
-
rel_dir = rel.rsplit("/", 1)[0] if "/" in rel else ""
|
|
574
|
-
try:
|
|
575
|
-
text = path.read_text(encoding="utf-8")
|
|
576
|
-
except (OSError, UnicodeDecodeError):
|
|
577
|
-
continue
|
|
578
|
-
try:
|
|
579
|
-
blocks = adapter.parse_test_blocks(text)
|
|
580
|
-
except Exception: # noqa: BLE001 — a parse failure contributes no funcs.
|
|
581
|
-
continue
|
|
582
|
-
bucket = index.setdefault(rel_dir, {})
|
|
583
|
-
for block in blocks:
|
|
584
|
-
label = (block.label or "").strip()
|
|
585
|
-
# Top-level funcs only (subtest blocks carry a ``<Func>/subtest`` label);
|
|
586
|
-
# the func before any ``/`` is the join key, and the FIRST file that
|
|
587
|
-
# declares it wins (unique per dir in valid Go, so order is immaterial).
|
|
588
|
-
func = label.split("/", 1)[0].strip()
|
|
589
|
-
if func.startswith("Test") and func not in bucket:
|
|
590
|
-
bucket[func] = rel
|
|
591
|
-
return index
|
|
592
|
-
|
|
114
|
+
# The runner-report PARSERS (RunnerReportUnsupported / RunnerExecution /
|
|
115
|
+
# RunnerReportAdapter / VitestJsonReportAdapter / GoTestJsonReportAdapter) and
|
|
116
|
+
# their helpers were RELOCATED to codd/languages/adapters/runner_report.py for
|
|
117
|
+
# the Contract Kernel (re-imported above; same objects). The format->adapter MAP
|
|
118
|
+
# and its resolvers STAY here: they are the coverage gate's lookup surface.
|
|
593
119
|
|
|
594
120
|
#: report_format → adapter. A new runner registers ONE entry here + sets the
|
|
595
121
|
#: matching ``report_format`` on its profile's :class:`VerifyCampaignSpec`.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""Concrete language adapters for the Contract Kernel (relocated leaves).
|
|
2
|
+
|
|
3
|
+
This package holds the concrete adapter implementations the language contract
|
|
4
|
+
resolves (runner-report parsers today). It is intentionally a LEAF surface: this
|
|
5
|
+
``__init__`` imports NOTHING (no submodule, no registration) so that importing
|
|
6
|
+
``codd.languages`` — or even ``codd.languages.adapters`` — never pulls an adapter
|
|
7
|
+
implementation or populates :data:`codd.languages.registry.default_adapter_registry`
|
|
8
|
+
at package-load time. Registration stays LAZY (see
|
|
9
|
+
:mod:`codd.languages.builtin_adapters`); adapter modules are imported only inside
|
|
10
|
+
the functions that need them, which is what keeps this package free of an import
|
|
11
|
+
cycle with :mod:`codd.coverage_execution_coherence`.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|