codd-dev 2.49.0__tar.gz → 2.50.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.49.0 → codd_dev-2.50.0}/PKG-INFO +1 -1
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/__init__.py +1 -1
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/generator.py +128 -17
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/greenfield/pipeline.py +192 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/verifiable_behavior_audit.py +332 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/pyproject.toml +1 -1
- {codd_dev-2.49.0 → codd_dev-2.50.0}/.gitignore +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/LICENSE +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/README.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/__main__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/assembler.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/bridge.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/cli.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/clustering.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/confidence.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/config.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/config_schema.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/contracts.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/contracts_registry/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/contracts_registry/__main__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/contracts_registry/certify.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/contracts_registry/generate_matrix.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/contracts_registry/registry.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/coverage_execution_coherence.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/defaults.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/defaults.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployer.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/design_md.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/discovery.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/drift.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/e2e_harness.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/env_refs.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/extractor.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fixer.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/graph.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/implement_oracle.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/implement_oracle_scope.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/implementer.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/inheritance.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/lexicon.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/measure.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/planner.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/policy.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/project_types.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/propagate.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/propagator.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/reference_resolution.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/registry.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/auto_scope_guard.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/history.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/require.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/restore.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/scanner.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/synth.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/test_detection.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/traceability.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/validator.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/vb_marker_authenticity.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/vb_rerun_scope.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/watch/events.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd/wiring.py +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/dogfood/README.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/examples/README.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.49.0 → codd_dev-2.50.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.50.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
|
|
@@ -607,33 +607,144 @@ def generate_wave(
|
|
|
607
607
|
if output_path.exists() and not force:
|
|
608
608
|
results.append(GenerationResult(node_id=artifact.node_id, path=output_path, status="skipped"))
|
|
609
609
|
continue
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
output_path.parent.mkdir(parents=True, exist_ok=True)
|
|
613
|
-
combined_conventions = deepcopy(global_conventions) + deepcopy(artifact.conventions)
|
|
614
|
-
content = _render_document(
|
|
615
|
-
artifact=artifact,
|
|
616
|
-
global_conventions=global_conventions,
|
|
617
|
-
depended_by=depended_by_map.get(artifact.node_id, []),
|
|
618
|
-
body=_generate_document_body(
|
|
610
|
+
results.append(
|
|
611
|
+
_generate_one_artifact(
|
|
619
612
|
artifact=artifact,
|
|
620
|
-
dependency_documents=dependency_documents,
|
|
621
|
-
conventions=combined_conventions,
|
|
622
|
-
ai_command=resolved_ai_command,
|
|
623
613
|
project_root=project_root,
|
|
624
|
-
|
|
625
|
-
|
|
614
|
+
global_conventions=global_conventions,
|
|
615
|
+
depended_by_map=depended_by_map,
|
|
616
|
+
document_node_paths=document_node_paths,
|
|
617
|
+
resolved_ai_command=resolved_ai_command,
|
|
618
|
+
body_max_retries=body_max_retries,
|
|
626
619
|
capabilities=capabilities,
|
|
627
620
|
project_language=project_language,
|
|
628
|
-
|
|
621
|
+
feedback=feedback,
|
|
622
|
+
)
|
|
629
623
|
)
|
|
630
|
-
output_path.write_text(content, encoding="utf-8")
|
|
631
|
-
results.append(GenerationResult(node_id=artifact.node_id, path=output_path, status="generated"))
|
|
632
624
|
|
|
633
625
|
_enforce_vb_declaration_coherence(project_root, config, results)
|
|
634
626
|
return results
|
|
635
627
|
|
|
636
628
|
|
|
629
|
+
def _generate_one_artifact(
|
|
630
|
+
*,
|
|
631
|
+
artifact: WaveArtifact,
|
|
632
|
+
project_root: Path,
|
|
633
|
+
global_conventions: list[dict[str, Any]],
|
|
634
|
+
depended_by_map: dict[str, list[dict[str, Any]]],
|
|
635
|
+
document_node_paths: dict[str, Path],
|
|
636
|
+
resolved_ai_command: str,
|
|
637
|
+
body_max_retries: int,
|
|
638
|
+
capabilities: "ProjectCapabilities | None",
|
|
639
|
+
project_language: str | None,
|
|
640
|
+
feedback: str | None,
|
|
641
|
+
) -> GenerationResult:
|
|
642
|
+
"""Render ONE artifact's document and write it (overwriting any prior file).
|
|
643
|
+
|
|
644
|
+
The shared per-artifact rendering step used by both :func:`generate_wave`
|
|
645
|
+
(the wave loop) and :func:`regenerate_artifact` (the single-doc repair seam).
|
|
646
|
+
Always (re)writes the output; skip-if-exists is the wave loop's decision, not
|
|
647
|
+
this helper's, so a scoped repair can overwrite exactly one doc.
|
|
648
|
+
"""
|
|
649
|
+
|
|
650
|
+
output_path = project_root / artifact.output
|
|
651
|
+
dependency_documents = _load_dependency_documents(
|
|
652
|
+
project_root, artifact.depends_on, document_node_paths
|
|
653
|
+
)
|
|
654
|
+
output_path.parent.mkdir(parents=True, exist_ok=True)
|
|
655
|
+
combined_conventions = deepcopy(global_conventions) + deepcopy(artifact.conventions)
|
|
656
|
+
content = _render_document(
|
|
657
|
+
artifact=artifact,
|
|
658
|
+
global_conventions=global_conventions,
|
|
659
|
+
depended_by=depended_by_map.get(artifact.node_id, []),
|
|
660
|
+
body=_generate_document_body(
|
|
661
|
+
artifact=artifact,
|
|
662
|
+
dependency_documents=dependency_documents,
|
|
663
|
+
conventions=combined_conventions,
|
|
664
|
+
ai_command=resolved_ai_command,
|
|
665
|
+
project_root=project_root,
|
|
666
|
+
feedback=feedback,
|
|
667
|
+
max_retries=body_max_retries,
|
|
668
|
+
capabilities=capabilities,
|
|
669
|
+
project_language=project_language,
|
|
670
|
+
),
|
|
671
|
+
)
|
|
672
|
+
output_path.write_text(content, encoding="utf-8")
|
|
673
|
+
return GenerationResult(node_id=artifact.node_id, path=output_path, status="generated")
|
|
674
|
+
|
|
675
|
+
|
|
676
|
+
def regenerate_artifact(
|
|
677
|
+
project_root: Path,
|
|
678
|
+
*,
|
|
679
|
+
node_id: str | None = None,
|
|
680
|
+
output_path: str | None = None,
|
|
681
|
+
feedback: str | None = None,
|
|
682
|
+
ai_command: str | None = None,
|
|
683
|
+
) -> GenerationResult:
|
|
684
|
+
"""Regenerate a SINGLE wave artifact in place, scoped to one document.
|
|
685
|
+
|
|
686
|
+
The thin seam the greenfield generate-time VB-registry repair uses: it
|
|
687
|
+
rewrites ONLY the canonical VB doc (``docs/test/test_strategy.md``) with
|
|
688
|
+
repair feedback, WITHOUT re-running the whole wave (which would clobber the
|
|
689
|
+
sibling governance/design docs already generated). Reuses the exact wave
|
|
690
|
+
plumbing (:func:`_generate_one_artifact` → ``_load_dependency_documents`` /
|
|
691
|
+
``_render_document`` / ``_generate_document_body``); only the artifact
|
|
692
|
+
selection (by ``node_id`` or ``output``) and the forced overwrite differ.
|
|
693
|
+
|
|
694
|
+
Identify the target by ``node_id`` (preferred) or ``output_path`` (the
|
|
695
|
+
artifact's ``output``). Raises ``ValueError`` if no/!=1 wave artifact matches
|
|
696
|
+
— an ambiguous or absent target must fail loudly, never silently no-op.
|
|
697
|
+
"""
|
|
698
|
+
|
|
699
|
+
from codd.scanner import build_document_node_path_map
|
|
700
|
+
|
|
701
|
+
if not node_id and not output_path:
|
|
702
|
+
raise ValueError("regenerate_artifact requires node_id or output_path")
|
|
703
|
+
|
|
704
|
+
config = _load_project_config(project_root)
|
|
705
|
+
artifacts = _load_wave_artifacts(config)
|
|
706
|
+
|
|
707
|
+
def _matches(candidate: WaveArtifact) -> bool:
|
|
708
|
+
if node_id is not None and candidate.node_id == node_id:
|
|
709
|
+
return True
|
|
710
|
+
if output_path is not None:
|
|
711
|
+
want = output_path.replace("\\", "/").strip("/")
|
|
712
|
+
have = str(candidate.output).replace("\\", "/").strip("/")
|
|
713
|
+
if want == have:
|
|
714
|
+
return True
|
|
715
|
+
return False
|
|
716
|
+
|
|
717
|
+
matched = [artifact for artifact in artifacts if _matches(artifact)]
|
|
718
|
+
if not matched:
|
|
719
|
+
target = node_id or output_path
|
|
720
|
+
raise ValueError(f"wave_config has no artifact matching {target!r}")
|
|
721
|
+
if len(matched) > 1:
|
|
722
|
+
target = node_id or output_path
|
|
723
|
+
raise ValueError(f"wave_config has {len(matched)} artifacts matching {target!r}; ambiguous")
|
|
724
|
+
|
|
725
|
+
artifact = matched[0]
|
|
726
|
+
resolved_ai_command = _resolve_ai_command(config, ai_command, command_name="generate")
|
|
727
|
+
global_conventions = _normalize_conventions(config.get("conventions", []))
|
|
728
|
+
depended_by_map = _build_depended_by_map(artifacts)
|
|
729
|
+
document_node_paths = build_document_node_path_map(project_root, config)
|
|
730
|
+
body_max_retries = _body_max_retries(config)
|
|
731
|
+
capabilities = _resolve_generation_capabilities(config, project_root)
|
|
732
|
+
project_language = _resolve_project_language(config)
|
|
733
|
+
|
|
734
|
+
return _generate_one_artifact(
|
|
735
|
+
artifact=artifact,
|
|
736
|
+
project_root=project_root,
|
|
737
|
+
global_conventions=global_conventions,
|
|
738
|
+
depended_by_map=depended_by_map,
|
|
739
|
+
document_node_paths=document_node_paths,
|
|
740
|
+
resolved_ai_command=resolved_ai_command,
|
|
741
|
+
body_max_retries=body_max_retries,
|
|
742
|
+
capabilities=capabilities,
|
|
743
|
+
project_language=project_language,
|
|
744
|
+
feedback=feedback,
|
|
745
|
+
)
|
|
746
|
+
|
|
747
|
+
|
|
637
748
|
def _enforce_vb_declaration_coherence(
|
|
638
749
|
project_root: Path,
|
|
639
750
|
config: dict[str, Any],
|
|
@@ -657,8 +657,181 @@ class GreenfieldPipeline:
|
|
|
657
657
|
record["units"][key] = STATUS_DONE
|
|
658
658
|
self._checkpoint(project_root)
|
|
659
659
|
self.echo(f"[greenfield] generate wave {wave}: {detail}")
|
|
660
|
+
|
|
661
|
+
# After ALL waves are generated, enforce the canonical VB-registry
|
|
662
|
+
# completeness contract (model-independence): a weak model can reference
|
|
663
|
+
# VB ids in acceptance-criteria tables yet declare none in the canonical
|
|
664
|
+
# registry, which honest-REDs only later at implement with a confusing
|
|
665
|
+
# orphan message. Catch it HERE and drive a bounded, canonical-doc-scoped
|
|
666
|
+
# repair so a coherent registry exists before implement — or fail
|
|
667
|
+
# honestly at generate. Runs BEFORE implement by construction.
|
|
668
|
+
self._enforce_generate_vb_registry_gate(project_root, options)
|
|
660
669
|
record["detail"] = f"{len(waves)} wave(s) generated"
|
|
661
670
|
|
|
671
|
+
def _enforce_generate_vb_registry_gate(
|
|
672
|
+
self, project_root: Path, options: dict[str, Any]
|
|
673
|
+
) -> None:
|
|
674
|
+
"""Generate-time canonical VB-registry completeness gate + bounded repair.
|
|
675
|
+
|
|
676
|
+
Adopts the GPT design (B as contract + A as bounded generate repair). On
|
|
677
|
+
error-level :func:`validate_vb_registry_completeness` issues (empty
|
|
678
|
+
canonical registry / unresolved AC references / missing canonical doc),
|
|
679
|
+
re-invoke generation SCOPED TO the canonical VB doc only
|
|
680
|
+
(:func:`codd.generator.regenerate_artifact`) with repair feedback, then
|
|
681
|
+
re-validate. After the bounded attempts (1–2), a still-failing registry
|
|
682
|
+
raises :class:`StageError` (generate honest-RED).
|
|
683
|
+
|
|
684
|
+
The MODEL writes the declarations — this is NOT deterministic auto-derive.
|
|
685
|
+
Acceptance-criteria references are used ONLY as the candidate list in the
|
|
686
|
+
repair feedback, NEVER auto-inserted into the canonical table (rejecting
|
|
687
|
+
design option C). Skipped for a project with no verifiable-behavior
|
|
688
|
+
surface (:func:`project_expects_vb_registry`) and when the owner turned
|
|
689
|
+
the coverage gate off — the registry contract tracks the coverage gate.
|
|
690
|
+
"""
|
|
691
|
+
from codd.config import load_project_config
|
|
692
|
+
from codd.verifiable_behavior_audit import (
|
|
693
|
+
_CANONICAL_VB_OUTPUT_PATH,
|
|
694
|
+
coverage_gate_enabled,
|
|
695
|
+
project_expects_vb_registry,
|
|
696
|
+
validate_vb_registry_completeness,
|
|
697
|
+
)
|
|
698
|
+
|
|
699
|
+
if not bool(options.get("coverage_gate", True)):
|
|
700
|
+
return
|
|
701
|
+
try:
|
|
702
|
+
config = load_project_config(project_root)
|
|
703
|
+
except (FileNotFoundError, ValueError):
|
|
704
|
+
config = {}
|
|
705
|
+
if not coverage_gate_enabled(config):
|
|
706
|
+
return
|
|
707
|
+
if not project_expects_vb_registry(project_root, config):
|
|
708
|
+
# No VB surface planned/declared — nothing to certify. Mirrors the
|
|
709
|
+
# brownfield "nothing to audit -> pass" rule; a minimal greenfield
|
|
710
|
+
# project with only design docs is not forced to invent behaviors.
|
|
711
|
+
return
|
|
712
|
+
|
|
713
|
+
max_attempts = max(1, int(self._option_overrides.get("max_repair_attempts") or 0) or 2)
|
|
714
|
+
max_attempts = min(max_attempts, 2) # bounded: 1–2 attempts (design)
|
|
715
|
+
|
|
716
|
+
# Reference the seam through the module (not a bound name) so a test's
|
|
717
|
+
# monkeypatch on ``codd.generator.regenerate_artifact`` is honored.
|
|
718
|
+
from codd import generator as generator_module
|
|
719
|
+
|
|
720
|
+
issues = validate_vb_registry_completeness(project_root, config, strict=True)
|
|
721
|
+
errors = [issue for issue in issues if issue.severity == "error"]
|
|
722
|
+
attempt = 0
|
|
723
|
+
while errors and attempt < max_attempts:
|
|
724
|
+
attempt += 1
|
|
725
|
+
feedback = self._build_vb_registry_repair_feedback(project_root, config, errors)
|
|
726
|
+
self.echo(
|
|
727
|
+
f"[greenfield] generate VB-registry gate: {len(errors)} issue(s); "
|
|
728
|
+
f"re-generating {_CANONICAL_VB_OUTPUT_PATH} with repair feedback "
|
|
729
|
+
f"(attempt {attempt}/{max_attempts})"
|
|
730
|
+
)
|
|
731
|
+
try:
|
|
732
|
+
generator_module.regenerate_artifact(
|
|
733
|
+
project_root,
|
|
734
|
+
output_path=_CANONICAL_VB_OUTPUT_PATH,
|
|
735
|
+
feedback=feedback,
|
|
736
|
+
ai_command=self.ai_command,
|
|
737
|
+
)
|
|
738
|
+
except (FileNotFoundError, ValueError) as exc:
|
|
739
|
+
# The canonical doc is not a planned artifact, or regeneration
|
|
740
|
+
# failed — cannot repair. Fail honestly with the original gap.
|
|
741
|
+
raise StageError(
|
|
742
|
+
f"generate VB-registry gate: canonical registry repair could not run "
|
|
743
|
+
f"({exc}); the canonical VB document ({_CANONICAL_VB_OUTPUT_PATH}) must "
|
|
744
|
+
"declare every verifiable behavior as a first-column VB-* row."
|
|
745
|
+
) from exc
|
|
746
|
+
issues = validate_vb_registry_completeness(project_root, config, strict=True)
|
|
747
|
+
errors = [issue for issue in issues if issue.severity == "error"]
|
|
748
|
+
|
|
749
|
+
if errors:
|
|
750
|
+
detail = "\n".join(f" - {issue.message}" for issue in errors)
|
|
751
|
+
raise StageError(
|
|
752
|
+
"generate VB-registry gate FAILED: the generated canonical verifiable-behavior "
|
|
753
|
+
f"registry ({_CANONICAL_VB_OUTPUT_PATH}) is still incomplete after "
|
|
754
|
+
f"{attempt} repair attempt(s):\n{detail}\n"
|
|
755
|
+
"Declare every real verifiable behavior exactly once as a first-column VB-* row "
|
|
756
|
+
"in the canonical doc so coverage/authenticity can certify the system."
|
|
757
|
+
)
|
|
758
|
+
if attempt:
|
|
759
|
+
self.echo(
|
|
760
|
+
f"[greenfield] generate VB-registry gate: canonical registry repaired "
|
|
761
|
+
f"after {attempt} attempt(s) — OK"
|
|
762
|
+
)
|
|
763
|
+
|
|
764
|
+
def _build_vb_registry_repair_feedback(
|
|
765
|
+
self, project_root: Path, config: dict[str, Any], errors: list[Any]
|
|
766
|
+
) -> str:
|
|
767
|
+
"""Repair feedback for the canonical-doc-scoped regeneration.
|
|
768
|
+
|
|
769
|
+
Lists the canonical-registry declaration count + the unresolved AC
|
|
770
|
+
references (the CANDIDATE id list, never auto-inserted) + the repair
|
|
771
|
+
rules in the shape the GPT design specified. The references are a hint
|
|
772
|
+
about which behaviors likely exist — the model decides which correspond
|
|
773
|
+
to real behaviors and declares them; nothing is derived deterministically.
|
|
774
|
+
"""
|
|
775
|
+
from codd.verifiable_behavior_audit import (
|
|
776
|
+
_CANONICAL_VB_OUTPUT_PATH,
|
|
777
|
+
_config_without_doc_pin,
|
|
778
|
+
_iter_doc_texts,
|
|
779
|
+
_normalize_vb_id,
|
|
780
|
+
is_canonical_vb_doc,
|
|
781
|
+
parse_vb_references,
|
|
782
|
+
parse_vb_table,
|
|
783
|
+
)
|
|
784
|
+
|
|
785
|
+
# Scan the WHOLE test-doc tree (not just test_coverage.docs) so the
|
|
786
|
+
# candidate-reference list mirrors what validate_vb_registry_completeness
|
|
787
|
+
# saw (an AC doc that references VB ids is not in test_coverage.docs).
|
|
788
|
+
doc_texts = _iter_doc_texts(project_root, config=_config_without_doc_pin(config))
|
|
789
|
+
canonical_count = 0
|
|
790
|
+
declared: set[str] = set()
|
|
791
|
+
for doc, text in doc_texts:
|
|
792
|
+
if not is_canonical_vb_doc(output_path=doc):
|
|
793
|
+
continue
|
|
794
|
+
rows = parse_vb_table(text, source_doc=doc)
|
|
795
|
+
canonical_count += len(rows)
|
|
796
|
+
declared.update(_normalize_vb_id(row.vb_id) for row in rows)
|
|
797
|
+
|
|
798
|
+
# Collect unresolved references (id -> the docs that reference it) as the
|
|
799
|
+
# CANDIDATE list only — never auto-inserted into the canonical table.
|
|
800
|
+
candidates: dict[str, set[str]] = {}
|
|
801
|
+
for doc, text in doc_texts:
|
|
802
|
+
if is_canonical_vb_doc(output_path=doc):
|
|
803
|
+
continue
|
|
804
|
+
for ref in parse_vb_references(text, source_doc=doc):
|
|
805
|
+
if _normalize_vb_id(ref.vb_id) in declared:
|
|
806
|
+
continue
|
|
807
|
+
candidates.setdefault(ref.vb_id, set()).add(doc)
|
|
808
|
+
|
|
809
|
+
lines = [
|
|
810
|
+
"The generated verifiable-behavior (VB) registry is incomplete.",
|
|
811
|
+
"",
|
|
812
|
+
"Canonical registry:",
|
|
813
|
+
f"- {_CANONICAL_VB_OUTPUT_PATH} declares {canonical_count} canonical VB-* row(s).",
|
|
814
|
+
]
|
|
815
|
+
if candidates:
|
|
816
|
+
lines.append("")
|
|
817
|
+
lines.append("Unresolved VB references (candidate ids — NOT yet declared canonically):")
|
|
818
|
+
for vb_id in sorted(candidates):
|
|
819
|
+
docs = ", ".join(sorted(candidates[vb_id]))
|
|
820
|
+
lines.append(f"- {vb_id} (referenced in {docs})")
|
|
821
|
+
lines.extend(
|
|
822
|
+
[
|
|
823
|
+
"",
|
|
824
|
+
"Repair rules:",
|
|
825
|
+
f"- Rewrite ONLY {_CANONICAL_VB_OUTPUT_PATH}.",
|
|
826
|
+
"- Declare every real verifiable behavior exactly once as a first-column VB-* row.",
|
|
827
|
+
"- Use a referenced id only when it corresponds to a real behavior derived from "
|
|
828
|
+
"the requirements/design; fix a reference elsewhere only if its id is genuinely wrong.",
|
|
829
|
+
"- Do NOT add or modify `codd: covers` markers.",
|
|
830
|
+
"- Do NOT edit source or executable tests.",
|
|
831
|
+
]
|
|
832
|
+
)
|
|
833
|
+
return "\n".join(lines)
|
|
834
|
+
|
|
662
835
|
# ── stage: implement ────────────────────────────────────
|
|
663
836
|
|
|
664
837
|
def _stage_implement(self, project_root: Path, record: dict[str, Any], options: dict[str, Any]) -> None:
|
|
@@ -2522,6 +2695,7 @@ def _enforce_stage_coverage_gate(
|
|
|
2522
2695
|
coverage_gate_enabled,
|
|
2523
2696
|
coverage_gate_max_retries,
|
|
2524
2697
|
format_gap_feedback,
|
|
2698
|
+
project_expects_vb_registry,
|
|
2525
2699
|
run_implement_coverage_gate,
|
|
2526
2700
|
)
|
|
2527
2701
|
|
|
@@ -2536,6 +2710,24 @@ def _enforce_stage_coverage_gate(
|
|
|
2536
2710
|
if not coverage_gate_enabled(config):
|
|
2537
2711
|
return
|
|
2538
2712
|
|
|
2713
|
+
# GREENFIELD-ONLY empty-registry hard-fail (rear guard behind the generate
|
|
2714
|
+
# gate). For a project that is EXPECTED to own a canonical VB registry (it
|
|
2715
|
+
# plans/declares one — see project_expects_vb_registry), an empty audit means
|
|
2716
|
+
# NO verifiable behaviors were declared, so orphan never fires and the
|
|
2717
|
+
# marker-authenticity gate has nothing to judge — verify could pass over a
|
|
2718
|
+
# build whose VB-coverage contract was never generated. Fail honestly here.
|
|
2719
|
+
# This does NOT change the brownfield run_implement_coverage_gate
|
|
2720
|
+
# "nothing to audit -> pass" rule (that path is untouched); it gates ONLY the
|
|
2721
|
+
# greenfield autopilot, and ONLY when a VB surface was expected — a minimal
|
|
2722
|
+
# greenfield project with no VB surface still passes.
|
|
2723
|
+
if project_expects_vb_registry(project_root, config):
|
|
2724
|
+
if not build_vb_coverage_audit(project_root, config=config).rows:
|
|
2725
|
+
raise StageError(
|
|
2726
|
+
"greenfield requires a non-empty canonical VB registry in "
|
|
2727
|
+
"docs/test/test_strategy.md; no verifiable behaviors were declared, "
|
|
2728
|
+
"so coverage/authenticity cannot certify the generated system."
|
|
2729
|
+
)
|
|
2730
|
+
|
|
2539
2731
|
# Pass the configured test dirs as the audited output paths so the gate
|
|
2540
2732
|
# treats this as a test-related run (it is — every test the build will ever
|
|
2541
2733
|
# have now exists) and evaluates the FULL project VB universe in one pass.
|