codd-dev 2.53.0__tar.gz → 2.55.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.53.0 → codd_dev-2.55.0}/PKG-INFO +1 -1
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/__init__.py +1 -1
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/planner.py +65 -2
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/vb_marker_authenticity.py +356 -16
- {codd_dev-2.53.0 → codd_dev-2.55.0}/pyproject.toml +1 -1
- {codd_dev-2.53.0 → codd_dev-2.55.0}/.gitignore +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/LICENSE +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/README.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/__main__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/assembler.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/bridge.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/cli.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/clustering.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/confidence.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/config.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/config_schema.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/contracts.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/contracts_registry/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/contracts_registry/__main__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/contracts_registry/certify.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/contracts_registry/generate_matrix.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/contracts_registry/registry.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/coverage_execution_coherence.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/defaults.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/defaults.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployer.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/design_md.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/discovery.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/drift.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/e2e_harness.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/env_refs.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/extractor.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fixer.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/generator.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/graph.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/greenfield/pipeline.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/implement_oracle.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/implement_oracle_scope.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/implementer.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/inheritance.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/measure.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/policy.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/project_types.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/propagate.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/propagator.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/reference_resolution.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/registry.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/auto_scope_guard.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/history.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/require.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/restore.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/scanner.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/synth.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/test_detection.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/traceability.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/validator.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/vb_rerun_scope.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/verifiable_behavior_audit.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/watch/events.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd/wiring.py +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/dogfood/README.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/examples/README.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.53.0 → codd_dev-2.55.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.55.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
|
|
@@ -421,8 +421,9 @@ def plan_init(
|
|
|
421
421
|
prompt = _build_brownfield_plan_init_prompt(config, extracted_documents, capabilities)
|
|
422
422
|
|
|
423
423
|
prompt = generator_module._inject_lexicon(prompt, project_root)
|
|
424
|
-
|
|
425
|
-
|
|
424
|
+
wave_config = _invoke_and_parse_wave_config(
|
|
425
|
+
resolved_ai_command, prompt, max_retries=_plan_init_max_retries(config)
|
|
426
|
+
)
|
|
426
427
|
|
|
427
428
|
from codd.config import find_codd_dir
|
|
428
429
|
config["wave_config"] = wave_config
|
|
@@ -1119,6 +1120,68 @@ def _build_brownfield_plan_init_prompt(
|
|
|
1119
1120
|
return "\n".join(lines).rstrip() + "\n"
|
|
1120
1121
|
|
|
1121
1122
|
|
|
1123
|
+
#: Bounded re-invocations when the AI returns an unparseable wave_config.
|
|
1124
|
+
#: Overridable per project via `plan.init_retry.max_retries` in codd.yaml.
|
|
1125
|
+
DEFAULT_PLAN_INIT_MAX_RETRIES = 2
|
|
1126
|
+
|
|
1127
|
+
|
|
1128
|
+
def _plan_init_max_retries(config: dict[str, Any]) -> int:
|
|
1129
|
+
"""Read `plan.init_retry.max_retries` (default 2; 0 disables the retry loop)."""
|
|
1130
|
+
|
|
1131
|
+
plan_cfg = config.get("plan")
|
|
1132
|
+
if isinstance(plan_cfg, dict):
|
|
1133
|
+
retry_cfg = plan_cfg.get("init_retry")
|
|
1134
|
+
if isinstance(retry_cfg, dict):
|
|
1135
|
+
value = retry_cfg.get("max_retries")
|
|
1136
|
+
if isinstance(value, int) and value >= 0:
|
|
1137
|
+
return value
|
|
1138
|
+
return DEFAULT_PLAN_INIT_MAX_RETRIES
|
|
1139
|
+
|
|
1140
|
+
|
|
1141
|
+
def _append_wave_config_retry_feedback(prompt: str, error: str) -> str:
|
|
1142
|
+
"""Re-state the strict-YAML contract after a parse failure, for the next attempt."""
|
|
1143
|
+
|
|
1144
|
+
note = (
|
|
1145
|
+
"\n\n---\n"
|
|
1146
|
+
"YOUR PREVIOUS RESPONSE WAS REJECTED: it could not be parsed as valid wave_config "
|
|
1147
|
+
f"YAML ({error}). Output ONLY the wave_config mapping as STRICT, valid YAML — no "
|
|
1148
|
+
"prose, no Markdown fences, no arrows (`->`) or annotations. Every key must be "
|
|
1149
|
+
"followed by a colon and a value, and every list item must start with `- `. "
|
|
1150
|
+
"Re-emit the COMPLETE wave_config now."
|
|
1151
|
+
)
|
|
1152
|
+
return prompt + note
|
|
1153
|
+
|
|
1154
|
+
|
|
1155
|
+
def _invoke_and_parse_wave_config(
|
|
1156
|
+
ai_command: str, base_prompt: str, *, max_retries: int = DEFAULT_PLAN_INIT_MAX_RETRIES
|
|
1157
|
+
) -> dict[str, list[dict[str, Any]]]:
|
|
1158
|
+
"""Invoke the AI for a wave_config with a bounded parse-feedback retry loop.
|
|
1159
|
+
|
|
1160
|
+
A weaker model can emit syntactically malformed YAML (a stray ``-> `` arrow, a
|
|
1161
|
+
key with no colon) that no generic textual sanitization can repair. Hard-failing
|
|
1162
|
+
the whole plan stage on a single bad response violates the weakest-model
|
|
1163
|
+
principle — a strong model masks the gap a weak one exposes. So each retry feeds
|
|
1164
|
+
the parse error back to the model (mirrors generator._generate_document_body).
|
|
1165
|
+
Infra failures (``AI command failed``) propagate immediately; exhausted retries
|
|
1166
|
+
re-raise the last parse error unchanged (backward compat).
|
|
1167
|
+
"""
|
|
1168
|
+
|
|
1169
|
+
last_error: ValueError | None = None
|
|
1170
|
+
feedback: str | None = None
|
|
1171
|
+
for _attempt in range(max(0, max_retries) + 1):
|
|
1172
|
+
prompt = base_prompt if feedback is None else _append_wave_config_retry_feedback(base_prompt, feedback)
|
|
1173
|
+
try:
|
|
1174
|
+
raw = generator_module._invoke_ai_command(ai_command, prompt)
|
|
1175
|
+
return _parse_wave_config_output(raw)
|
|
1176
|
+
except ValueError as exc:
|
|
1177
|
+
if str(exc).startswith("AI command failed"):
|
|
1178
|
+
raise # infra failure: retrying the same broken command cannot help
|
|
1179
|
+
last_error = exc
|
|
1180
|
+
feedback = str(exc)
|
|
1181
|
+
assert last_error is not None
|
|
1182
|
+
raise last_error
|
|
1183
|
+
|
|
1184
|
+
|
|
1122
1185
|
def _parse_wave_config_output(raw_output: str) -> dict[str, list[dict[str, Any]]]:
|
|
1123
1186
|
"""Parse an AI command's stdout into a validated wave_config mapping.
|
|
1124
1187
|
|
|
@@ -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
|