codd-dev 2.67.0__tar.gz → 2.69.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.67.0 → codd_dev-2.69.0}/PKG-INFO +1 -1
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/__init__.py +1 -1
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/languages/__init__.py +34 -0
- codd_dev-2.69.0/codd/languages/contract.py +248 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/languages/registry.py +6 -0
- codd_dev-2.69.0/codd/languages/verify_plan.py +192 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/pyproject.toml +1 -1
- {codd_dev-2.67.0 → codd_dev-2.69.0}/.gitignore +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/LICENSE +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/README.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/__main__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/assembler.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/bridge.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/cli.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/clustering.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/confidence.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/config.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/config_schema.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/contracts.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/contracts_registry/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/contracts_registry/__main__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/contracts_registry/certify.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/contracts_registry/generate_matrix.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/contracts_registry/registry.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/coverage_execution_coherence.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/defaults.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/defaults.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployer.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/design_md.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/discovery.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/drift.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/e2e_harness.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/env_refs.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/extractor.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fixer.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/generator.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/graph.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/greenfield/pipeline.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/implement_oracle.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/implement_oracle_scope.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/implementer.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/inheritance.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/languages/compat.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/languages/loader.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/languages/path_planner.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/languages/profile.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/languages/profiles/go.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/languages/profiles/python.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/languages/profiles/typescript.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/lexicon.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/measure.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/planner.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/policy.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/project_types.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/propagate.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/propagator.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/reference_resolution.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/registry.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/auto_scope_guard.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/history.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/require.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/restore.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/scanner.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/stack/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/stack/adapters/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/stack/adapters/_base.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/stack/adapters/nextjs.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/stack/adapters/playwright.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/stack/compose.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/stack/loader.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/stack/lock.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/stack/obligations.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/stack/profile.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/stack/project.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/stack/registry.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/stack/resolve.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/synth.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/test_detection.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/traceability.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/validator.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/vb_marker_authenticity.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/vb_rerun_scope.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/verifiable_behavior_audit.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/watch/events.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd/wiring.py +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/dogfood/README.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/examples/README.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.67.0 → codd_dev-2.69.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.69.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
|
|
@@ -39,8 +39,26 @@ from .registry import (
|
|
|
39
39
|
AdapterRegistry,
|
|
40
40
|
LanguageRegistry,
|
|
41
41
|
UnknownLanguageError,
|
|
42
|
+
default_adapter_registry,
|
|
42
43
|
default_registry,
|
|
43
44
|
)
|
|
45
|
+
from .contract import (
|
|
46
|
+
AdapterRequirement,
|
|
47
|
+
IncompleteLanguageContractError,
|
|
48
|
+
ResolvedLanguageContract,
|
|
49
|
+
build_language_contract,
|
|
50
|
+
resolve_language_contract,
|
|
51
|
+
resolve_language_profile,
|
|
52
|
+
)
|
|
53
|
+
from .verify_plan import (
|
|
54
|
+
ShadowComparison,
|
|
55
|
+
VerifyClass,
|
|
56
|
+
VerifyOutcome,
|
|
57
|
+
VerifyRunPlan,
|
|
58
|
+
build_verify_plan,
|
|
59
|
+
classify_verify_outcome,
|
|
60
|
+
shadow_compare,
|
|
61
|
+
)
|
|
44
62
|
from .compat import (
|
|
45
63
|
UnsupportedLayoutShape,
|
|
46
64
|
layout_profile_from_language_profile,
|
|
@@ -74,7 +92,23 @@ __all__ = [
|
|
|
74
92
|
"AdapterRegistry",
|
|
75
93
|
"LanguageRegistry",
|
|
76
94
|
"UnknownLanguageError",
|
|
95
|
+
"default_adapter_registry",
|
|
77
96
|
"default_registry",
|
|
97
|
+
# resolved language contract (the language-free kernel seam, v2.68)
|
|
98
|
+
"AdapterRequirement",
|
|
99
|
+
"IncompleteLanguageContractError",
|
|
100
|
+
"ResolvedLanguageContract",
|
|
101
|
+
"build_language_contract",
|
|
102
|
+
"resolve_language_contract",
|
|
103
|
+
"resolve_language_profile",
|
|
104
|
+
# verify run plan + semantic classifier (v2.69a, shadow)
|
|
105
|
+
"ShadowComparison",
|
|
106
|
+
"VerifyClass",
|
|
107
|
+
"VerifyOutcome",
|
|
108
|
+
"VerifyRunPlan",
|
|
109
|
+
"build_verify_plan",
|
|
110
|
+
"classify_verify_outcome",
|
|
111
|
+
"shadow_compare",
|
|
78
112
|
# compat shim (LanguageProfile -> legacy LayoutProfile)
|
|
79
113
|
"UnsupportedLayoutShape",
|
|
80
114
|
"layout_profile_from_language_profile",
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
"""ResolvedLanguageContract — the language-free view the kernel consumes (v2.68).
|
|
2
|
+
|
|
3
|
+
The Contract Kernel goal: the harness core never branches on a language name; it
|
|
4
|
+
resolves a project's language to a :class:`LanguageProfile`, resolves the
|
|
5
|
+
adapters that profile *names* against the :class:`AdapterRegistry`, and operates
|
|
6
|
+
only on the resulting :class:`ResolvedLanguageContract` (profile + resolved
|
|
7
|
+
adapter capabilities + a content hash).
|
|
8
|
+
|
|
9
|
+
Anti-false-green seam: a profile that NAMES an adapter the registry cannot
|
|
10
|
+
supply is an INCOMPLETE contract. :meth:`ResolvedLanguageContract.require_complete`
|
|
11
|
+
raises (RED) rather than letting a gate run with a missing observation
|
|
12
|
+
capability — a missing adapter must never become a silent green. (Legacy mode
|
|
13
|
+
may instead inspect :attr:`~ResolvedLanguageContract.is_complete` and degrade to
|
|
14
|
+
a warning; that choice belongs to the caller, not to this module.)
|
|
15
|
+
|
|
16
|
+
This module is ADDITIVE in v2.68: it establishes the resolution seam and is
|
|
17
|
+
exercised by tests, but is not yet wired into the live verify/greenfield gates
|
|
18
|
+
(that switch is v2.69+). Adapter *implementations* are registered in v2.72; until
|
|
19
|
+
then every declared adapter resolves as missing, which is exactly what the
|
|
20
|
+
incomplete-contract test asserts.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
from __future__ import annotations
|
|
24
|
+
|
|
25
|
+
from dataclasses import dataclass, field
|
|
26
|
+
import hashlib
|
|
27
|
+
import json
|
|
28
|
+
from typing import Any, Mapping
|
|
29
|
+
|
|
30
|
+
from .profile import LanguageProfile
|
|
31
|
+
from .registry import (
|
|
32
|
+
AdapterRegistry,
|
|
33
|
+
LanguageRegistry,
|
|
34
|
+
default_adapter_registry,
|
|
35
|
+
default_registry,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
# Adapter "kind" is implied by WHERE in the profile the adapter id is declared.
|
|
39
|
+
# These kind names are the contract between profiles (which name bare ids) and
|
|
40
|
+
# the AdapterRegistry (keyed by (kind, id)); v2.72 registers adapters under them.
|
|
41
|
+
KIND_TEST_SEMANTICS = "test_semantics"
|
|
42
|
+
KIND_RUNNER_REPORT = "runner_report"
|
|
43
|
+
KIND_IMPORT_RESOLVER = "import_resolver"
|
|
44
|
+
KIND_SCAFFOLD = "scaffold"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@dataclass(frozen=True)
|
|
48
|
+
class AdapterRequirement:
|
|
49
|
+
"""An adapter a profile declares it needs, with where it was declared."""
|
|
50
|
+
|
|
51
|
+
kind: str
|
|
52
|
+
id: str
|
|
53
|
+
source: str # e.g. "tests.semantics_adapter" — for honest diagnostics
|
|
54
|
+
|
|
55
|
+
@property
|
|
56
|
+
def ref(self) -> str:
|
|
57
|
+
return f"{self.kind}:{self.id}"
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class IncompleteLanguageContractError(RuntimeError):
|
|
61
|
+
"""A profile names adapters the registry cannot supply (RED, not silent green)."""
|
|
62
|
+
|
|
63
|
+
def __init__(self, language_id: str, missing: tuple[AdapterRequirement, ...]) -> None:
|
|
64
|
+
self.language_id = language_id
|
|
65
|
+
self.missing = tuple(missing)
|
|
66
|
+
detail = ", ".join(f"{r.ref} (from {r.source})" for r in self.missing)
|
|
67
|
+
super().__init__(
|
|
68
|
+
f"incomplete language contract for {language_id!r}: no adapter registered "
|
|
69
|
+
f"for {detail}. A profile that names an adapter the registry cannot supply "
|
|
70
|
+
f"is an incomplete contract (RED), never a silent green."
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def _config_language(config: Mapping[str, Any] | None) -> str | None:
|
|
75
|
+
"""Read ``project.language`` from a codd.yaml mapping (None if absent)."""
|
|
76
|
+
if not isinstance(config, Mapping):
|
|
77
|
+
return None
|
|
78
|
+
project = config.get("project")
|
|
79
|
+
if isinstance(project, Mapping):
|
|
80
|
+
language = project.get("language")
|
|
81
|
+
if isinstance(language, str) and language.strip():
|
|
82
|
+
return language.strip()
|
|
83
|
+
return None
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _declared_adapter_requirements(
|
|
87
|
+
profile: LanguageProfile,
|
|
88
|
+
) -> tuple[AdapterRequirement, ...]:
|
|
89
|
+
"""Collect every adapter id the profile declares, as (kind, id) requirements.
|
|
90
|
+
|
|
91
|
+
Walks the MODELED profile fields only (commands/imports/tests/verify/scaffold).
|
|
92
|
+
``implement_oracle`` / ``path_rules`` adapters live in ``profile.extra`` and
|
|
93
|
+
are not modeled until v2.73/v2.74, so they are intentionally not collected yet.
|
|
94
|
+
"""
|
|
95
|
+
reqs: list[AdapterRequirement] = []
|
|
96
|
+
|
|
97
|
+
tests = profile.tests
|
|
98
|
+
if tests is not None:
|
|
99
|
+
if tests.semantics_adapter:
|
|
100
|
+
reqs.append(
|
|
101
|
+
AdapterRequirement(KIND_TEST_SEMANTICS, tests.semantics_adapter, "tests.semantics_adapter")
|
|
102
|
+
)
|
|
103
|
+
if tests.runner_report_adapter:
|
|
104
|
+
reqs.append(
|
|
105
|
+
AdapterRequirement(KIND_RUNNER_REPORT, tests.runner_report_adapter, "tests.runner_report_adapter")
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
imports = profile.imports
|
|
109
|
+
if imports is not None and imports.resolver_adapter:
|
|
110
|
+
reqs.append(
|
|
111
|
+
AdapterRequirement(KIND_IMPORT_RESOLVER, imports.resolver_adapter, "imports.resolver_adapter")
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
scaffold = profile.scaffold
|
|
115
|
+
if scaffold is not None and scaffold.adapter:
|
|
116
|
+
reqs.append(AdapterRequirement(KIND_SCAFFOLD, scaffold.adapter, "scaffold.adapter"))
|
|
117
|
+
|
|
118
|
+
verify = profile.verify
|
|
119
|
+
if verify is not None and verify.report is not None and verify.report.adapter:
|
|
120
|
+
reqs.append(
|
|
121
|
+
AdapterRequirement(KIND_RUNNER_REPORT, verify.report.adapter, "verify.report.adapter")
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
for cmd_id, cmd in profile.commands.items():
|
|
125
|
+
if cmd.report is not None and cmd.report.adapter:
|
|
126
|
+
reqs.append(
|
|
127
|
+
AdapterRequirement(KIND_RUNNER_REPORT, cmd.report.adapter, f"commands.{cmd_id}.report.adapter")
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
# Dedupe by (kind, id), keeping the first declaration site for diagnostics.
|
|
131
|
+
seen: set[tuple[str, str]] = set()
|
|
132
|
+
unique: list[AdapterRequirement] = []
|
|
133
|
+
for req in reqs:
|
|
134
|
+
key = (req.kind, req.id)
|
|
135
|
+
if key not in seen:
|
|
136
|
+
seen.add(key)
|
|
137
|
+
unique.append(req)
|
|
138
|
+
# Deterministic order so the content hash is stable.
|
|
139
|
+
unique.sort(key=lambda r: (r.kind, r.id))
|
|
140
|
+
return tuple(unique)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def _contract_hash(
|
|
144
|
+
profile: LanguageProfile, required: tuple[AdapterRequirement, ...]
|
|
145
|
+
) -> str:
|
|
146
|
+
payload = json.dumps(
|
|
147
|
+
{
|
|
148
|
+
"language": profile.identity.id,
|
|
149
|
+
"adapters": [r.ref for r in required],
|
|
150
|
+
},
|
|
151
|
+
sort_keys=True,
|
|
152
|
+
ensure_ascii=False,
|
|
153
|
+
)
|
|
154
|
+
return hashlib.sha256(payload.encode("utf-8")).hexdigest()[:16]
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
@dataclass(frozen=True)
|
|
158
|
+
class ResolvedLanguageContract:
|
|
159
|
+
"""Profile + resolved adapter capabilities + content hash (kernel input)."""
|
|
160
|
+
|
|
161
|
+
language_id: str
|
|
162
|
+
profile: LanguageProfile
|
|
163
|
+
required_adapters: tuple[AdapterRequirement, ...]
|
|
164
|
+
resolved_adapter_refs: tuple[str, ...]
|
|
165
|
+
missing_adapters: tuple[AdapterRequirement, ...]
|
|
166
|
+
content_hash: str
|
|
167
|
+
|
|
168
|
+
@property
|
|
169
|
+
def is_complete(self) -> bool:
|
|
170
|
+
return not self.missing_adapters
|
|
171
|
+
|
|
172
|
+
@property
|
|
173
|
+
def adapter_ids(self) -> tuple[str, ...]:
|
|
174
|
+
"""All declared adapter refs (``kind:id``), resolved or not."""
|
|
175
|
+
return tuple(r.ref for r in self.required_adapters)
|
|
176
|
+
|
|
177
|
+
def require_complete(self) -> "ResolvedLanguageContract":
|
|
178
|
+
"""Return self if every declared adapter resolved; else raise (RED)."""
|
|
179
|
+
if self.missing_adapters:
|
|
180
|
+
raise IncompleteLanguageContractError(self.language_id, self.missing_adapters)
|
|
181
|
+
return self
|
|
182
|
+
|
|
183
|
+
def to_trace(self) -> dict[str, Any]:
|
|
184
|
+
"""Run-trace fields proving the run went through the contract seam."""
|
|
185
|
+
return {
|
|
186
|
+
"resolved_language_profile_id": self.language_id,
|
|
187
|
+
"language_contract_hash": self.content_hash,
|
|
188
|
+
"adapter_ids": list(self.adapter_ids),
|
|
189
|
+
"missing_adapters": [r.ref for r in self.missing_adapters],
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def build_language_contract(
|
|
194
|
+
profile: LanguageProfile,
|
|
195
|
+
*,
|
|
196
|
+
adapter_registry: AdapterRegistry | None = None,
|
|
197
|
+
) -> ResolvedLanguageContract:
|
|
198
|
+
"""Resolve a profile's declared adapters into a contract (no live wiring)."""
|
|
199
|
+
registry = adapter_registry if adapter_registry is not None else default_adapter_registry
|
|
200
|
+
required = _declared_adapter_requirements(profile)
|
|
201
|
+
resolved: list[str] = []
|
|
202
|
+
missing: list[AdapterRequirement] = []
|
|
203
|
+
for req in required:
|
|
204
|
+
if (req.kind, req.id) in registry:
|
|
205
|
+
resolved.append(req.ref)
|
|
206
|
+
else:
|
|
207
|
+
missing.append(req)
|
|
208
|
+
return ResolvedLanguageContract(
|
|
209
|
+
language_id=profile.identity.id,
|
|
210
|
+
profile=profile,
|
|
211
|
+
required_adapters=required,
|
|
212
|
+
resolved_adapter_refs=tuple(resolved),
|
|
213
|
+
missing_adapters=tuple(missing),
|
|
214
|
+
content_hash=_contract_hash(profile, required),
|
|
215
|
+
)
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
def resolve_language_profile(
|
|
219
|
+
config: Mapping[str, Any] | None,
|
|
220
|
+
*,
|
|
221
|
+
registry: LanguageRegistry | None = None,
|
|
222
|
+
) -> LanguageProfile | None:
|
|
223
|
+
"""Resolve the project's declared language to a profile.
|
|
224
|
+
|
|
225
|
+
Returns ``None`` when no ``project.language`` is declared (the caller stays
|
|
226
|
+
on the legacy path). Raises ``UnknownLanguageError`` when a language IS
|
|
227
|
+
declared but no profile matches — a declared-unknown language is an honest
|
|
228
|
+
error, never silently ignored. This is the single language-resolution seam;
|
|
229
|
+
new code MUST use it instead of a fixed ``registry.resolve("go")``.
|
|
230
|
+
"""
|
|
231
|
+
lang_registry = registry if registry is not None else default_registry
|
|
232
|
+
language = _config_language(config)
|
|
233
|
+
if not language:
|
|
234
|
+
return None
|
|
235
|
+
return lang_registry.resolve(language)
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
def resolve_language_contract(
|
|
239
|
+
config: Mapping[str, Any] | None,
|
|
240
|
+
*,
|
|
241
|
+
language_registry: LanguageRegistry | None = None,
|
|
242
|
+
adapter_registry: AdapterRegistry | None = None,
|
|
243
|
+
) -> ResolvedLanguageContract | None:
|
|
244
|
+
"""``config`` -> resolved language contract, or ``None`` if no language."""
|
|
245
|
+
profile = resolve_language_profile(config, registry=language_registry)
|
|
246
|
+
if profile is None:
|
|
247
|
+
return None
|
|
248
|
+
return build_language_contract(profile, adapter_registry=adapter_registry)
|
|
@@ -141,3 +141,9 @@ class AdapterRegistry:
|
|
|
141
141
|
|
|
142
142
|
#: Process-wide default language registry (lazy).
|
|
143
143
|
default_registry = LanguageRegistry()
|
|
144
|
+
|
|
145
|
+
#: Process-wide default adapter registry. Empty until v2.72 registers the real
|
|
146
|
+
#: test_semantics / runner_report / import_resolver / scaffold adapters; a
|
|
147
|
+
#: language contract that names an unregistered adapter is INCOMPLETE (RED), not
|
|
148
|
+
#: a silent green (see :mod:`codd.languages.contract`).
|
|
149
|
+
default_adapter_registry = AdapterRegistry()
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"""Verify run plan + semantic-class classifier (v2.69a — shadow only).
|
|
2
|
+
|
|
3
|
+
Builds a verify run plan from the resolved language contract's
|
|
4
|
+
``commands["verify"]`` (the declarative verify command: argv/cwd/env/report)
|
|
5
|
+
and classifies a verify outcome into one of six semantic classes. This runs in
|
|
6
|
+
SHADOW alongside the legacy ``detect_test_command`` path — it does NOT switch
|
|
7
|
+
verify behaviour (that is v2.69b). The point of the shadow stage is to prove,
|
|
8
|
+
on fixtures and on live runs, that the contract-driven plan classifies outcomes
|
|
9
|
+
the SAME way the legacy verifier does (or is intentionally stricter) BEFORE the
|
|
10
|
+
switch.
|
|
11
|
+
|
|
12
|
+
Anti-false-green: the classifier is a PURE mapping of already-computed signals
|
|
13
|
+
to a class — it never re-derives the zero-tests / report heuristics itself (the
|
|
14
|
+
caller supplies them, reusing the single legacy source), so there is no risk of
|
|
15
|
+
a second, drifting copy of the anti-false-green logic. The class ordering puts
|
|
16
|
+
every not-green verdict (TOOL_MISSING / timeout-FAIL / CONFIG_ERROR /
|
|
17
|
+
ZERO_TESTS / REPORT_MISSING) BEFORE the exit-0 PASS, so a run that exits 0 while
|
|
18
|
+
observing nothing is never classified green.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from __future__ import annotations
|
|
22
|
+
|
|
23
|
+
from dataclasses import dataclass
|
|
24
|
+
from enum import Enum
|
|
25
|
+
from typing import Mapping
|
|
26
|
+
|
|
27
|
+
from .contract import ResolvedLanguageContract
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class VerifyClass(str, Enum):
|
|
31
|
+
"""Semantic class of a verify outcome (design §v2.69a)."""
|
|
32
|
+
|
|
33
|
+
PASS = "PASS"
|
|
34
|
+
FAIL = "FAIL"
|
|
35
|
+
ZERO_TESTS = "ZERO_TESTS"
|
|
36
|
+
REPORT_MISSING = "REPORT_MISSING"
|
|
37
|
+
TOOL_MISSING = "TOOL_MISSING"
|
|
38
|
+
CONFIG_ERROR = "CONFIG_ERROR"
|
|
39
|
+
|
|
40
|
+
@property
|
|
41
|
+
def is_green(self) -> bool:
|
|
42
|
+
return self is VerifyClass.PASS
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@dataclass(frozen=True)
|
|
46
|
+
class VerifyRunPlan:
|
|
47
|
+
"""The contract-derived verify command (declarative, not yet executed)."""
|
|
48
|
+
|
|
49
|
+
language_id: str
|
|
50
|
+
argv: tuple[str, ...]
|
|
51
|
+
cwd: str | None
|
|
52
|
+
env: Mapping[str, str]
|
|
53
|
+
report_path: str | None
|
|
54
|
+
report_adapter: str | None
|
|
55
|
+
report_required: bool
|
|
56
|
+
must_include_test_sets: tuple[str, ...]
|
|
57
|
+
|
|
58
|
+
@property
|
|
59
|
+
def command_str(self) -> str:
|
|
60
|
+
return " ".join(self.argv)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def build_verify_plan(contract: ResolvedLanguageContract) -> VerifyRunPlan | None:
|
|
64
|
+
"""Derive the verify run plan from ``contract.profile.commands['verify']``.
|
|
65
|
+
|
|
66
|
+
Returns ``None`` when the profile declares no verify command (the caller
|
|
67
|
+
stays on the legacy path). A declared ``report.path`` means the command is
|
|
68
|
+
expected to PRODUCE that report — its absence after a run is REPORT_MISSING
|
|
69
|
+
(a not-green outcome), enforced once adapters land (v2.72) / the switch
|
|
70
|
+
happens (v2.69b).
|
|
71
|
+
"""
|
|
72
|
+
cmd = contract.profile.commands.get("verify")
|
|
73
|
+
if cmd is None:
|
|
74
|
+
return None
|
|
75
|
+
report = cmd.report
|
|
76
|
+
scope = cmd.scope
|
|
77
|
+
return VerifyRunPlan(
|
|
78
|
+
language_id=contract.language_id,
|
|
79
|
+
argv=tuple(cmd.argv),
|
|
80
|
+
cwd=cmd.cwd,
|
|
81
|
+
env=dict(cmd.env),
|
|
82
|
+
report_path=(report.path if report else None),
|
|
83
|
+
report_adapter=(report.adapter if report else None),
|
|
84
|
+
report_required=bool(report and report.path),
|
|
85
|
+
must_include_test_sets=(scope.must_include_test_sets if scope else ()),
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
@dataclass(frozen=True)
|
|
90
|
+
class VerifyOutcome:
|
|
91
|
+
"""Observed signals from running a verify command.
|
|
92
|
+
|
|
93
|
+
The signals are computed by the CALLER (reusing the single legacy source for
|
|
94
|
+
the zero-tests heuristic, the report adapter for report presence, etc.) — this
|
|
95
|
+
keeps the classifier a pure mapping with no duplicated anti-false-green logic.
|
|
96
|
+
"""
|
|
97
|
+
|
|
98
|
+
spawned: bool # did the tool execute at all? (False ⇒ tool missing / spawn error)
|
|
99
|
+
returncode: int | None = None
|
|
100
|
+
timed_out: bool = False
|
|
101
|
+
zero_tests_observed: bool = False # runner started but collected/ran 0 tests
|
|
102
|
+
config_error: bool = False # runner usage/config error (e.g. pytest exit 4)
|
|
103
|
+
report_present: bool | None = None # None ⇒ no report expected / not yet checked
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def classify_verify_outcome(
|
|
107
|
+
outcome: VerifyOutcome, plan: VerifyRunPlan | None = None
|
|
108
|
+
) -> VerifyClass:
|
|
109
|
+
"""Map an observed verify outcome to a semantic class (pure, anti-false-green).
|
|
110
|
+
|
|
111
|
+
Not-green verdicts are checked BEFORE the exit-0 PASS so a command that exits
|
|
112
|
+
0 while observing nothing (zero tests, missing required report) can never be
|
|
113
|
+
classified green.
|
|
114
|
+
"""
|
|
115
|
+
if not outcome.spawned:
|
|
116
|
+
return VerifyClass.TOOL_MISSING
|
|
117
|
+
if outcome.timed_out:
|
|
118
|
+
return VerifyClass.FAIL # a timeout is a failure, never green
|
|
119
|
+
if outcome.config_error:
|
|
120
|
+
return VerifyClass.CONFIG_ERROR
|
|
121
|
+
if outcome.zero_tests_observed:
|
|
122
|
+
return VerifyClass.ZERO_TESTS
|
|
123
|
+
if outcome.returncode == 0:
|
|
124
|
+
if plan is not None and plan.report_required and outcome.report_present is False:
|
|
125
|
+
return VerifyClass.REPORT_MISSING
|
|
126
|
+
return VerifyClass.PASS
|
|
127
|
+
return VerifyClass.FAIL
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
@dataclass(frozen=True)
|
|
131
|
+
class ShadowComparison:
|
|
132
|
+
"""Result of comparing the contract verify plan against the legacy command."""
|
|
133
|
+
|
|
134
|
+
language_id: str
|
|
135
|
+
legacy_command: str
|
|
136
|
+
profile_command: str | None
|
|
137
|
+
commands_identical: bool
|
|
138
|
+
legacy_class: VerifyClass
|
|
139
|
+
profile_class: VerifyClass
|
|
140
|
+
classes_match: bool
|
|
141
|
+
note: str = ""
|
|
142
|
+
|
|
143
|
+
def to_trace(self) -> dict[str, object]:
|
|
144
|
+
return {
|
|
145
|
+
"shadow_language_id": self.language_id,
|
|
146
|
+
"legacy_command": self.legacy_command,
|
|
147
|
+
"profile_command": self.profile_command,
|
|
148
|
+
"commands_identical": self.commands_identical,
|
|
149
|
+
"legacy_verify_class": self.legacy_class.value,
|
|
150
|
+
"profile_verify_class": self.profile_class.value,
|
|
151
|
+
"verify_classes_match": self.classes_match,
|
|
152
|
+
"shadow_note": self.note,
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def shadow_compare(
|
|
157
|
+
contract: ResolvedLanguageContract,
|
|
158
|
+
*,
|
|
159
|
+
legacy_command: str,
|
|
160
|
+
legacy_outcome: VerifyOutcome,
|
|
161
|
+
) -> ShadowComparison | None:
|
|
162
|
+
"""Compare the contract verify plan to the legacy command for one run.
|
|
163
|
+
|
|
164
|
+
SHADOW ONLY — never changes behaviour. The legacy outcome's signals are
|
|
165
|
+
reused to classify what the profile plan WOULD report; divergence (or an
|
|
166
|
+
intentionally stricter profile, e.g. Go's ``-json`` report variant) is
|
|
167
|
+
recorded for review before the v2.69b switch.
|
|
168
|
+
"""
|
|
169
|
+
plan = build_verify_plan(contract)
|
|
170
|
+
if plan is None:
|
|
171
|
+
return None
|
|
172
|
+
legacy_class = classify_verify_outcome(legacy_outcome, plan=None)
|
|
173
|
+
profile_class = classify_verify_outcome(legacy_outcome, plan=plan)
|
|
174
|
+
identical = plan.command_str == legacy_command.strip()
|
|
175
|
+
note = ""
|
|
176
|
+
if not identical:
|
|
177
|
+
note = (
|
|
178
|
+
f"profile verify command differs from legacy "
|
|
179
|
+
f"(profile={plan.command_str!r} vs legacy={legacy_command!r})"
|
|
180
|
+
)
|
|
181
|
+
if plan.report_required:
|
|
182
|
+
note += "; profile is stricter (declares a required machine-readable report)"
|
|
183
|
+
return ShadowComparison(
|
|
184
|
+
language_id=contract.language_id,
|
|
185
|
+
legacy_command=legacy_command,
|
|
186
|
+
profile_command=plan.command_str,
|
|
187
|
+
commands_identical=identical,
|
|
188
|
+
legacy_class=legacy_class,
|
|
189
|
+
profile_class=profile_class,
|
|
190
|
+
classes_match=(legacy_class is profile_class),
|
|
191
|
+
note=note,
|
|
192
|
+
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|