codd-dev 2.66.0__tar.gz → 2.67.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.66.0 → codd_dev-2.67.0}/PKG-INFO +1 -1
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/__init__.py +1 -1
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/coverage_execution_coherence.py +505 -9
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/greenfield/pipeline.py +183 -3
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/implement_oracle.py +546 -2
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/implementer.py +17 -3
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/verify_runner.py +26 -0
- codd_dev-2.67.0/codd/stack/__init__.py +62 -0
- codd_dev-2.67.0/codd/stack/adapters/__init__.py +36 -0
- codd_dev-2.67.0/codd/stack/adapters/_base.py +18 -0
- codd_dev-2.67.0/codd/stack/adapters/nextjs.py +77 -0
- codd_dev-2.67.0/codd/stack/adapters/playwright.py +53 -0
- codd_dev-2.67.0/codd/stack/compose.py +268 -0
- codd_dev-2.67.0/codd/stack/loader.py +302 -0
- codd_dev-2.67.0/codd/stack/lock.py +133 -0
- codd_dev-2.67.0/codd/stack/obligations.py +76 -0
- codd_dev-2.67.0/codd/stack/profile.py +356 -0
- codd_dev-2.67.0/codd/stack/profiles/addons/playwright.yaml +54 -0
- codd_dev-2.67.0/codd/stack/profiles/addons/prisma.yaml +51 -0
- codd_dev-2.67.0/codd/stack/profiles/frameworks/nextjs.yaml +150 -0
- codd_dev-2.67.0/codd/stack/project.py +70 -0
- codd_dev-2.67.0/codd/stack/registry.py +112 -0
- codd_dev-2.67.0/codd/stack/resolve.py +79 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/pyproject.toml +1 -1
- {codd_dev-2.66.0 → codd_dev-2.67.0}/.gitignore +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/LICENSE +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/README.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/__main__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/assembler.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/bridge.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/cli.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/clustering.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/confidence.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/config.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/config_schema.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/contracts.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/contracts_registry/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/contracts_registry/__main__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/contracts_registry/certify.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/contracts_registry/generate_matrix.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/contracts_registry/registry.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/defaults.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/defaults.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployer.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/design_md.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/discovery.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/drift.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/e2e_harness.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/env_refs.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/extractor.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fixer.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/generator.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/graph.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/implement_oracle_scope.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/inheritance.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/languages/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/languages/compat.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/languages/loader.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/languages/path_planner.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/languages/profile.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/languages/profiles/go.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/languages/profiles/python.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/languages/profiles/typescript.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/languages/registry.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/lexicon.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/measure.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/planner.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/policy.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/project_types.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/propagate.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/propagator.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/reference_resolution.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/registry.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/auto_scope_guard.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/history.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/require.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/restore.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/scanner.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/synth.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/test_detection.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/traceability.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/validator.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/vb_marker_authenticity.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/vb_rerun_scope.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/verifiable_behavior_audit.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/watch/events.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd/wiring.py +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/dogfood/README.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/examples/README.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.66.0 → codd_dev-2.67.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.67.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
|
|
@@ -43,10 +43,13 @@ THE THREE PIECES (all per-profile; gate logic is language-agnostic)
|
|
|
43
43
|
to another (the codex14 ``0 e2e scanned`` half of the bug).
|
|
44
44
|
3. **Runner-report adapter** — per-profile normalization of the campaign report
|
|
45
45
|
into the set of executed + passed test FILES (and, when available, cases).
|
|
46
|
-
``vitest-json``
|
|
47
|
-
documented extension
|
|
46
|
+
``vitest-json`` and ``go-test-json`` are implemented; ``pytest-junit-xml`` is a
|
|
47
|
+
documented extension point (:func:`resolve_runner_report_adapter`). A report
|
|
48
48
|
the gate cannot read is an EXPLICIT degrade/observability error — never a
|
|
49
|
-
silent green.
|
|
49
|
+
silent green. A runner that reports per-test-case identity (Go) reconciles each
|
|
50
|
+
VB at TEST granularity via :class:`RunnerExecution.executed_passed_cases`; a
|
|
51
|
+
file-level runner (vitest/pytest) reconciles at FILE granularity — both share
|
|
52
|
+
the same gate, selected by the adapter's ``produces_test_case_identity``.
|
|
50
53
|
|
|
51
54
|
GENERALITY (see ``feedback_codd_generality_preservation``): the gate logic here
|
|
52
55
|
is language-agnostic. Every language-specific operation — the campaign command,
|
|
@@ -251,16 +254,352 @@ class VitestJsonReportAdapter:
|
|
|
251
254
|
)
|
|
252
255
|
|
|
253
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
|
+
|
|
593
|
+
|
|
254
594
|
#: report_format → adapter. A new runner registers ONE entry here + sets the
|
|
255
595
|
#: matching ``report_format`` on its profile's :class:`VerifyCampaignSpec`.
|
|
256
|
-
#: ``pytest-junit-xml``
|
|
257
|
-
#:
|
|
258
|
-
#:
|
|
259
|
-
#:
|
|
260
|
-
#: Test, Package}`` events. Until added they resolve to ``None`` and the gate
|
|
261
|
-
#: degrades EXPLICITLY for that stack (never a silent green).
|
|
596
|
+
#: ``pytest-junit-xml`` is the remaining documented extension point (pytest JUnit
|
|
597
|
+
#: XML parses ``<testcase classname name>`` + ``<skipped>``/``<failure>``/``<error>``
|
|
598
|
+
#: children); until added it resolves to ``None`` and the gate degrades EXPLICITLY
|
|
599
|
+
#: for that stack (never a silent green).
|
|
262
600
|
_RUNNER_REPORT_ADAPTERS: dict[str, RunnerReportAdapter] = {
|
|
263
601
|
"vitest-json": VitestJsonReportAdapter(),
|
|
602
|
+
"go-test-json": GoTestJsonReportAdapter(),
|
|
264
603
|
}
|
|
265
604
|
|
|
266
605
|
|
|
@@ -534,6 +873,111 @@ def _authentic_cover_files(
|
|
|
534
873
|
return authentic, True
|
|
535
874
|
|
|
536
875
|
|
|
876
|
+
def _norm_vb_key(vb_id: str) -> str:
|
|
877
|
+
"""The audit's canonical VB id (so the per-case map keys match a row's id)."""
|
|
878
|
+
from codd.verifiable_behavior_audit import _normalize_vb_id
|
|
879
|
+
|
|
880
|
+
return _normalize_vb_id(vb_id)
|
|
881
|
+
|
|
882
|
+
|
|
883
|
+
def _authentic_cover_case_keys(
|
|
884
|
+
project_root: Path,
|
|
885
|
+
*,
|
|
886
|
+
config: dict[str, Any] | None,
|
|
887
|
+
profile: Any,
|
|
888
|
+
vb_audit: VBAuditReport,
|
|
889
|
+
authenticity: AuthenticityReport,
|
|
890
|
+
) -> dict[str, set[str]] | None:
|
|
891
|
+
"""Per-VB ``{normalized_vb_id → {"<relfile>::TestFunc", ...}}`` covering case keys.
|
|
892
|
+
|
|
893
|
+
Returns ``None`` (⇒ the gate uses FILE-level reconciliation, unchanged) UNLESS
|
|
894
|
+
this stack supports per-test-case reconciliation: its runner adapter declares
|
|
895
|
+
``produces_test_case_identity()`` True (Go) AND its test-block profile parses
|
|
896
|
+
blocks whose label is the runner-case identity (``TestFunc``). For every AUTHENTIC
|
|
897
|
+
``codd: covers vb=`` marker, the covering case key is ``"<relfile>::<top-level
|
|
898
|
+
TestFunc>"`` — the file the marker sits in plus the top-level test function of the
|
|
899
|
+
block it attaches to, using the SAME ``_attached_block`` attachment the
|
|
900
|
+
authenticity gate uses (so static coverage and execution reconciliation agree).
|
|
901
|
+
A marker that does not attach to an executable block, or whose block is
|
|
902
|
+
inauthentic for this VB, contributes NO key (it is not a credible covering case).
|
|
903
|
+
|
|
904
|
+
This is the static half of the ``(Package, Test)``→case-key join the Go runner
|
|
905
|
+
adapter performs; matching keys on both sides is what lets a passed ``TestA``
|
|
906
|
+
prove its VB while a sibling ``TestB`` skip in the same file does not drag it down.
|
|
907
|
+
"""
|
|
908
|
+
|
|
909
|
+
adapter_getter = getattr(profile, "runner_report_adapter", None) if profile is not None else None
|
|
910
|
+
adapter = adapter_getter() if callable(adapter_getter) else None
|
|
911
|
+
if adapter is None or not _adapter_produces_case_identity(adapter):
|
|
912
|
+
return None
|
|
913
|
+
block_getter = getattr(profile, "test_block_profile", None)
|
|
914
|
+
test_block_profile = block_getter() if callable(block_getter) else None
|
|
915
|
+
if test_block_profile is None:
|
|
916
|
+
return None
|
|
917
|
+
|
|
918
|
+
from codd.vb_marker_authenticity import _attached_block, _scan_cover_markers_with_lines
|
|
919
|
+
|
|
920
|
+
# Authentic-marker filter: a (path, vb) flagged inauthentic (skipped/unattached/
|
|
921
|
+
# no-assertion/orphan) contributes no covering case — same files-drop discipline
|
|
922
|
+
# as ``_authentic_cover_files`` but at marker granularity.
|
|
923
|
+
inauthentic: set[tuple[str, str]] = {
|
|
924
|
+
(_norm_test_path(v.path), _norm_vb_key(v.vb_id))
|
|
925
|
+
for v in authenticity.violations
|
|
926
|
+
if v.kind != "hook"
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
keys_by_vb: dict[str, set[str]] = {}
|
|
930
|
+
for path in _iter_test_files(project_root, test_dirs=_resolve_vb_scan_dirs(project_root, config)):
|
|
931
|
+
rel = _norm_test_path(_rel_path(path, project_root))
|
|
932
|
+
try:
|
|
933
|
+
text = path.read_text(encoding="utf-8")
|
|
934
|
+
except (OSError, UnicodeDecodeError):
|
|
935
|
+
continue
|
|
936
|
+
markers = _scan_cover_markers_with_lines(text, rel)
|
|
937
|
+
if not markers:
|
|
938
|
+
continue
|
|
939
|
+
if not test_block_profile.handles_file(rel):
|
|
940
|
+
continue
|
|
941
|
+
try:
|
|
942
|
+
blocks = test_block_profile.parse_test_blocks(text)
|
|
943
|
+
except Exception: # noqa: BLE001 — an unparseable file contributes no keys.
|
|
944
|
+
blocks = []
|
|
945
|
+
if not blocks:
|
|
946
|
+
continue
|
|
947
|
+
rel_dir = rel.rsplit("/", 1)[0] if "/" in rel else ""
|
|
948
|
+
for marker in markers:
|
|
949
|
+
vb_key = _norm_vb_key(marker.vb_id)
|
|
950
|
+
if (rel, vb_key) in inauthentic:
|
|
951
|
+
continue # this VB's marker here is not credible coverage
|
|
952
|
+
block = _attached_block(marker.line, text, blocks)
|
|
953
|
+
if block is None or not block.is_executable:
|
|
954
|
+
continue
|
|
955
|
+
test_func = (block.label or "").split("/", 1)[0].strip()
|
|
956
|
+
if not test_func:
|
|
957
|
+
continue
|
|
958
|
+
# The runner-case key the Go adapter emits is module-relative-dir + func;
|
|
959
|
+
# here the relfile already carries the dir, so the key is rel-file based —
|
|
960
|
+
# we key by ``<relfile>::TestFunc`` (the adapter writes the SAME, having
|
|
961
|
+
# resolved (Package, Test) back to relfile via the static index).
|
|
962
|
+
keys_by_vb.setdefault(vb_key, set()).add(f"{rel}::{test_func}")
|
|
963
|
+
return keys_by_vb
|
|
964
|
+
|
|
965
|
+
|
|
966
|
+
def _adapter_produces_case_identity(adapter: Any) -> bool:
|
|
967
|
+
"""Whether ``adapter`` declares per-test-case identity (best-effort, default False).
|
|
968
|
+
|
|
969
|
+
A runner adapter opts into per-case reconciliation by defining
|
|
970
|
+
``produces_test_case_identity() -> True`` (the Go adapter). vitest/pytest do not
|
|
971
|
+
define it ⇒ False ⇒ they keep the file-level branch (byte-identical)."""
|
|
972
|
+
getter = getattr(adapter, "produces_test_case_identity", None)
|
|
973
|
+
if not callable(getter):
|
|
974
|
+
return False
|
|
975
|
+
try:
|
|
976
|
+
return bool(getter())
|
|
977
|
+
except Exception: # noqa: BLE001
|
|
978
|
+
return False
|
|
979
|
+
|
|
980
|
+
|
|
537
981
|
def build_coherence_report(
|
|
538
982
|
project_root: Path | str,
|
|
539
983
|
*,
|
|
@@ -580,6 +1024,24 @@ def build_coherence_report(
|
|
|
580
1024
|
detail="no verifiable behaviors declared — coverage-execution coherence is N/A",
|
|
581
1025
|
)
|
|
582
1026
|
|
|
1027
|
+
# PER-CASE reconciliation capability (GPT-5.5 design, dogfood go-test-json):
|
|
1028
|
+
# a runner whose adapter emits per-test-case identities AND a static profile that
|
|
1029
|
+
# can map a VB marker to the SAME runner-case key reconciles a VB by its covering
|
|
1030
|
+
# (file, test-case) — NOT by file status. This is REQUIRED for Go, where many
|
|
1031
|
+
# independent ``func TestXxx`` share one ``_test.go`` (file-level status would
|
|
1032
|
+
# false-RED a passed VB whose sibling skipped). It is OFF for vitest/pytest (their
|
|
1033
|
+
# adapters expose no per-case identity), which keep the byte-identical file branch
|
|
1034
|
+
# below. The static covering case keys reuse the SAME marker→block attachment the
|
|
1035
|
+
# authenticity gate uses (no re-invented attachment ⇒ coverage + execution agree).
|
|
1036
|
+
case_keys_by_vb = _authentic_cover_case_keys(
|
|
1037
|
+
project_root, config=config, profile=profile, vb_audit=vb_audit, authenticity=authenticity
|
|
1038
|
+
)
|
|
1039
|
+
case_reconciliation = (
|
|
1040
|
+
case_keys_by_vb is not None
|
|
1041
|
+
and execution is not None
|
|
1042
|
+
and execution.test_level_available
|
|
1043
|
+
)
|
|
1044
|
+
|
|
583
1045
|
unblocked = [row for row in vb_audit.rows if row.coverage_status != "blocked"]
|
|
584
1046
|
unverified: list[UnverifiedVB] = []
|
|
585
1047
|
verified_count = 0
|
|
@@ -609,6 +1071,39 @@ def build_coherence_report(
|
|
|
609
1071
|
)
|
|
610
1072
|
)
|
|
611
1073
|
continue
|
|
1074
|
+
|
|
1075
|
+
if case_reconciliation:
|
|
1076
|
+
# VB verified iff ANY authentic covering (file, top-level TestFunc) case
|
|
1077
|
+
# key passed in the runner report. A skipped/failed/missing covering case
|
|
1078
|
+
# never appears in ``executed_passed_cases`` ⇒ correctly unverified; a
|
|
1079
|
+
# sibling test's outcome in the same file is irrelevant (the false-RED the
|
|
1080
|
+
# file branch would cause for Go is avoided).
|
|
1081
|
+
covering_cases = case_keys_by_vb.get(_norm_vb_key(row.vb_id), set())
|
|
1082
|
+
assert execution is not None # case_reconciliation implies execution
|
|
1083
|
+
passed = sorted(k for k in covering_cases if k in execution.executed_passed_cases)
|
|
1084
|
+
if passed:
|
|
1085
|
+
verified_count += 1
|
|
1086
|
+
continue
|
|
1087
|
+
# Distinguish "ran but failed/skipped" from "never ran" for the message: a
|
|
1088
|
+
# covering file that the runner included (failed/skipped) → failed; else
|
|
1089
|
+
# never ran. (Falls back to file-level inclusion for the reason only.)
|
|
1090
|
+
ran_files = sorted(
|
|
1091
|
+
f for f in authentic_files
|
|
1092
|
+
if (entry := inventory.get(f)) is not None and entry.runner_inclusion
|
|
1093
|
+
)
|
|
1094
|
+
reason = "covering_test_failed" if ran_files else "no_covering_test_executed"
|
|
1095
|
+
unverified.append(
|
|
1096
|
+
UnverifiedVB(
|
|
1097
|
+
vb_id=row.vb_id,
|
|
1098
|
+
description=row.description,
|
|
1099
|
+
source_doc=row.source_doc,
|
|
1100
|
+
covering_files=tuple(sorted(covering_cases) or sorted(authentic_files)),
|
|
1101
|
+
reason=reason,
|
|
1102
|
+
)
|
|
1103
|
+
)
|
|
1104
|
+
continue
|
|
1105
|
+
|
|
1106
|
+
# FILE-level reconciliation (vitest/pytest — UNCHANGED, byte-identical).
|
|
612
1107
|
# Verified iff ANY authentic covering file executed AND passed.
|
|
613
1108
|
passed_files = sorted(f for f in authentic_files if inventory.passed(f))
|
|
614
1109
|
if passed_files:
|
|
@@ -1157,6 +1652,7 @@ __all__ = [
|
|
|
1157
1652
|
"CoherenceError",
|
|
1158
1653
|
"CoherenceObservabilityError",
|
|
1159
1654
|
"CoherenceReport",
|
|
1655
|
+
"GoTestJsonReportAdapter",
|
|
1160
1656
|
"RunnerExecution",
|
|
1161
1657
|
"RunnerReportAdapter",
|
|
1162
1658
|
"RunnerReportUnsupported",
|