codd-dev 2.28.0__tar.gz → 2.30.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.28.0 → codd_dev-2.30.0}/PKG-INFO +1 -1
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/__init__.py +1 -1
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/defaults.yaml +7 -4
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/e2e_generator.py +11 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/generator.py +1 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/greenfield/pipeline.py +248 -33
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/implementer.py +4 -3
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/project_types.py +77 -0
- codd_dev-2.30.0/codd/vb_marker_authenticity.py +693 -0
- codd_dev-2.30.0/codd/vb_rerun_scope.py +225 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/verifiable_behavior_audit.py +52 -1
- {codd_dev-2.28.0 → codd_dev-2.30.0}/pyproject.toml +1 -1
- {codd_dev-2.28.0 → codd_dev-2.30.0}/.gitignore +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/LICENSE +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/README.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/__main__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/assembler.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/bridge.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/cli.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/clustering.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/confidence.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/config.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/config_schema.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/contracts.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/defaults.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployer.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/design_md.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/discovery.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/drift.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/env_refs.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/extractor.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fixer.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/graph.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/implement_oracle.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/implement_oracle_scope.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/inheritance.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/measure.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/planner.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/policy.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/propagate.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/propagator.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/registry.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/auto_scope_guard.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/history.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/require.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/restore.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/scanner.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/synth.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/test_detection.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/traceability.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/validator.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/watch/events.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/wiring.py +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/dogfood/README.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/examples/README.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.28.0 → codd_dev-2.30.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.30.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
|
|
@@ -171,13 +171,16 @@ implement:
|
|
|
171
171
|
# implement task (or a declared harness/profile contract). An orphan (a file no
|
|
172
172
|
# task owns) sits OUTSIDE the artifact-contract graph -- its repair scope and
|
|
173
173
|
# write-fence are undecidable, so a non-deterministic SUT can keep mutating it
|
|
174
|
-
# invisibly. 'warn'
|
|
175
|
-
#
|
|
176
|
-
#
|
|
174
|
+
# invisibly. 'warn' observes + reports orphans after implement but never blocks
|
|
175
|
+
# (heuristic; the large behaviour change first rolled out as warn, validated on
|
|
176
|
+
# the dogfood zoo, then promoted). 'enforce' (default, owner-set 2026-06-15)
|
|
177
|
+
# makes an orphan a hard stage failure -- the orphan-artifact invariant. Scaffold
|
|
178
|
+
# /harness-owned files (vitest.config.ts, tsconfig.json, ...) are profile-owned
|
|
179
|
+
# and never flagged. 'off' disables it. A
|
|
177
180
|
# legitimate helper a task wrote under its OWN output directory is adopted (it
|
|
178
181
|
# is dir-owned), so the warn list should be small. Only active for stacks with
|
|
179
182
|
# a declared implement-time oracle + a derivable owner index.
|
|
180
|
-
orphan_artifact_gate:
|
|
183
|
+
orphan_artifact_gate: enforce
|
|
181
184
|
# Bounded wall-clock for ONE implement-oracle command run (seconds). tsc on a
|
|
182
185
|
# fresh build is fast, but a cold first run can compile a large module graph.
|
|
183
186
|
# Default 600.
|
|
@@ -375,6 +375,17 @@ def _render_header_comments(scenario: UserScenario, context: GenerationContext,
|
|
|
375
375
|
if scenario.kind == "operational":
|
|
376
376
|
source_operation = _source_operation_label(scenario)
|
|
377
377
|
coverage_axis = scenario.coverage_axis or "unspecified"
|
|
378
|
+
# Machine-injection guard (anti-false-coverage): injecting a coverage
|
|
379
|
+
# marker is ONLY safe here because the mapping is HARNESS-OWNED and
|
|
380
|
+
# machine-known — this is a skeleton the harness itself generates for
|
|
381
|
+
# ``operation=<X>`` and the marker names that same operation. NEVER
|
|
382
|
+
# inject ``codd: covers vb=<id>`` into a free-form unit/integration test
|
|
383
|
+
# by guessing the VB from a test name or nearby text: a guessed marker is
|
|
384
|
+
# a false coverage claim the authenticity gate exists to reject. A VB
|
|
385
|
+
# marker may only be authored by the SUT on a test that genuinely proves
|
|
386
|
+
# the behavior, or attached to a harness-generated VB-specific skeleton
|
|
387
|
+
# whose asserting body the SUT fills in (still subject to the
|
|
388
|
+
# assertion-presence gate).
|
|
378
389
|
lines.extend(
|
|
379
390
|
[
|
|
380
391
|
"// Operational E2E policy: run the whole generated suite, collect all failures, then repair after the full campaign finishes.",
|
|
@@ -226,6 +226,7 @@ _TEST_DOC_CANONICAL_VB_HEAD = [
|
|
|
226
226
|
"- Every verifiable behavior must map to at least one test scenario — if a design document specifies a transition chain (e.g. action → intermediate state → final state), each link in the chain requires a separate assertion.",
|
|
227
227
|
"- Include a traceability section that lists each verifiable behavior and its corresponding test scenario(s). Flag any behavior that lacks coverage.",
|
|
228
228
|
"- Write that traceability section as a Markdown table whose FIRST column is a stable verifiable-behavior id of the form `VB-<id>` (e.g. `VB-01`, `VB-AUTH-02`), one row per verifiable behavior. Header wording and language are free; CoDD machine-parses the `VB-` id in the first cell (`codd test audit`), so never merge multiple behaviors into one row and never omit the id column.",
|
|
229
|
+
"- Each VB id must be ATOMIC — name exactly one behavior. Never use range or list shorthand in an id (no `VB-EVAL-02..06`, no `VB-02,03`, no `VB-02〜06`); write one row with a distinct atomic id per behavior instead. A range id cannot be honestly covered by a single test marker, and its members would read as permanently uncovered.",
|
|
229
230
|
"- Declare each behavior under exactly one stable id; do not split one behavior across two ids or reuse an id for two different behaviors.",
|
|
230
231
|
"- Treat design-time `operation_flow` records as the authoritative source for operational test obligations. Do not invent E2E-only behavior that is absent from requirements or design; instead flag missing design obligations.",
|
|
231
232
|
]
|
|
@@ -733,16 +733,29 @@ class GreenfieldPipeline:
|
|
|
733
733
|
# — code that does not even typecheck cannot have meaningful VB coverage.
|
|
734
734
|
self._enforce_implement_oracle_gate(project_root, tasks, options)
|
|
735
735
|
|
|
736
|
-
# Project-wide VB coverage gate — ONCE, after every
|
|
737
|
-
# run and all covering tests therefore exist. Per-task
|
|
738
|
-
# disabled in _default_implement_task_runner precisely
|
|
739
|
-
# is project-wide; this is where it belongs. Honors the
|
|
740
|
-
# coverage_gate option (--no-coverage-gate /
|
|
741
|
-
# false) — when the owner turned it off, the
|
|
736
|
+
# Project-wide VB coverage + marker-authenticity gate — ONCE, after every
|
|
737
|
+
# implement task has run and all covering tests therefore exist. Per-task
|
|
738
|
+
# enforcement was disabled in _default_implement_task_runner precisely
|
|
739
|
+
# because the gate is project-wide; this is where it belongs. Honors the
|
|
740
|
+
# greenfield coverage_gate option (--no-coverage-gate /
|
|
741
|
+
# greenfield.coverage_gate: false) — when the owner turned it off, the
|
|
742
|
+
# final gate is skipped too. The rerun is wired (was dormant): an
|
|
743
|
+
# uncovered VB drives a bounded, TEST-SCOPED re-implementation (source is
|
|
744
|
+
# never edited by a VB rerun) with gap feedback, and the native oracle is
|
|
745
|
+
# re-asserted after each test edit.
|
|
746
|
+
coverage_on = bool(options.get("coverage_gate", True))
|
|
742
747
|
_enforce_stage_coverage_gate(
|
|
743
748
|
project_root,
|
|
744
|
-
coverage_gate=
|
|
749
|
+
coverage_gate=coverage_on,
|
|
745
750
|
echo=self.echo,
|
|
751
|
+
rerun=self._make_vb_rerun_callback(project_root, tasks, options) if coverage_on else None,
|
|
752
|
+
rerun_oracle=(
|
|
753
|
+
(lambda: self._enforce_implement_oracle_gate(project_root, tasks, options))
|
|
754
|
+
if coverage_on
|
|
755
|
+
else None
|
|
756
|
+
),
|
|
757
|
+
scope_resolver=self._make_vb_scope_resolver(project_root, tasks) if coverage_on else None,
|
|
758
|
+
authenticity_profile=self._resolve_layout_profile(project_root) if coverage_on else None,
|
|
746
759
|
)
|
|
747
760
|
record["detail"] = f"{len(tasks)} task(s) implemented"
|
|
748
761
|
|
|
@@ -925,19 +938,52 @@ class GreenfieldPipeline:
|
|
|
925
938
|
return None
|
|
926
939
|
|
|
927
940
|
def _oracle_manifest_paths(self, project_root: Path) -> tuple[str, ...]:
|
|
928
|
-
"""
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
941
|
+
"""Harness-owned shared files the write-fence permits + the orphan gate exempts.
|
|
942
|
+
|
|
943
|
+
Two roles, one list (both legitimate for the same files):
|
|
944
|
+
* **write-fence permit** — a scoped rerun may touch shared build
|
|
945
|
+
manifest/config even when no task "owns" it (e.g. adding a dependency
|
|
946
|
+
the fix needs).
|
|
947
|
+
* **orphan-gate escape hatch** (``extra_owned``) — a scaffolded config
|
|
948
|
+
is a generated artifact owned by the HARNESS contract, not a task, so
|
|
949
|
+
it must not be mis-flagged as an unowned orphan.
|
|
950
|
+
|
|
951
|
+
Sources, unioned: (1) the active stack's :class:`LayoutProfile`
|
|
952
|
+
``harness_owned_scaffold_paths`` (e.g. TS ``vitest.config.ts`` /
|
|
953
|
+
``tsconfig.json`` / ``package.json`` — the files the scaffolder creates),
|
|
954
|
+
derived language-agnostically from the profile; (2) a small fallback set of
|
|
955
|
+
common lockfiles a manager may have produced that the profile does not
|
|
956
|
+
enumerate. Only files that actually EXIST are returned, project-relative.
|
|
933
957
|
"""
|
|
934
|
-
candidates =
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
)
|
|
958
|
+
candidates: list[str] = []
|
|
959
|
+
|
|
960
|
+
def _add(rel: str) -> None:
|
|
961
|
+
if rel and rel not in candidates:
|
|
962
|
+
candidates.append(rel)
|
|
963
|
+
|
|
964
|
+
# (1) Profile-declared scaffold contract (language-agnostic, single source).
|
|
965
|
+
try:
|
|
966
|
+
from codd.project_types import resolve_layout_profile
|
|
967
|
+
|
|
968
|
+
config, language, source_dirs, test_dirs = self._layout_inputs(project_root)
|
|
969
|
+
profile = resolve_layout_profile(
|
|
970
|
+
language=language,
|
|
971
|
+
project_name=self._layout_project_name(project_root, config),
|
|
972
|
+
source_dirs=source_dirs,
|
|
973
|
+
test_dirs=test_dirs,
|
|
974
|
+
config=config,
|
|
975
|
+
project_root=project_root,
|
|
976
|
+
)
|
|
977
|
+
if profile is not None:
|
|
978
|
+
for rel in profile.harness_owned_scaffold_paths():
|
|
979
|
+
_add(rel)
|
|
980
|
+
except Exception as exc: # noqa: BLE001 — escape hatch is best-effort; fall back to the static set.
|
|
981
|
+
self.echo(f"[greenfield] implement-oracle: scaffold-path contract unavailable ({exc}).")
|
|
982
|
+
|
|
983
|
+
# (2) Lockfile fallbacks not necessarily enumerated by the profile.
|
|
984
|
+
for name in ("package.json", "tsconfig.json", "package-lock.json", "pnpm-lock.yaml", "yarn.lock"):
|
|
985
|
+
_add(name)
|
|
986
|
+
|
|
941
987
|
present: list[str] = []
|
|
942
988
|
for name in candidates:
|
|
943
989
|
if (project_root / name).is_file():
|
|
@@ -1018,6 +1064,91 @@ class GreenfieldPipeline:
|
|
|
1018
1064
|
feedback=feedback,
|
|
1019
1065
|
)
|
|
1020
1066
|
|
|
1067
|
+
def _make_vb_rerun_callback(
|
|
1068
|
+
self,
|
|
1069
|
+
project_root: Path,
|
|
1070
|
+
tasks: list[ImplementTaskRef],
|
|
1071
|
+
options: dict[str, Any],
|
|
1072
|
+
) -> Callable[[str, Any], None]:
|
|
1073
|
+
"""A ``rerun(feedback, scope)`` for the VB coverage gate's feedback loop.
|
|
1074
|
+
|
|
1075
|
+
Reuses the oracle's scoped, write-fenced rerun dispatch
|
|
1076
|
+
(:meth:`_rerun_tasks_with_feedback`): a TEST-scoped
|
|
1077
|
+
:class:`~codd.implement_oracle_scope.OracleRerunScope` re-implements ONLY
|
|
1078
|
+
its test tasks, fenced to test files/helpers, so a VB coverage rerun can
|
|
1079
|
+
never rewrite production source.
|
|
1080
|
+
"""
|
|
1081
|
+
|
|
1082
|
+
def _rerun(feedback: str, scope: Any = None) -> None:
|
|
1083
|
+
self._rerun_tasks_with_feedback(project_root, tasks, feedback, options, scope=scope)
|
|
1084
|
+
|
|
1085
|
+
return _rerun
|
|
1086
|
+
|
|
1087
|
+
def _make_vb_scope_resolver(
|
|
1088
|
+
self,
|
|
1089
|
+
project_root: Path,
|
|
1090
|
+
tasks: list[ImplementTaskRef],
|
|
1091
|
+
) -> Callable[[list[str]], Any]:
|
|
1092
|
+
"""A resolver mapping uncovered VB source docs → a TEST-scoped rerun scope.
|
|
1093
|
+
|
|
1094
|
+
Delegates to :func:`codd.vb_rerun_scope.derive_vb_rerun_scope` with the
|
|
1095
|
+
pipeline's ``_output_paths_for_task`` so each task's outputs resolve the
|
|
1096
|
+
same way the rerun itself resolves them. A derivation failure degrades to
|
|
1097
|
+
a broad scope (never aborts the gate).
|
|
1098
|
+
"""
|
|
1099
|
+
from codd.config import load_project_config
|
|
1100
|
+
|
|
1101
|
+
def _resolve(uncovered_source_docs: list[str]) -> Any:
|
|
1102
|
+
try:
|
|
1103
|
+
config = load_project_config(project_root)
|
|
1104
|
+
except (FileNotFoundError, ValueError):
|
|
1105
|
+
config = {}
|
|
1106
|
+
try:
|
|
1107
|
+
from codd.vb_rerun_scope import derive_vb_rerun_scope
|
|
1108
|
+
|
|
1109
|
+
return derive_vb_rerun_scope(
|
|
1110
|
+
uncovered_source_docs,
|
|
1111
|
+
tasks,
|
|
1112
|
+
config=config,
|
|
1113
|
+
path_resolver=_output_paths_for_task,
|
|
1114
|
+
)
|
|
1115
|
+
except Exception as exc: # noqa: BLE001 — degrade to broad, never abort.
|
|
1116
|
+
self.echo(f"[greenfield] VB rerun: scope derivation failed ({exc}); rerun stays broad.")
|
|
1117
|
+
from codd.implement_oracle_scope import SCOPE_BROAD, OracleRerunScope
|
|
1118
|
+
|
|
1119
|
+
return OracleRerunScope(
|
|
1120
|
+
rung=SCOPE_BROAD, # canonical broad ⇒ is_broad() True ⇒ unfenced
|
|
1121
|
+
task_ids=tuple(task.task_id for task in tasks),
|
|
1122
|
+
allowed_paths=(),
|
|
1123
|
+
detail="VB rerun: scope derivation error — broad fallback",
|
|
1124
|
+
)
|
|
1125
|
+
|
|
1126
|
+
return _resolve
|
|
1127
|
+
|
|
1128
|
+
def _resolve_layout_profile(self, project_root: Path) -> Any:
|
|
1129
|
+
"""Resolve the active :class:`~codd.project_types.LayoutProfile` (or None).
|
|
1130
|
+
|
|
1131
|
+
Used by the marker-authenticity gate to obtain the per-language
|
|
1132
|
+
test-block adapter (``profile.test_block_profile()``). Best-effort: any
|
|
1133
|
+
resolution failure returns ``None`` so the gate degrades to its
|
|
1134
|
+
language-agnostic stage-1 (orphan) check rather than aborting.
|
|
1135
|
+
"""
|
|
1136
|
+
try:
|
|
1137
|
+
from codd.project_types import resolve_layout_profile
|
|
1138
|
+
|
|
1139
|
+
config, language, source_dirs, test_dirs = self._layout_inputs(project_root)
|
|
1140
|
+
return resolve_layout_profile(
|
|
1141
|
+
language=language,
|
|
1142
|
+
project_name=self._layout_project_name(project_root, config),
|
|
1143
|
+
source_dirs=source_dirs,
|
|
1144
|
+
test_dirs=test_dirs,
|
|
1145
|
+
config=config,
|
|
1146
|
+
project_root=project_root,
|
|
1147
|
+
)
|
|
1148
|
+
except Exception as exc: # noqa: BLE001 — authenticity degrades without a profile.
|
|
1149
|
+
self.echo(f"[greenfield] VB authenticity: layout profile unavailable ({exc}); stage-1 only.")
|
|
1150
|
+
return None
|
|
1151
|
+
|
|
1021
1152
|
def _default_implement_task_runner(
|
|
1022
1153
|
self,
|
|
1023
1154
|
project_root: Path,
|
|
@@ -1964,8 +2095,12 @@ def _enforce_stage_coverage_gate(
|
|
|
1964
2095
|
*,
|
|
1965
2096
|
coverage_gate: bool,
|
|
1966
2097
|
echo: Callable[[str], None],
|
|
2098
|
+
rerun: Callable[[str, Any], None] | None = None,
|
|
2099
|
+
rerun_oracle: Callable[[], None] | None = None,
|
|
2100
|
+
scope_resolver: Callable[[list[str]], Any] | None = None,
|
|
2101
|
+
authenticity_profile: Any = None,
|
|
1967
2102
|
) -> None:
|
|
1968
|
-
"""Project-wide verifiable-behavior coverage
|
|
2103
|
+
"""Project-wide verifiable-behavior coverage + authenticity gate (implement STAGE).
|
|
1969
2104
|
|
|
1970
2105
|
Runs ONCE after every implement task has completed, so all covering tests
|
|
1971
2106
|
already exist. This is the correct granularity for the project-wide VB
|
|
@@ -1975,20 +2110,35 @@ def _enforce_stage_coverage_gate(
|
|
|
1975
2110
|
— an early fixtures/helper task that writes no covering tests would
|
|
1976
2111
|
otherwise hard-fail against the whole project's VBs.)
|
|
1977
2112
|
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
2113
|
+
Two gates, both HARD (raise :class:`StageError` on failure):
|
|
2114
|
+
|
|
2115
|
+
1. **Coverage** (:func:`run_implement_coverage_gate`): every declared VB has a
|
|
2116
|
+
``covers``/``blocked`` marker. When a ``rerun`` callback is wired, an
|
|
2117
|
+
uncovered gap drives a bounded, TEST-SCOPED re-implementation with gap
|
|
2118
|
+
feedback (the previously-dormant feedback loop, now live) before failing.
|
|
2119
|
+
2. **Authenticity** (:func:`build_authenticity_report`): each ``covers``
|
|
2120
|
+
marker is a *credible* claim — attached to an executable test block that
|
|
2121
|
+
contains an assertion (anti-false-green; "add a marker" cannot be
|
|
2122
|
+
satisfied by marking an empty/skipped test). Gracefully degrades for
|
|
2123
|
+
stacks/files it cannot structurally parse.
|
|
2124
|
+
|
|
2125
|
+
``rerun(feedback, scope)`` re-implements the scoped TEST tasks under a
|
|
2126
|
+
write-fence (source is never edited by a VB rerun). ``scope_resolver`` maps
|
|
2127
|
+
the uncovered VB source docs to that scope. ``rerun_oracle`` re-runs the
|
|
2128
|
+
native implement-oracle AFTER a VB rerun (a test edit can break a helper
|
|
2129
|
+
symbol; the pipeline order is oracle→VB, so the oracle must be re-asserted).
|
|
2130
|
+
|
|
2131
|
+
Honors the greenfield ``coverage_gate`` option and the project-level
|
|
2132
|
+
``test_coverage.gate`` config.
|
|
1989
2133
|
"""
|
|
1990
2134
|
from codd.config import load_project_config
|
|
1991
|
-
from codd.verifiable_behavior_audit import
|
|
2135
|
+
from codd.verifiable_behavior_audit import (
|
|
2136
|
+
build_vb_coverage_audit,
|
|
2137
|
+
coverage_gate_enabled,
|
|
2138
|
+
coverage_gate_max_retries,
|
|
2139
|
+
format_gap_feedback,
|
|
2140
|
+
run_implement_coverage_gate,
|
|
2141
|
+
)
|
|
1992
2142
|
|
|
1993
2143
|
if not coverage_gate:
|
|
1994
2144
|
return
|
|
@@ -1998,6 +2148,9 @@ def _enforce_stage_coverage_gate(
|
|
|
1998
2148
|
except (FileNotFoundError, ValueError):
|
|
1999
2149
|
config = {}
|
|
2000
2150
|
|
|
2151
|
+
if not coverage_gate_enabled(config):
|
|
2152
|
+
return
|
|
2153
|
+
|
|
2001
2154
|
# Pass the configured test dirs as the audited output paths so the gate
|
|
2002
2155
|
# treats this as a test-related run (it is — every test the build will ever
|
|
2003
2156
|
# have now exists) and evaluates the FULL project VB universe in one pass.
|
|
@@ -2007,13 +2160,52 @@ def _enforce_stage_coverage_gate(
|
|
|
2007
2160
|
else:
|
|
2008
2161
|
audited_paths = ["tests/"]
|
|
2009
2162
|
|
|
2163
|
+
# --- Gate 1: coverage, with the (now-live) TEST-scoped feedback rerun. ---
|
|
2164
|
+
if rerun is not None and scope_resolver is not None:
|
|
2165
|
+
# Drive the bounded feedback loop HERE so each rerun is TEST-scoped (the
|
|
2166
|
+
# scope is recomputed from the current gap) and the native oracle is
|
|
2167
|
+
# re-asserted after each test edit. ``run_implement_coverage_gate`` is
|
|
2168
|
+
# then called once more with rerun=None to produce the final verdict +
|
|
2169
|
+
# gap reporting (no second loop).
|
|
2170
|
+
max_retries = coverage_gate_max_retries(config)
|
|
2171
|
+
report = build_vb_coverage_audit(project_root, config=config)
|
|
2172
|
+
attempt = 0
|
|
2173
|
+
while report.rows and report.uncovered_rows and attempt < max_retries:
|
|
2174
|
+
attempt += 1
|
|
2175
|
+
uncovered_docs = sorted({row.source_doc for row in report.uncovered_rows if row.source_doc})
|
|
2176
|
+
scope = scope_resolver(uncovered_docs)
|
|
2177
|
+
echo(
|
|
2178
|
+
f"Test coverage gate: {len(report.uncovered_rows)} uncovered verifiable behavior(s); "
|
|
2179
|
+
f"re-running TEST tasks with gap feedback (attempt {attempt}/{max_retries})"
|
|
2180
|
+
)
|
|
2181
|
+
try:
|
|
2182
|
+
rerun(format_gap_feedback(report), scope)
|
|
2183
|
+
if rerun_oracle is not None:
|
|
2184
|
+
# A VB test rerun can break test↔helper symbol coherence;
|
|
2185
|
+
# re-assert the native oracle so a type/import break never
|
|
2186
|
+
# rides into verify.
|
|
2187
|
+
rerun_oracle()
|
|
2188
|
+
except Exception as exc: # noqa: BLE001
|
|
2189
|
+
# A rerun that cannot proceed (e.g. a codegen/environment error)
|
|
2190
|
+
# must NOT mask the gate's verdict: log and stop the bounded loop,
|
|
2191
|
+
# then fall through to the final coverage audit, which fails
|
|
2192
|
+
# HONESTLY on whatever VBs are still uncovered. (The oracle gate
|
|
2193
|
+
# treats its rerun failures as hard because they ARE the defect;
|
|
2194
|
+
# here the authority is the coverage audit below, not the rerun.)
|
|
2195
|
+
echo(
|
|
2196
|
+
f"Test coverage gate: re-run attempt {attempt} could not complete ({exc}); "
|
|
2197
|
+
"stopping the feedback loop and evaluating coverage as-is."
|
|
2198
|
+
)
|
|
2199
|
+
break
|
|
2200
|
+
report = build_vb_coverage_audit(project_root, config=config)
|
|
2201
|
+
|
|
2010
2202
|
passed = run_implement_coverage_gate(
|
|
2011
2203
|
project_root,
|
|
2012
2204
|
config=config,
|
|
2013
2205
|
design_node=None,
|
|
2014
2206
|
output_paths=audited_paths,
|
|
2015
2207
|
opt_out=not coverage_gate,
|
|
2016
|
-
rerun=None,
|
|
2208
|
+
rerun=None, # the scoped loop (above) already ran; this is the final verdict
|
|
2017
2209
|
echo=echo,
|
|
2018
2210
|
echo_error=echo,
|
|
2019
2211
|
)
|
|
@@ -2024,6 +2216,29 @@ def _enforce_stage_coverage_gate(
|
|
|
2024
2216
|
"marker after all implement tasks completed (see the gap list above)"
|
|
2025
2217
|
)
|
|
2026
2218
|
|
|
2219
|
+
# --- Gate 2: marker authenticity (anti-false-green). HARD gate. ---
|
|
2220
|
+
from codd.vb_marker_authenticity import build_authenticity_report
|
|
2221
|
+
|
|
2222
|
+
auth = build_authenticity_report(project_root, config=config, profile=authenticity_profile)
|
|
2223
|
+
if auth.degraded_paths:
|
|
2224
|
+
echo(
|
|
2225
|
+
"Test coverage gate: marker-authenticity attachment/assertion checks skipped for "
|
|
2226
|
+
f"{len(auth.degraded_paths)} un-parseable file(s) (stage-1 orphan check still applied): "
|
|
2227
|
+
+ ", ".join(auth.degraded_paths)
|
|
2228
|
+
)
|
|
2229
|
+
if not auth.passed:
|
|
2230
|
+
for violation in auth.violations:
|
|
2231
|
+
echo(violation.message)
|
|
2232
|
+
raise StageError(
|
|
2233
|
+
"verifiable-behavior marker-authenticity gate failed for the implement stage: "
|
|
2234
|
+
f"{len(auth.violations)} `codd: covers vb=` marker(s) are not credible coverage claims "
|
|
2235
|
+
"(attached to a skipped/empty test, an orphan id, or a test with no assertion). A "
|
|
2236
|
+
"covers marker must sit on an executable test that asserts the behavior."
|
|
2237
|
+
)
|
|
2238
|
+
echo(
|
|
2239
|
+
f"Test coverage gate: marker authenticity OK ({len(auth.degraded_paths)} file(s) stage-1-only)."
|
|
2240
|
+
)
|
|
2241
|
+
|
|
2027
2242
|
|
|
2028
2243
|
def _default_verify_runner(
|
|
2029
2244
|
project_root: Path,
|
|
@@ -1884,9 +1884,10 @@ def _build_implementation_prompt(
|
|
|
1884
1884
|
if _spec_targets_tests(spec, config):
|
|
1885
1885
|
lines.extend(
|
|
1886
1886
|
[
|
|
1887
|
-
"Verifiable-behavior traceability markers:",
|
|
1888
|
-
"-
|
|
1889
|
-
"-
|
|
1887
|
+
"Verifiable-behavior traceability markers (release-blocking — the implement stage gate fails the build on any gap):",
|
|
1888
|
+
"- The design and its dependency test documents declare verifiable behaviors in a traceability table whose first column is `VB-<id>`. Reconcile EVERY declared VB id against the tests you write: for each VB, produce either a real test that PROVES it (carrying a `codd: covers vb=<id>` comment marker) or, if it genuinely cannot be tested yet, an explicit `codd: blocked vb=<id> reason=<short_reason>` marker. Never leave a declared VB silently uncovered.",
|
|
1889
|
+
"- A `codd: covers vb=<id>` marker is a CLAIM that the test proves that behavior. Only attach it to a test that (a) is actually executed — not `it.skip`/`test.todo`/`describe.skip`/`@pytest.mark.skip`/disabled — and (b) contains at least one assertion that would FAIL if the behavior were broken. A marker on an empty test, a skipped test, or a smoke test with no assertion is a false coverage claim and the authenticity gate will reject it. If no proving test exists, create or extend a real one FIRST, then mark it — do not add the marker to make the gate pass.",
|
|
1890
|
+
"- One marker per behavior, placed inside the test file (a comment immediately above the proving test). Example (pytest): `# codd: covers vb=VB-07` directly above `def test_rejects_missing_id(): ...` whose body asserts the rejection. Example (vitest): `// codd: covers vb=VB-07` directly above the `it('rejects missing id', () => { expect(...).toThrow(); })`.",
|
|
1890
1891
|
"",
|
|
1891
1892
|
"Scoped assertions (precision, not weakening):",
|
|
1892
1893
|
"- When a test asserts a CONTENT constraint over rendered or serialized output (e.g. \"displayed amounts contain no decimal point\", \"no personal data appears in the response\", \"every listed price shows a currency symbol\"), assert ONLY against the specific values or elements the constraint governs: parse and read the relevant nodes/fields under test (DOM elements, table cells, the parsed JSON values, the matched record), not the whole response body.",
|
|
@@ -540,6 +540,83 @@ class LayoutProfile:
|
|
|
540
540
|
),
|
|
541
541
|
}
|
|
542
542
|
|
|
543
|
+
def harness_owned_scaffold_paths(self) -> tuple[str, ...]:
|
|
544
|
+
"""Project-relative files the harness SCAFFOLD owns (the contract escape hatch).
|
|
545
|
+
|
|
546
|
+
These are the files :func:`scaffold_layout` creates for this stack —
|
|
547
|
+
topology + config the SUT never "owns" via a task, yet which are
|
|
548
|
+
legitimate generated artifacts (the orphan-artifact invariant's "owned by
|
|
549
|
+
a task OR an explicit harness/profile contract" branch). The orphan-gate
|
|
550
|
+
and the scoped-rerun write-fence consult this list so a scaffold file
|
|
551
|
+
(e.g. TS ``vitest.config.ts`` / ``tsconfig.json``) is never mis-flagged as
|
|
552
|
+
an unowned orphan and never reverted by the fence.
|
|
553
|
+
|
|
554
|
+
Language-agnostic: each path is DERIVED from this profile's own fields
|
|
555
|
+
(the same values the scaffolder uses) + the toolchain manifest/lock
|
|
556
|
+
filenames, so a new stack inherits the contract by populating its profile,
|
|
557
|
+
with no per-language logic in the gate. The list is a STATIC declaration of
|
|
558
|
+
what the scaffolder *can* create (not what is present on disk); callers
|
|
559
|
+
that need only existing files filter by ``is_file()``.
|
|
560
|
+
"""
|
|
561
|
+
paths: list[str] = []
|
|
562
|
+
|
|
563
|
+
def _add(rel: str) -> None:
|
|
564
|
+
norm = _norm_rel(rel)
|
|
565
|
+
if norm and norm not in paths:
|
|
566
|
+
paths.append(norm)
|
|
567
|
+
|
|
568
|
+
# Dependency manifest + lockfile(s) the toolchain contract owns
|
|
569
|
+
# (package.json / package-lock.json; pyproject.toml / uv.lock; …).
|
|
570
|
+
toolchain = self.toolchain_dependencies
|
|
571
|
+
if toolchain is not None:
|
|
572
|
+
_add(toolchain.manifest_filename)
|
|
573
|
+
for lock in toolchain.lock_filenames:
|
|
574
|
+
_add(lock)
|
|
575
|
+
|
|
576
|
+
if self.language == "python":
|
|
577
|
+
# _scaffold_python: pyproject + package <__init__>/<__main__> + test <__init__>.
|
|
578
|
+
_add(_PYPROJECT_FILENAME)
|
|
579
|
+
if self.requires_package_init:
|
|
580
|
+
_add(f"{self.package_root}/__init__.py")
|
|
581
|
+
_add(f"{self.package_root}/__main__.py")
|
|
582
|
+
if self.requires_test_init:
|
|
583
|
+
_add(f"{self.test_root}/__init__.py")
|
|
584
|
+
elif self.language in ("typescript", "node"):
|
|
585
|
+
# _scaffold_typescript: tsconfig + vitest config + package.json.
|
|
586
|
+
_add(_TSCONFIG_FILENAME)
|
|
587
|
+
_add(_VITEST_CONFIG_FILENAME)
|
|
588
|
+
_add(_PACKAGE_JSON_FILENAME)
|
|
589
|
+
|
|
590
|
+
return tuple(paths)
|
|
591
|
+
|
|
592
|
+
def test_block_profile(self) -> Any:
|
|
593
|
+
"""Resolve this stack's test-structure adapter for the VB authenticity gate.
|
|
594
|
+
|
|
595
|
+
Returns a ``codd.vb_marker_authenticity.TestBlockProfile`` (a per-language
|
|
596
|
+
parser that locates executable test blocks and resolves skip/assertion
|
|
597
|
+
facts) or ``None`` for a stack with no adapter — in which case the
|
|
598
|
+
authenticity gate gracefully degrades to its language-agnostic stage 1
|
|
599
|
+
(orphan-marker) check only. This is the SINGLE registration point for a
|
|
600
|
+
new stack's test parser, mirroring :meth:`harness_owned_scaffold_paths`
|
|
601
|
+
(dispatch on ``self.language``, no per-language logic in the gate). The
|
|
602
|
+
import is lazy so the authenticity module (which imports the VB audit) is
|
|
603
|
+
never pulled in at ``project_types`` import time.
|
|
604
|
+
"""
|
|
605
|
+
|
|
606
|
+
try:
|
|
607
|
+
from codd.vb_marker_authenticity import (
|
|
608
|
+
PythonTestBlockProfile,
|
|
609
|
+
TypeScriptTestBlockProfile,
|
|
610
|
+
)
|
|
611
|
+
except Exception: # noqa: BLE001 — adapter is optional; degrade if unavailable.
|
|
612
|
+
return None
|
|
613
|
+
|
|
614
|
+
if self.language == "python":
|
|
615
|
+
return PythonTestBlockProfile()
|
|
616
|
+
if self.language in ("typescript", "node", "javascript"):
|
|
617
|
+
return TypeScriptTestBlockProfile()
|
|
618
|
+
return None
|
|
619
|
+
|
|
543
620
|
|
|
544
621
|
def normalize_package_name(project_name: str | None, *, fallback: str = "app") -> str:
|
|
545
622
|
"""Derive a valid Python package identifier from a project name.
|