codd-dev 2.48.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.48.0 → codd_dev-2.50.0}/PKG-INFO +1 -1
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/__init__.py +1 -1
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/contracts_registry/registry.py +11 -5
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/generator.py +128 -17
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/greenfield/pipeline.py +192 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/vb_marker_authenticity.py +60 -20
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/verifiable_behavior_audit.py +332 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/pyproject.toml +1 -1
- {codd_dev-2.48.0 → codd_dev-2.50.0}/.gitignore +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/LICENSE +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/README.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/__main__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/assembler.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/bridge.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/cli.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/clustering.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/confidence.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/config.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/config_schema.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/contracts.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/contracts_registry/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/contracts_registry/__main__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/contracts_registry/certify.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/contracts_registry/generate_matrix.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/coverage_execution_coherence.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/defaults.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/defaults.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployer.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/design_md.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/discovery.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/drift.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/e2e_harness.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/env_refs.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/extractor.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fixer.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/graph.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/implement_oracle.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/implement_oracle_scope.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/implementer.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/inheritance.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/lexicon.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/measure.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/planner.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/policy.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/project_types.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/propagate.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/propagator.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/reference_resolution.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/registry.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/auto_scope_guard.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/history.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/require.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/restore.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/scanner.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/synth.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/test_detection.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/traceability.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/validator.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/vb_rerun_scope.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/watch/events.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd/wiring.py +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/dogfood/README.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/examples/README.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.48.0 → codd_dev-2.50.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.48.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
|
|
@@ -231,11 +231,15 @@ _COVERED: tuple[Contract, ...] = (
|
|
|
231
231
|
finding_ids=("PC-docref-resolution",),
|
|
232
232
|
),
|
|
233
233
|
# ── authenticity.observable_in_supported_stack.v1 (GPT r2 §3.6) ──────────
|
|
234
|
-
# The
|
|
235
|
-
# ZERO executable test blocks out of
|
|
236
|
-
#
|
|
237
|
-
#
|
|
238
|
-
#
|
|
234
|
+
# The hard gate, NARROWED to HARNESS-OWNED files: a marker-bearing file the
|
|
235
|
+
# adapter RECOGNIZES but parses ZERO executable test blocks out of is a
|
|
236
|
+
# false-green CoDD owns ONLY when CoDD itself generated it (it carries a
|
|
237
|
+
# ``@generated-by: codd …`` provenance header). strict_observability=True
|
|
238
|
+
# (greenfield Gate 2) makes THAT an unobservable_test_structure violation. A
|
|
239
|
+
# USER/CUSTOM recognized-extension file with no provenance header DEGRADES —
|
|
240
|
+
# our block-parser's incompleteness (a Mocha variant, a decorated/wrapped test
|
|
241
|
+
# style) must not hard-RED a user's valid-but-unparsed-by-us test. An
|
|
242
|
+
# UNSUPPORTED file (no adapter) also degrades. Never a false-RED.
|
|
239
243
|
Contract(
|
|
240
244
|
id="authenticity.observable_in_supported_stack.v1",
|
|
241
245
|
source_node="TestFile",
|
|
@@ -247,6 +251,8 @@ _COVERED: tuple[Contract, ...] = (
|
|
|
247
251
|
status="covered",
|
|
248
252
|
certification_fixtures=(
|
|
249
253
|
"tests/test_vb_marker_authenticity.py::test_strict_observability_flags_recognized_file_with_no_parseable_test",
|
|
254
|
+
"tests/test_vb_marker_authenticity.py::test_strict_observability_user_file_degrades_not_red",
|
|
255
|
+
"tests/test_vb_marker_authenticity.py::test_strict_observability_harness_owned_spoof_is_red",
|
|
250
256
|
"tests/test_vb_marker_authenticity.py::test_strict_observability_still_degrades_unsupported_stack",
|
|
251
257
|
"tests/test_vb_marker_authenticity.py::test_strict_observability_does_not_affect_genuine_covering_test",
|
|
252
258
|
),
|
|
@@ -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.
|
|
@@ -257,6 +257,32 @@ def _scan_cover_markers_with_lines(text: str, rel_path: str) -> list[_CoverMarke
|
|
|
257
257
|
return markers
|
|
258
258
|
|
|
259
259
|
|
|
260
|
+
#: Provenance header CoDD stamps onto every file it generates. The implementer
|
|
261
|
+
#: writes ``@generated-by: codd implement``, the generator ``@generated-by: codd
|
|
262
|
+
#: generate``, the propagator ``@generated-by: codd propagate`` — all sharing this
|
|
263
|
+
#: language-agnostic substring under the file's own comment prefix (``//`` / ``#``;
|
|
264
|
+
#: see ``codd.implementer.COMMENT_PREFIX_BY_SUFFIX`` and ``_build_traceability_
|
|
265
|
+
#: comment``). The same substring is what ``implementer._root_artifact_overwrite_
|
|
266
|
+
#: blocked`` uses to recognize a CoDD-owned file.
|
|
267
|
+
_HARNESS_PROVENANCE_MARKER = "@generated-by: codd"
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
def _is_harness_generated(text: str) -> bool:
|
|
271
|
+
"""Whether ``text`` is a file CoDD ITSELF generated (deterministic; no LLM).
|
|
272
|
+
|
|
273
|
+
True iff the file carries CoDD's generation-provenance header
|
|
274
|
+
(``@generated-by: codd …``). This is the HARNESS-OWNED vs USER/CUSTOM
|
|
275
|
+
discriminator for the strict-observability gate: a harness-owned file with no
|
|
276
|
+
parseable test block is a genuine false-green CoDD produced (hard-RED), while
|
|
277
|
+
a user-authored file in a recognized extension that our block-parser merely
|
|
278
|
+
cannot extract must degrade rather than false-RED. Matching the bare
|
|
279
|
+
``@generated-by: codd`` substring keeps this language-agnostic — the marker is
|
|
280
|
+
emitted under each language's own comment prefix but the substring is constant.
|
|
281
|
+
"""
|
|
282
|
+
|
|
283
|
+
return _HARNESS_PROVENANCE_MARKER in text
|
|
284
|
+
|
|
285
|
+
|
|
260
286
|
def _attached_block(marker_line: int, text: str, blocks: list[TestBlock]) -> TestBlock | None:
|
|
261
287
|
"""The executable test block a marker on ``marker_line`` attaches to.
|
|
262
288
|
|
|
@@ -399,11 +425,16 @@ def build_authenticity_report(
|
|
|
399
425
|
``strict_observability`` (contract authenticity.observable_in_supported_stack.v1):
|
|
400
426
|
when True, a marker-bearing file the adapter RECOGNIZES (``handles_file``) but
|
|
401
427
|
from which it parses ZERO executable test blocks is an
|
|
402
|
-
``unobservable_test_structure`` VIOLATION rather than a silent degrade —
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
428
|
+
``unobservable_test_structure`` VIOLATION rather than a silent degrade — BUT
|
|
429
|
+
ONLY when that file is HARNESS-OWNED (CoDD generated it; it carries a
|
|
430
|
+
``@generated-by: codd …`` provenance header). A harness-owned file with no
|
|
431
|
+
parseable test is a genuine false-green CoDD produced. A USER/CUSTOM file in a
|
|
432
|
+
recognized extension WITHOUT a provenance header DEGRADES instead: our block-
|
|
433
|
+
parser's incompleteness (a Mocha variant, a decorated / framework-wrapped test
|
|
434
|
+
style) must not hard-RED a user's valid-but-unparsed-by-us test. An UNSUPPORTED
|
|
435
|
+
file (no adapter / not handled) also degrades in either mode (never a
|
|
436
|
+
false-RED). The greenfield autopilot passes True; the default is False for
|
|
437
|
+
back-compat with non-autopilot callers.
|
|
407
438
|
"""
|
|
408
439
|
|
|
409
440
|
project_root = Path(project_root).resolve()
|
|
@@ -469,14 +500,20 @@ def build_authenticity_report(
|
|
|
469
500
|
except Exception: # noqa: BLE001 — a parser that throws degrades, never fails.
|
|
470
501
|
blocks = []
|
|
471
502
|
if not blocks:
|
|
472
|
-
if adapter_handles and strict_observability:
|
|
473
|
-
# OBSERVABILITY (contract authenticity.observable_in_supported_stack.v1)
|
|
474
|
-
#
|
|
475
|
-
# test blocks though live coverage
|
|
476
|
-
#
|
|
477
|
-
#
|
|
478
|
-
#
|
|
479
|
-
#
|
|
503
|
+
if adapter_handles and strict_observability and _is_harness_generated(text):
|
|
504
|
+
# OBSERVABILITY (contract authenticity.observable_in_supported_stack.v1),
|
|
505
|
+
# NARROWED to HARNESS-OWNED files. The adapter RECOGNIZES this file
|
|
506
|
+
# type but extracted ZERO executable test blocks though live coverage
|
|
507
|
+
# markers are present. We HARD-FAIL this ONLY when CoDD ITSELF
|
|
508
|
+
# generated the file (it carries a ``@generated-by: codd …``
|
|
509
|
+
# provenance header): CoDD produced a marker-bearing test with no
|
|
510
|
+
# parseable assertion, which is a genuine false-green CoDD owns and
|
|
511
|
+
# must not ship. A USER/CUSTOM file in a recognized extension (NO
|
|
512
|
+
# provenance header) falls through to the degrade path below: our
|
|
513
|
+
# block-parser's incompleteness — a Mocha variant, a decorated /
|
|
514
|
+
# framework-wrapped test style we cannot extract — must NOT hard-RED a
|
|
515
|
+
# user's valid-but-unparsed-by-us test (that would be a false-RED).
|
|
516
|
+
# Stage 1 (orphan) already ran for every file regardless.
|
|
480
517
|
for marker in live_markers:
|
|
481
518
|
violations.append(
|
|
482
519
|
AuthenticityViolation(
|
|
@@ -486,18 +523,21 @@ def build_authenticity_report(
|
|
|
486
523
|
line=marker.line,
|
|
487
524
|
message=(
|
|
488
525
|
f"{rel}:{marker.line} `codd: covers vb={marker.vb_id}` sits in a "
|
|
489
|
-
"
|
|
490
|
-
"executable test block — the coverage
|
|
491
|
-
"
|
|
492
|
-
"
|
|
493
|
-
"cannot run yet."
|
|
526
|
+
"CoDD-generated test file (`@generated-by: codd …`) from which the "
|
|
527
|
+
"structural parser extracted NO executable test block — the coverage "
|
|
528
|
+
"claim is unobservable (a generated marker with no parseable test "
|
|
529
|
+
"proves nothing). Generate a real test case the runner executes, or "
|
|
530
|
+
"use `codd: blocked vb=… reason=…` if it genuinely cannot run yet."
|
|
494
531
|
),
|
|
495
532
|
)
|
|
496
533
|
)
|
|
497
534
|
continue
|
|
498
535
|
# Graceful degradation: an UNSUPPORTED stack/file (no adapter, or the
|
|
499
|
-
# adapter does not handle this file),
|
|
500
|
-
#
|
|
536
|
+
# adapter does not handle this file), strict observability off, OR a
|
|
537
|
+
# USER/CUSTOM recognized-extension file (no CoDD provenance header) our
|
|
538
|
+
# parser could not extract a block from — our parser's incompleteness must
|
|
539
|
+
# not hard-fail a user's valid test. Stage 1 already ran; skip stages 2-3
|
|
540
|
+
# with a warning (never false-RED).
|
|
501
541
|
degraded.append(rel)
|
|
502
542
|
continue
|
|
503
543
|
|