codd-dev 2.52.0__tar.gz → 2.54.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.52.0 → codd_dev-2.54.0}/PKG-INFO +1 -1
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/__init__.py +1 -1
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/implement_oracle.py +34 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/vb_marker_authenticity.py +356 -16
- {codd_dev-2.52.0 → codd_dev-2.54.0}/pyproject.toml +1 -1
- {codd_dev-2.52.0 → codd_dev-2.54.0}/.gitignore +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/LICENSE +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/README.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/__main__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/assembler.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/bridge.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/cli.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/clustering.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/confidence.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/config.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/config_schema.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/contracts.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/contracts_registry/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/contracts_registry/__main__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/contracts_registry/certify.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/contracts_registry/generate_matrix.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/contracts_registry/registry.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/coverage_execution_coherence.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/defaults.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/defaults.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployer.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/design_md.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/discovery.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/drift.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/e2e_harness.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/env_refs.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/extractor.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fixer.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/generator.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/graph.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/greenfield/pipeline.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/implement_oracle_scope.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/implementer.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/inheritance.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/lexicon.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/measure.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/planner.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/policy.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/project_types.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/propagate.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/propagator.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/reference_resolution.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/registry.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/auto_scope_guard.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/history.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/require.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/restore.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/scanner.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/synth.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/test_detection.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/traceability.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/validator.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/vb_rerun_scope.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/verifiable_behavior_audit.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/watch/events.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd/wiring.py +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/dogfood/README.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/examples/README.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.52.0 → codd_dev-2.54.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.54.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
|
|
@@ -1148,6 +1148,7 @@ class _PyFirstPartyIndex:
|
|
|
1148
1148
|
#: the namespace root matches the index keys, not the raw project path).
|
|
1149
1149
|
self.rel_to_key: dict[str, str] = {}
|
|
1150
1150
|
self._provided_cache: dict[str, Any] = {}
|
|
1151
|
+
self._module_getattr_cache: dict[str, bool] = {}
|
|
1151
1152
|
|
|
1152
1153
|
def register(self, key: str, info: _PyModuleInfo) -> None:
|
|
1153
1154
|
self.modules.setdefault(key, info)
|
|
@@ -1167,6 +1168,31 @@ class _PyFirstPartyIndex:
|
|
|
1167
1168
|
"""A dotted key resolves when it is a known module OR a known package."""
|
|
1168
1169
|
return self.has_module(key) or self.has_package(key)
|
|
1169
1170
|
|
|
1171
|
+
def has_module_getattr(self, key: str) -> bool:
|
|
1172
|
+
"""True when the module file declares a MODULE-LEVEL ``__getattr__`` (PEP 562).
|
|
1173
|
+
|
|
1174
|
+
A module-level ``def __getattr__(name)`` provides attributes dynamically, so
|
|
1175
|
+
``from mod import X`` for such a module is statically UNDECIDABLE — flagging
|
|
1176
|
+
X missing would be a false-RED. Kept SEPARATE from :meth:`provided_names`
|
|
1177
|
+
(a star/re-export of such a module must NOT become UNKNOWN — that would widen
|
|
1178
|
+
the false-GREEN surface); only a direct named import from the bearer is
|
|
1179
|
+
excused, at the call site. Module-level only (a nested / class ``__getattr__``
|
|
1180
|
+
is not PEP 562). ``__dir__`` does NOT count (it controls ``dir()`` display,
|
|
1181
|
+
not attribute lookup).
|
|
1182
|
+
"""
|
|
1183
|
+
cached = self._module_getattr_cache.get(key)
|
|
1184
|
+
if cached is not None:
|
|
1185
|
+
return cached
|
|
1186
|
+
info = self.modules.get(key)
|
|
1187
|
+
result = False
|
|
1188
|
+
if info is not None and info.tree is not None:
|
|
1189
|
+
result = any(
|
|
1190
|
+
isinstance(node, ast.FunctionDef) and node.name == "__getattr__"
|
|
1191
|
+
for node in _module_level_statements(info.tree)
|
|
1192
|
+
)
|
|
1193
|
+
self._module_getattr_cache[key] = result
|
|
1194
|
+
return result
|
|
1195
|
+
|
|
1170
1196
|
def is_first_party_prefix(self, key: str) -> bool:
|
|
1171
1197
|
"""True when ``key`` is, or is under, a known first-party top-level name."""
|
|
1172
1198
|
head = key.split(".", 1)[0]
|
|
@@ -1679,6 +1705,14 @@ def _resolve_python_import_demand(
|
|
|
1679
1705
|
submodule_key = f"{module_key}.{demand.symbol}"
|
|
1680
1706
|
if index.resolves(submodule_key):
|
|
1681
1707
|
return "ok", module_key, "" # ``from pkg import submodule``
|
|
1708
|
+
if index.has_module_getattr(module_key):
|
|
1709
|
+
# PEP 562: the target module declares a module-level ``__getattr__`` that
|
|
1710
|
+
# provides attributes dynamically, so this symbol's presence is statically
|
|
1711
|
+
# UNDECIDABLE — do not flag it missing (false-RED avoidance). Module
|
|
1712
|
+
# resolution above is still required (a missing module stays module_missing),
|
|
1713
|
+
# and re-exports do NOT inherit this (provided_names stays precise): only a
|
|
1714
|
+
# DIRECT named import from the ``__getattr__`` bearer is excused.
|
|
1715
|
+
return "ok", module_key, ""
|
|
1682
1716
|
provided = index.provided_names(module_key)
|
|
1683
1717
|
if provided is _PY_PROVIDES_UNKNOWN:
|
|
1684
1718
|
return "ok", module_key, "" # provider undecidable → never flag (anti-false-RED)
|
|
@@ -91,7 +91,9 @@ evidence (the design's "unresolved helper = fail" rule).
|
|
|
91
91
|
from __future__ import annotations
|
|
92
92
|
|
|
93
93
|
import ast
|
|
94
|
+
import builtins
|
|
94
95
|
import re
|
|
96
|
+
import sys
|
|
95
97
|
import textwrap
|
|
96
98
|
from dataclasses import dataclass, field
|
|
97
99
|
from pathlib import Path
|
|
@@ -448,25 +450,50 @@ def _helper_evidence(
|
|
|
448
450
|
return AssertionEvidence(ok=False, reason="no_assertion", detail="resolver error")
|
|
449
451
|
|
|
450
452
|
|
|
451
|
-
def _direct_evidence(
|
|
453
|
+
def _direct_evidence(
|
|
454
|
+
adapter: TestBlockProfile,
|
|
455
|
+
block: TestBlock,
|
|
456
|
+
*,
|
|
457
|
+
importer_text: str = "",
|
|
458
|
+
importer_rel: str = "",
|
|
459
|
+
project_root: Path | None = None,
|
|
460
|
+
config: dict[str, Any] | None = None,
|
|
461
|
+
profile: Any = None,
|
|
462
|
+
) -> AssertionEvidence:
|
|
452
463
|
"""Resolve a block's DIRECT (in-body) primitive-assertion evidence.
|
|
453
464
|
|
|
454
465
|
The built-in Python/TypeScript adapters expose
|
|
455
466
|
``resolve_direct_assertion_evidence`` which decides whether the direct
|
|
456
|
-
primitive assertion is constant-only (``constant_direct`` ⇒ not ok)
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
467
|
+
primitive assertion is constant-only (``constant_direct`` ⇒ not ok),
|
|
468
|
+
library-only (``library_only_direct`` ⇒ not ok), or references a real name
|
|
469
|
+
(``direct`` ⇒ ok). The test-file context (``importer_text`` / ``project_root``
|
|
470
|
+
/ ``profile``) is forwarded for origin classification. An EXTERNAL adapter that
|
|
471
|
+
predates the context kwargs (accepts only ``(block)``) is called the old way
|
|
472
|
+
(TypeError fallback); one that predates the hook entirely keeps the pre-existing
|
|
473
|
+
behavior (a raw primitive is credited as ``direct``) — only the built-in stacks
|
|
474
|
+
are tightened here.
|
|
461
475
|
"""
|
|
462
476
|
|
|
463
477
|
resolver = getattr(adapter, "resolve_direct_assertion_evidence", None)
|
|
464
|
-
if callable(resolver):
|
|
478
|
+
if not callable(resolver):
|
|
479
|
+
return AssertionEvidence(ok=True, reason="direct")
|
|
480
|
+
try:
|
|
481
|
+
return resolver(
|
|
482
|
+
block,
|
|
483
|
+
importer_text=importer_text,
|
|
484
|
+
importer_rel=importer_rel,
|
|
485
|
+
project_root=project_root,
|
|
486
|
+
config=config,
|
|
487
|
+
profile=profile,
|
|
488
|
+
)
|
|
489
|
+
except TypeError:
|
|
490
|
+
# Older adapter signature: resolve_direct_assertion_evidence(block) only.
|
|
465
491
|
try:
|
|
466
492
|
return resolver(block)
|
|
467
493
|
except Exception: # noqa: BLE001 — a resolver that throws ⇒ keep credit (back-compat).
|
|
468
494
|
return AssertionEvidence(ok=True, reason="direct")
|
|
469
|
-
|
|
495
|
+
except Exception: # noqa: BLE001 — a resolver that throws ⇒ keep credit (back-compat).
|
|
496
|
+
return AssertionEvidence(ok=True, reason="direct")
|
|
470
497
|
|
|
471
498
|
|
|
472
499
|
def build_authenticity_report(
|
|
@@ -653,7 +680,15 @@ def build_authenticity_report(
|
|
|
653
680
|
# the same block may ALSO call a credible helper, so we fall back to
|
|
654
681
|
# the helper resolver and only RED when BOTH paths fail.
|
|
655
682
|
if block.has_assertion:
|
|
656
|
-
evidence = _direct_evidence(
|
|
683
|
+
evidence = _direct_evidence(
|
|
684
|
+
adapter,
|
|
685
|
+
block,
|
|
686
|
+
importer_text=text,
|
|
687
|
+
importer_rel=rel,
|
|
688
|
+
project_root=project_root,
|
|
689
|
+
config=config,
|
|
690
|
+
profile=profile,
|
|
691
|
+
)
|
|
657
692
|
if not evidence.ok:
|
|
658
693
|
helper_evidence = _helper_evidence(
|
|
659
694
|
adapter,
|
|
@@ -726,6 +761,15 @@ def _no_assertion_message(
|
|
|
726
761
|
"a constant assertion proves nothing. Assert against an observed result, "
|
|
727
762
|
"exception, state, or output that would FAIL if the behavior were broken."
|
|
728
763
|
)
|
|
764
|
+
elif evidence.reason == "library_only_direct":
|
|
765
|
+
detail = f" ({evidence.detail})" if evidence.detail else ""
|
|
766
|
+
why = (
|
|
767
|
+
" whose direct primitive assertion observes ONLY library/builtin behavior"
|
|
768
|
+
f"{detail} (`math.sqrt`, `os.path`, a third-party package, `sorted`, etc.) "
|
|
769
|
+
"and never references a first-party result, local observation, fixture, or "
|
|
770
|
+
"unknown runtime value — a library property test does not prove the VB. Call "
|
|
771
|
+
"the SUT and assert against ITS result, state, or raised error."
|
|
772
|
+
)
|
|
729
773
|
elif evidence.reason == "unresolved_helper":
|
|
730
774
|
why = (
|
|
731
775
|
" whose only assertion is delegated to a helper that could not be resolved "
|
|
@@ -1001,7 +1045,257 @@ def _is_py_primitive_assert_node(node: ast.AST) -> bool:
|
|
|
1001
1045
|
return False
|
|
1002
1046
|
|
|
1003
1047
|
|
|
1004
|
-
|
|
1048
|
+
#: Python standard-library top-level module names (PEP-official frozenset; includes
|
|
1049
|
+
#: platform-specific and disabled modules). Used to POSITIVELY classify a stdlib
|
|
1050
|
+
#: import as a library reference. Absence here never forces a verdict (fail-open).
|
|
1051
|
+
_PY_STDLIB_NAMES = frozenset(getattr(sys, "stdlib_module_names", frozenset()))
|
|
1052
|
+
#: Python runtime builtins (``sorted``, ``abs``, ``round``, …). Used to classify a
|
|
1053
|
+
#: builtin-only assertion as a library reference. NOTE: builtins are classified
|
|
1054
|
+
#: here, NOT added to ``_PY_DIRECT_IGNORED_NAMES`` — a first-party import that
|
|
1055
|
+
#: SHADOWS a builtin (``from app.sorting import sorted``) must still credit.
|
|
1056
|
+
_PY_BUILTIN_NAMES = frozenset(dir(builtins))
|
|
1057
|
+
|
|
1058
|
+
|
|
1059
|
+
@dataclass(frozen=True)
|
|
1060
|
+
class _PyOriginContext:
|
|
1061
|
+
"""Per-test-block context for classifying assertion reference names by ORIGIN.
|
|
1062
|
+
|
|
1063
|
+
The contract is ``direct.library_only_reference.v1`` (GPT-5.5 Pro design,
|
|
1064
|
+
dogfood/gpt_authenticity_sut_ref_design.md): a direct primitive assertion is
|
|
1065
|
+
not credible VB evidence when EVERY non-framework reference is POSITIVELY a
|
|
1066
|
+
library/runtime/builtin reference and none is first-party / local / unknown.
|
|
1067
|
+
``unknown`` always credits — "not provably first-party" must NEVER be treated
|
|
1068
|
+
as third-party (that would false-RED src-layout / editable / path-alias code).
|
|
1069
|
+
"""
|
|
1070
|
+
|
|
1071
|
+
imports: dict[str, tuple[str, bool]] # bound-name -> (dotted module, is_relative)
|
|
1072
|
+
local_names: frozenset[str] # body assignment targets + this block's params
|
|
1073
|
+
package_name: str | None
|
|
1074
|
+
source_roots: tuple[Path, ...]
|
|
1075
|
+
third_party: frozenset[str] # normalized manifest dependency top-names
|
|
1076
|
+
|
|
1077
|
+
|
|
1078
|
+
def _python_file_import_table(text: str) -> dict[str, tuple[str, bool]]:
|
|
1079
|
+
"""Map each imported BOUND NAME to ``(dotted module, is_relative)``.
|
|
1080
|
+
|
|
1081
|
+
``import a.b`` binds ``a``; ``import a.b as x`` binds ``x``; ``from a.b import c``
|
|
1082
|
+
binds ``c``; ``from .m import c`` is relative (within the SUT package). Star
|
|
1083
|
+
imports bind no specific name (their names stay UNKNOWN ⇒ credit). Parse
|
|
1084
|
+
failure ⇒ empty table (fail-open). Walks the whole tree so function-level
|
|
1085
|
+
imports are seen too.
|
|
1086
|
+
"""
|
|
1087
|
+
|
|
1088
|
+
table: dict[str, tuple[str, bool]] = {}
|
|
1089
|
+
try:
|
|
1090
|
+
tree = ast.parse(text)
|
|
1091
|
+
except (SyntaxError, ValueError):
|
|
1092
|
+
return table
|
|
1093
|
+
for node in ast.walk(tree):
|
|
1094
|
+
if isinstance(node, ast.Import):
|
|
1095
|
+
for alias in node.names:
|
|
1096
|
+
bound = alias.asname or alias.name.split(".")[0]
|
|
1097
|
+
table[bound] = (alias.name, False)
|
|
1098
|
+
elif isinstance(node, ast.ImportFrom):
|
|
1099
|
+
is_relative = (node.level or 0) > 0
|
|
1100
|
+
module = node.module or ""
|
|
1101
|
+
for alias in node.names:
|
|
1102
|
+
if alias.name == "*":
|
|
1103
|
+
continue
|
|
1104
|
+
bound = alias.asname or alias.name
|
|
1105
|
+
table[bound] = (module, is_relative)
|
|
1106
|
+
return table
|
|
1107
|
+
|
|
1108
|
+
|
|
1109
|
+
def _python_function_param_names(text: str, func_name: str) -> set[str]:
|
|
1110
|
+
"""Parameter names of the top-level ``def func_name`` (incl. fixtures) — or {}."""
|
|
1111
|
+
|
|
1112
|
+
try:
|
|
1113
|
+
tree = ast.parse(text)
|
|
1114
|
+
except (SyntaxError, ValueError):
|
|
1115
|
+
return set()
|
|
1116
|
+
for node in getattr(tree, "body", []):
|
|
1117
|
+
if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)) and node.name == func_name:
|
|
1118
|
+
a = node.args
|
|
1119
|
+
names: set[str] = set()
|
|
1120
|
+
for arg in (*a.posonlyargs, *a.args, *a.kwonlyargs):
|
|
1121
|
+
names.add(arg.arg)
|
|
1122
|
+
if a.vararg:
|
|
1123
|
+
names.add(a.vararg.arg)
|
|
1124
|
+
if a.kwarg:
|
|
1125
|
+
names.add(a.kwarg.arg)
|
|
1126
|
+
return names
|
|
1127
|
+
return set()
|
|
1128
|
+
|
|
1129
|
+
|
|
1130
|
+
def _target_names(target: ast.AST) -> set[str]:
|
|
1131
|
+
"""Bound names in an assignment-target node (Name / Tuple / List / Starred)."""
|
|
1132
|
+
|
|
1133
|
+
names: set[str] = set()
|
|
1134
|
+
if isinstance(target, ast.Name):
|
|
1135
|
+
names.add(target.id)
|
|
1136
|
+
elif isinstance(target, (ast.Tuple, ast.List)):
|
|
1137
|
+
for elt in target.elts:
|
|
1138
|
+
names |= _target_names(elt)
|
|
1139
|
+
elif isinstance(target, ast.Starred):
|
|
1140
|
+
names |= _target_names(target.value)
|
|
1141
|
+
return names
|
|
1142
|
+
|
|
1143
|
+
|
|
1144
|
+
def _python_body_assigned_names(body_text: str) -> set[str]:
|
|
1145
|
+
"""Names BOUND inside a test body: assignments, with-as, for-targets, walrus,
|
|
1146
|
+
comprehension targets. These are LOCAL observations (a local may hold a SUT
|
|
1147
|
+
result; by policy we do NOT taint-track, so a local always credits)."""
|
|
1148
|
+
|
|
1149
|
+
names: set[str] = set()
|
|
1150
|
+
try:
|
|
1151
|
+
tree = ast.parse(textwrap.dedent(body_text))
|
|
1152
|
+
except (SyntaxError, ValueError):
|
|
1153
|
+
return names
|
|
1154
|
+
for node in ast.walk(tree):
|
|
1155
|
+
if isinstance(node, ast.Assign):
|
|
1156
|
+
for t in node.targets:
|
|
1157
|
+
names |= _target_names(t)
|
|
1158
|
+
elif isinstance(node, (ast.AnnAssign, ast.AugAssign)):
|
|
1159
|
+
names |= _target_names(node.target)
|
|
1160
|
+
elif isinstance(node, ast.NamedExpr):
|
|
1161
|
+
names |= _target_names(node.target)
|
|
1162
|
+
elif isinstance(node, (ast.For, ast.AsyncFor)):
|
|
1163
|
+
names |= _target_names(node.target)
|
|
1164
|
+
elif isinstance(node, (ast.With, ast.AsyncWith)):
|
|
1165
|
+
for item in node.items:
|
|
1166
|
+
if item.optional_vars is not None:
|
|
1167
|
+
names |= _target_names(item.optional_vars)
|
|
1168
|
+
elif isinstance(node, (ast.ListComp, ast.SetComp, ast.DictComp, ast.GeneratorExp)):
|
|
1169
|
+
for gen in node.generators:
|
|
1170
|
+
names |= _target_names(gen.target)
|
|
1171
|
+
return names
|
|
1172
|
+
|
|
1173
|
+
|
|
1174
|
+
def _python_manifest_top_dependencies(project_root: Path | None) -> frozenset[str]:
|
|
1175
|
+
"""Declared third-party dependency names from ``pyproject.toml`` (PEP 621 +
|
|
1176
|
+
poetry), normalized for top-module matching. Empty when absent/unparseable —
|
|
1177
|
+
an unconfirmable third-party import then stays UNKNOWN (credit), per design."""
|
|
1178
|
+
|
|
1179
|
+
if project_root is None:
|
|
1180
|
+
return frozenset()
|
|
1181
|
+
path = project_root / "pyproject.toml"
|
|
1182
|
+
if not path.exists():
|
|
1183
|
+
return frozenset()
|
|
1184
|
+
try:
|
|
1185
|
+
import tomllib
|
|
1186
|
+
|
|
1187
|
+
data = tomllib.loads(path.read_text(encoding="utf-8"))
|
|
1188
|
+
except Exception: # noqa: BLE001 — no manifest signal ⇒ fail-open (empty set).
|
|
1189
|
+
return frozenset()
|
|
1190
|
+
reqs: list[str] = []
|
|
1191
|
+
project = data.get("project", {})
|
|
1192
|
+
if isinstance(project, dict):
|
|
1193
|
+
deps = project.get("dependencies", [])
|
|
1194
|
+
if isinstance(deps, list):
|
|
1195
|
+
reqs.extend(d for d in deps if isinstance(d, str))
|
|
1196
|
+
optional = project.get("optional-dependencies", {})
|
|
1197
|
+
if isinstance(optional, dict):
|
|
1198
|
+
for group in optional.values():
|
|
1199
|
+
if isinstance(group, list):
|
|
1200
|
+
reqs.extend(d for d in group if isinstance(d, str))
|
|
1201
|
+
poetry = data.get("tool", {}).get("poetry", {}) if isinstance(data.get("tool"), dict) else {}
|
|
1202
|
+
if isinstance(poetry, dict):
|
|
1203
|
+
pdeps = poetry.get("dependencies", {})
|
|
1204
|
+
if isinstance(pdeps, dict):
|
|
1205
|
+
reqs.extend(k for k in pdeps if isinstance(k, str) and k.lower() != "python")
|
|
1206
|
+
names: set[str] = set()
|
|
1207
|
+
for req in reqs:
|
|
1208
|
+
m = re.match(r"\s*([A-Za-z0-9._-]+)", req)
|
|
1209
|
+
if not m:
|
|
1210
|
+
continue
|
|
1211
|
+
dist = m.group(1).lower()
|
|
1212
|
+
names.add(dist)
|
|
1213
|
+
names.add(dist.replace("-", "_"))
|
|
1214
|
+
return frozenset(names)
|
|
1215
|
+
|
|
1216
|
+
|
|
1217
|
+
def _module_resolves_first_party(module: str, top: str, source_roots: tuple[Path, ...]) -> bool:
|
|
1218
|
+
"""True when ``module`` (or its top package) resolves to a source file under a
|
|
1219
|
+
configured source root — covers flat AND src/<package> layouts."""
|
|
1220
|
+
|
|
1221
|
+
rel = module.replace(".", "/") if module else ""
|
|
1222
|
+
for root in source_roots:
|
|
1223
|
+
if rel and ((root / f"{rel}.py").exists() or (root / rel / "__init__.py").exists()):
|
|
1224
|
+
return True
|
|
1225
|
+
if top and (
|
|
1226
|
+
(root / f"{top}.py").exists()
|
|
1227
|
+
or (root / top / "__init__.py").exists()
|
|
1228
|
+
or (root / top).is_dir()
|
|
1229
|
+
):
|
|
1230
|
+
return True
|
|
1231
|
+
return False
|
|
1232
|
+
|
|
1233
|
+
|
|
1234
|
+
def _classify_py_name(name: str, ctx: _PyOriginContext) -> str:
|
|
1235
|
+
"""Classify one assertion reference name as ``"library"`` or ``"credit"``.
|
|
1236
|
+
|
|
1237
|
+
Order (GPT design): local/param shadowing ▸ first-party import ▸ stdlib ▸
|
|
1238
|
+
confirmed third-party ▸ builtin ▸ UNKNOWN. Only stdlib / confirmed-third-party
|
|
1239
|
+
/ builtin are ``"library"``; everything else (incl. UNKNOWN) credits."""
|
|
1240
|
+
|
|
1241
|
+
if name in ctx.local_names:
|
|
1242
|
+
return "credit" # LOCAL_OR_PARAM
|
|
1243
|
+
entry = ctx.imports.get(name)
|
|
1244
|
+
if entry is not None:
|
|
1245
|
+
module, is_relative = entry
|
|
1246
|
+
if is_relative:
|
|
1247
|
+
return "credit" # relative import = within the SUT package
|
|
1248
|
+
top = module.split(".")[0] if module else ""
|
|
1249
|
+
if not top:
|
|
1250
|
+
return "credit"
|
|
1251
|
+
if ctx.package_name and top == ctx.package_name:
|
|
1252
|
+
return "credit" # FIRST_PARTY by package name
|
|
1253
|
+
if _module_resolves_first_party(module, top, ctx.source_roots):
|
|
1254
|
+
return "credit" # FIRST_PARTY by source-file existence
|
|
1255
|
+
if top in _PY_STDLIB_NAMES:
|
|
1256
|
+
return "library" # stdlib
|
|
1257
|
+
if top.lower() in ctx.third_party:
|
|
1258
|
+
return "library" # confirmed external dependency
|
|
1259
|
+
return "credit" # imported but origin unconfirmable ⇒ UNKNOWN ⇒ fail-open
|
|
1260
|
+
if name in _PY_BUILTIN_NAMES:
|
|
1261
|
+
return "library" # builtin (only when NOT shadowed by a first-party import/local)
|
|
1262
|
+
return "credit" # param / fixture / free name / star-imported ⇒ UNKNOWN ⇒ fail-open
|
|
1263
|
+
|
|
1264
|
+
|
|
1265
|
+
def _build_py_origin_context(
|
|
1266
|
+
block: TestBlock,
|
|
1267
|
+
*,
|
|
1268
|
+
importer_text: str,
|
|
1269
|
+
project_root: Path | None,
|
|
1270
|
+
profile: Any,
|
|
1271
|
+
) -> _PyOriginContext:
|
|
1272
|
+
"""Assemble the per-block origin-classification context from the test file."""
|
|
1273
|
+
|
|
1274
|
+
package_name = getattr(profile, "package_name", None) if profile is not None else None
|
|
1275
|
+
source_roots: list[Path] = []
|
|
1276
|
+
if project_root is not None:
|
|
1277
|
+
source_root = getattr(profile, "source_root", None) if profile is not None else None
|
|
1278
|
+
if source_root:
|
|
1279
|
+
source_roots.append(project_root / source_root)
|
|
1280
|
+
package_root = getattr(profile, "package_root", None) if profile is not None else None
|
|
1281
|
+
if package_root:
|
|
1282
|
+
source_roots.append((project_root / package_root).parent)
|
|
1283
|
+
source_roots.append(project_root)
|
|
1284
|
+
local_names = _python_body_assigned_names(block.body_text)
|
|
1285
|
+
if importer_text and block.label:
|
|
1286
|
+
local_names |= _python_function_param_names(importer_text, block.label)
|
|
1287
|
+
return _PyOriginContext(
|
|
1288
|
+
imports=_python_file_import_table(importer_text) if importer_text else {},
|
|
1289
|
+
local_names=frozenset(local_names),
|
|
1290
|
+
package_name=package_name,
|
|
1291
|
+
source_roots=tuple(dict.fromkeys(source_roots)),
|
|
1292
|
+
third_party=_python_manifest_top_dependencies(project_root),
|
|
1293
|
+
)
|
|
1294
|
+
|
|
1295
|
+
|
|
1296
|
+
def _python_direct_assertion_evidence(
|
|
1297
|
+
body_text: str, *, origin_ctx: _PyOriginContext | None = None
|
|
1298
|
+
) -> AssertionEvidence:
|
|
1005
1299
|
"""AST verdict: does ``body_text`` carry a NON-constant direct primitive assertion?
|
|
1006
1300
|
|
|
1007
1301
|
For each primitive-assert node, collect every ``ast.Name`` id inside it and
|
|
@@ -1011,6 +1305,15 @@ def _python_direct_assertion_evidence(body_text: str) -> AssertionEvidence:
|
|
|
1011
1305
|
(not ok). Falls back to the lexical scanner on a syntax error so an
|
|
1012
1306
|
un-parseable body never false-REDs here (it degrades to the line-based path,
|
|
1013
1307
|
which itself fails OPEN per window).
|
|
1308
|
+
|
|
1309
|
+
When an ``origin_ctx`` is supplied (the gate path), each remaining name is
|
|
1310
|
+
classified by ORIGIN (contract ``direct.library_only_reference.v1``): an
|
|
1311
|
+
assertion whose references are ALL positively library/builtin (``math.sqrt``,
|
|
1312
|
+
``os.path``, a confirmed third-party dep, ``sorted``) and include no
|
|
1313
|
+
first-party / local / unknown reference proves a LIBRARY, not the SUT ⇒
|
|
1314
|
+
``library_only_direct`` (not ok). Without a context, classification is skipped
|
|
1315
|
+
(any non-ignored name credits, exactly as before) — "cannot classify" never
|
|
1316
|
+
false-REDs.
|
|
1014
1317
|
"""
|
|
1015
1318
|
|
|
1016
1319
|
try:
|
|
@@ -1023,13 +1326,26 @@ def _python_direct_assertion_evidence(body_text: str) -> AssertionEvidence:
|
|
|
1023
1326
|
)
|
|
1024
1327
|
|
|
1025
1328
|
saw_primitive = False
|
|
1329
|
+
saw_library_only = False
|
|
1330
|
+
library_detail = ""
|
|
1026
1331
|
for node in ast.walk(tree):
|
|
1027
1332
|
if not _is_py_primitive_assert_node(node):
|
|
1028
1333
|
continue
|
|
1029
1334
|
saw_primitive = True
|
|
1030
|
-
ids = {n.id for n in ast.walk(node) if isinstance(n, ast.Name)}
|
|
1031
|
-
if ids
|
|
1335
|
+
ids = {n.id for n in ast.walk(node) if isinstance(n, ast.Name)} - _PY_DIRECT_IGNORED_NAMES
|
|
1336
|
+
if not ids:
|
|
1337
|
+
continue # constant-only assertion (no observed name)
|
|
1338
|
+
if origin_ctx is None:
|
|
1339
|
+
# No classification context (legacy / direct unit call): any non-ignored
|
|
1340
|
+
# name credits, exactly as before.
|
|
1341
|
+
return AssertionEvidence(ok=True, reason="direct")
|
|
1342
|
+
if any(_classify_py_name(name, origin_ctx) != "library" for name in ids):
|
|
1343
|
+
# A first-party / local / unknown reference ⇒ a real observation.
|
|
1032
1344
|
return AssertionEvidence(ok=True, reason="direct")
|
|
1345
|
+
# Every reference is POSITIVELY a library/builtin ⇒ a library-only proof.
|
|
1346
|
+
saw_library_only = True
|
|
1347
|
+
if not library_detail:
|
|
1348
|
+
library_detail = ", ".join(sorted(ids))
|
|
1033
1349
|
|
|
1034
1350
|
if not saw_primitive:
|
|
1035
1351
|
# The raw regex (``has_assertion``) matched but the AST recognized no
|
|
@@ -1037,6 +1353,8 @@ def _python_direct_assertion_evidence(body_text: str) -> AssertionEvidence:
|
|
|
1037
1353
|
# the AST walker does not classify). Fail OPEN — keep the pre-existing
|
|
1038
1354
|
# ``direct`` credit rather than inventing a false-RED.
|
|
1039
1355
|
return AssertionEvidence(ok=True, reason="direct")
|
|
1356
|
+
if saw_library_only:
|
|
1357
|
+
return AssertionEvidence(ok=False, reason="library_only_direct", detail=library_detail)
|
|
1040
1358
|
return AssertionEvidence(ok=False, reason="constant_direct")
|
|
1041
1359
|
|
|
1042
1360
|
|
|
@@ -1375,14 +1693,36 @@ class PythonTestBlockProfile:
|
|
|
1375
1693
|
block, importer_text=importer_text, importer_rel=importer_rel, project_root=project_root
|
|
1376
1694
|
)
|
|
1377
1695
|
|
|
1378
|
-
def resolve_direct_assertion_evidence(
|
|
1696
|
+
def resolve_direct_assertion_evidence(
|
|
1697
|
+
self,
|
|
1698
|
+
block: TestBlock,
|
|
1699
|
+
*,
|
|
1700
|
+
importer_text: str = "",
|
|
1701
|
+
importer_rel: str = "",
|
|
1702
|
+
project_root: Path | None = None,
|
|
1703
|
+
config: dict[str, Any] | None = None,
|
|
1704
|
+
profile: Any = None,
|
|
1705
|
+
) -> AssertionEvidence:
|
|
1379
1706
|
"""Whether the block's DIRECT primitive assertion references a real name.
|
|
1380
1707
|
|
|
1381
|
-
AST-based
|
|
1382
|
-
|
|
1708
|
+
AST-based: ``constant_direct`` when the assertion is constant-only, and —
|
|
1709
|
+
when the gate supplies the test-file context (``importer_text`` + ``profile``
|
|
1710
|
+
/ ``project_root``) — ``library_only_direct`` when every reference is a
|
|
1711
|
+
positively-classified library/builtin (contract
|
|
1712
|
+
``direct.library_only_reference.v1``). The context kwargs are OPTIONAL so a
|
|
1713
|
+
bare ``resolve_direct_assertion_evidence(block)`` (older callers / unit
|
|
1714
|
+
tests) still works and simply skips origin classification (fail-open).
|
|
1715
|
+
Called by the gate only when ``block.has_assertion`` is True.
|
|
1383
1716
|
"""
|
|
1384
1717
|
|
|
1385
|
-
|
|
1718
|
+
origin_ctx = (
|
|
1719
|
+
_build_py_origin_context(
|
|
1720
|
+
block, importer_text=importer_text, project_root=project_root, profile=profile
|
|
1721
|
+
)
|
|
1722
|
+
if (importer_text or project_root is not None or profile is not None)
|
|
1723
|
+
else None
|
|
1724
|
+
)
|
|
1725
|
+
return _python_direct_assertion_evidence(block.body_text, origin_ctx=origin_ctx)
|
|
1386
1726
|
|
|
1387
1727
|
|
|
1388
1728
|
# vitest/jest: it(...) / test(...) blocks; describe(...) groups. Skip via
|
|
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
|