codd-dev 2.92.0__tar.gz → 2.94.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.92.0 → codd_dev-2.94.0}/PKG-INFO +1 -1
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/__init__.py +1 -1
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/cli.py +22 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/contracts_registry/registry.py +5 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/greenfield/pipeline.py +59 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/auto_scope_guard.py +185 -4
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/command_plan.py +56 -16
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/compose.py +182 -12
- codd_dev-2.94.0/codd/stack/obligations.py +171 -0
- codd_dev-2.94.0/codd/stack/project.py +252 -0
- codd_dev-2.94.0/codd/stack/replacement_proof.py +456 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/pyproject.toml +1 -1
- codd_dev-2.92.0/codd/stack/obligations.py +0 -76
- codd_dev-2.92.0/codd/stack/project.py +0 -112
- {codd_dev-2.92.0 → codd_dev-2.94.0}/.gitignore +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/LICENSE +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/README.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/__main__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/assembler.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/bridge.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/clustering.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/confidence.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/config.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/config_schema.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/contracts.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/contracts_registry/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/contracts_registry/__main__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/contracts_registry/certify.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/contracts_registry/generate_matrix.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/coverage_execution_coherence.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/defaults.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/defaults.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployer.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/design_md.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/discovery.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/drift.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/e2e_harness.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/env_refs.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/extractor.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fixer.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/generator.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/graph.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/implement_oracle.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/implement_oracle_scope.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/implement_oracle_types.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/implementer.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/inheritance.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/adapters/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/adapters/implement_oracle.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/adapters/oracle_go.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/adapters/oracle_python.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/adapters/oracle_typescript.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/adapters/runner_report.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/builtin_adapters.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/compat.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/contract.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/loader.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/oracle_executor.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/path_planner.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/profile.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/profiles/go.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/profiles/python.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/profiles/typescript.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/registry.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/verify_executor.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/verify_plan.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/measure.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/extractor_registry.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/regex_strategies.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/planner.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/policy.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/project_types.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/propagate.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/propagator.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/reference_resolution.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/registry.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/history.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/require.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/restore.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/scanner.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/adapters/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/adapters/_base.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/adapters/nextjs.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/adapters/playwright.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/command_authenticity.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/loader.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/lock.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/profile.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/registry.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/resolve.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/synth.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/test_detection.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/traceability.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/validator.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/vb_marker_authenticity.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/vb_rerun_scope.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/verifiable_behavior_audit.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/watch/events.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/wiring.py +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/dogfood/README.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/examples/README.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.92.0 → codd_dev-2.94.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.94.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
|
|
@@ -7697,6 +7697,28 @@ def _intake_stack_contract_for_verify(project_root: Path, *, stack_command_execu
|
|
|
7697
7697
|
f"({', '.join(plan.command_ids)})"
|
|
7698
7698
|
)
|
|
7699
7699
|
|
|
7700
|
+
# Stack obligation CHECKER gate (Contract Kernel v2.77e) — the verify-path mirror of
|
|
7701
|
+
# the greenfield pipeline's :meth:`GreenfieldPipeline._enforce_stack_obligations`.
|
|
7702
|
+
# AFTER materialization (v2.77c) + authenticity (v2.77d), CHECK the composed
|
|
7703
|
+
# framework/addon OBLIGATIONS as a red/green gate: the Next.js ignoreBuildErrors guard
|
|
7704
|
+
# reds a build that would pass with type errors; the Playwright e2e_actually_executed
|
|
7705
|
+
# obligation reds a 0-test run. Anti-false-green: a missing/disabled/faulting checker
|
|
7706
|
+
# or an unenforceable ERROR obligation is RED (honest non-zero exit), never a silent
|
|
7707
|
+
# pass. Uses the ALREADY-RESOLVED ``contract`` from intake (no re-resolution from disk
|
|
7708
|
+
# — avoids a TOCTOU skip) and the SAME current-run evidence the authenticity layer
|
|
7709
|
+
# blessed. A non-stack project never reaches here (byte-identical).
|
|
7710
|
+
from codd.stack.project import StackObligationGateError, enforce_stack_obligation_gate
|
|
7711
|
+
|
|
7712
|
+
try:
|
|
7713
|
+
enforce_stack_obligation_gate(contract, project_root)
|
|
7714
|
+
except StackObligationGateError as exc:
|
|
7715
|
+
click.echo(f"[verify] stack obligation gate: {exc}", err=True)
|
|
7716
|
+
raise SystemExit(1) from exc
|
|
7717
|
+
click.echo(
|
|
7718
|
+
f"[verify] stack obligation gate: {len(contract.obligations)} obligation(s) checked "
|
|
7719
|
+
"— all enforced obligations satisfied"
|
|
7720
|
+
)
|
|
7721
|
+
|
|
7700
7722
|
|
|
7701
7723
|
def _run_verify_once(
|
|
7702
7724
|
path: str,
|
|
@@ -673,6 +673,11 @@ _COVERED: tuple[Contract, ...] = (
|
|
|
673
673
|
"tests/repair/test_auto_repair_optin_and_scope.py (scope rejects failing-test edit / "
|
|
674
674
|
"codd.yaml weaken / spec-doc edit; harness_contract_violation scaffold-fix allowed; "
|
|
675
675
|
"max-files valve escalates)",
|
|
676
|
+
"tests/stack/test_stack_repair_governance.py (Contract Kernel v2.77f: scope-fence "
|
|
677
|
+
"rejects stack.lock / .codd/stack / declared codd/stack profile / codd.yaml stack-block "
|
|
678
|
+
"edits unconditionally, but allows real codd/stack source when CoDD is the SUT; "
|
|
679
|
+
"satisfy-source GREEN; defense-in-depth weaken/checker-delete/lock-refresh; "
|
|
680
|
+
"replace_with_proof GREEN only with executable behavioral-subsumption proof)",
|
|
676
681
|
),
|
|
677
682
|
finding_ids=("F-greenfield-autorepair-optin-and-scope", "F-autorepair-test-command-unrepairable"),
|
|
678
683
|
),
|
|
@@ -533,6 +533,26 @@ class GreenfieldPipeline:
|
|
|
533
533
|
{"status": STATUS_PENDING, "detail": ""}, str(exc),
|
|
534
534
|
)
|
|
535
535
|
|
|
536
|
+
# Stack obligation CHECKER gate (Contract Kernel v2.77e) — turn the framework/
|
|
537
|
+
# addon OBLIGATIONS into a red/green gate, AFTER materialization+authenticity. The
|
|
538
|
+
# composed commands now run (v2.77c) and are authentic (v2.77d); this CHECKS the
|
|
539
|
+
# declared obligations (the Next.js ignoreBuildErrors guard reds a build that would
|
|
540
|
+
# pass with type errors; the Playwright e2e_actually_executed obligation reds a
|
|
541
|
+
# 0-test run). Anti-false-green: a missing/disabled/faulting checker or an
|
|
542
|
+
# unenforceable ERROR obligation is RED, never a silent pass. Uses the ALREADY-
|
|
543
|
+
# RESOLVED contract (no re-resolution from disk — avoids a TOCTOU skip) and the
|
|
544
|
+
# SAME current-run evidence the authenticity layer blessed. Only for stack-declared
|
|
545
|
+
# projects (contract is not None) — a non-stack run is byte-identical (no gate).
|
|
546
|
+
# Routed through _fail like intake/lock/materialization.
|
|
547
|
+
try:
|
|
548
|
+
if contract is not None:
|
|
549
|
+
self._enforce_stack_obligations(project_root, session, contract)
|
|
550
|
+
except StageError as exc:
|
|
551
|
+
return self._fail(
|
|
552
|
+
project_root, session, options, "stack_obligations",
|
|
553
|
+
{"status": STATUS_PENDING, "detail": ""}, str(exc),
|
|
554
|
+
)
|
|
555
|
+
|
|
536
556
|
runners: dict[str, Callable[[Path, dict[str, Any], dict[str, Any]], None]] = {
|
|
537
557
|
"init": self._stage_init,
|
|
538
558
|
"elicit": self._stage_elicit,
|
|
@@ -756,6 +776,45 @@ class GreenfieldPipeline:
|
|
|
756
776
|
f"{len(plan.slots)} slot(s) invoked ({', '.join(plan.command_ids)})"
|
|
757
777
|
)
|
|
758
778
|
|
|
779
|
+
# ── stack obligation checker gate (Contract Kernel v2.77e) ──
|
|
780
|
+
|
|
781
|
+
def _enforce_stack_obligations(self, project_root: Path, session: dict[str, Any], contract) -> None:
|
|
782
|
+
"""Run the composed stack obligation checkers as a red/green gate (v2.77e).
|
|
783
|
+
|
|
784
|
+
See the call site in :meth:`run`. Only invoked for stack-declared projects
|
|
785
|
+
(``contract is not None``); non-stack projects never reach here, so they are
|
|
786
|
+
byte-identical (no obligation gate at all).
|
|
787
|
+
|
|
788
|
+
Uses the ALREADY-RESOLVED ``contract`` (passed in from intake/lock/
|
|
789
|
+
materialization) — NOT a re-resolution from disk — so a stack file that changes
|
|
790
|
+
or is deleted after materialization cannot make this gate silently skip (a
|
|
791
|
+
TOCTOU false-green). :func:`enforce_stack_obligation_gate` invokes every
|
|
792
|
+
obligation's registered checker with ``project_root`` plus the current-run
|
|
793
|
+
evidence (the SAME e2e report the authenticity layer blessed), and raises
|
|
794
|
+
:class:`StackObligationGateError` unless every ERROR obligation was genuinely
|
|
795
|
+
enforced AND satisfied: a blocking violation, an unenforced ERROR obligation
|
|
796
|
+
(no registered checker — unverifiable), or a checker fault (raised / None /
|
|
797
|
+
malformed return) is RED. Translated to :class:`StageError` so the autopilot
|
|
798
|
+
reports it honestly via ``_fail``. The per-obligation verdict counts are
|
|
799
|
+
recorded in the run trace (observable, like the lock verdict + command plan).
|
|
800
|
+
"""
|
|
801
|
+
from codd.stack.project import StackObligationGateError, enforce_stack_obligation_gate
|
|
802
|
+
|
|
803
|
+
try:
|
|
804
|
+
result = enforce_stack_obligation_gate(contract, project_root)
|
|
805
|
+
except StackObligationGateError as exc:
|
|
806
|
+
self.echo(f"[greenfield] stack obligation gate: {exc}")
|
|
807
|
+
raise StageError(str(exc)) from exc
|
|
808
|
+
|
|
809
|
+
record = session.get("stack_contract")
|
|
810
|
+
if isinstance(record, dict) and result is not None:
|
|
811
|
+
record["stack_obligations_checked"] = len(contract.obligations)
|
|
812
|
+
record["stack_obligations_unenforced"] = [o.id for o in result.unenforced]
|
|
813
|
+
self.echo(
|
|
814
|
+
"[greenfield] stack obligation gate: "
|
|
815
|
+
f"{len(contract.obligations)} obligation(s) checked — all enforced obligations satisfied"
|
|
816
|
+
)
|
|
817
|
+
|
|
759
818
|
# ── option resolution ───────────────────────────────────
|
|
760
819
|
|
|
761
820
|
def _resolve_options(self, project_root: Path) -> dict[str, Any]:
|
|
@@ -136,6 +136,53 @@ _SPEC_DIR_MARKERS: frozenset[str] = frozenset(
|
|
|
136
136
|
{"docs", "doc", "design", "designs", "specs", "spec", "requirements"}
|
|
137
137
|
)
|
|
138
138
|
|
|
139
|
+
# ── Stack contract artefacts (Contract Kernel v2.77f — Repair Governance) ────
|
|
140
|
+
#
|
|
141
|
+
# The STACK contract — the resolved framework/addon obligations, their checkers,
|
|
142
|
+
# the composed command plan, the replace_with_proof witnesses, and the pinned
|
|
143
|
+
# ``stack.lock`` — is the "definition of pass" for the framework layer. A repair MAY
|
|
144
|
+
# fix SUT SOURCE to *satisfy* a stack obligation, but it must NEVER edit the stack
|
|
145
|
+
# CONTRACT itself: weakening an obligation, deleting/unregistering a checker,
|
|
146
|
+
# inserting a no-op command, refreshing the lock, or mutating a proof witness are
|
|
147
|
+
# exactly how a repair would silence a red stack gate (false-green). These artefacts
|
|
148
|
+
# are therefore OFF-LIMITS to ANY auto-repair edit — UNCONDITIONALLY (unlike the
|
|
149
|
+
# oracle/doc fence above, which is gated on a code-addressable failure). Rationale: a
|
|
150
|
+
# stack profile/obligation/checker/proof is the contract, never SUT source; the lock
|
|
151
|
+
# is (re)generated ONLY on the explicit ``bootstrap_stack_lock`` first-generation
|
|
152
|
+
# creation path, never by an unattended repair. There is no failure class for which an
|
|
153
|
+
# auto-repair legitimately rewrites a stack contract artefact (a drift is cleared by
|
|
154
|
+
# reverting the contract change or by an explicit proof-backed update, not by repair)
|
|
155
|
+
# — so this fence does not carry the harness-contract exception the oracle fence does.
|
|
156
|
+
#
|
|
157
|
+
# Recognition (GPT-5.5 Pro consult 2026-06-21) is deliberately CONSERVATIVE about
|
|
158
|
+
# false-positives, because CoDD ITSELF is a frequent SUT under repair (dogfood):
|
|
159
|
+
# * the ``stack.lock`` basename anywhere — unconditional. (A rare unrelated app file
|
|
160
|
+
# literally named ``stack.lock`` is an acceptable false-positive for this kernel
|
|
161
|
+
# layer: preventing an unattended lock refresh outweighs it; manual repair still
|
|
162
|
+
# works.)
|
|
163
|
+
# * any path under a ``.codd/stack/`` directory — unconditional, ~zero false-positive
|
|
164
|
+
# risk: anything under ``.codd`` is harness/contract STATE, never SUT source.
|
|
165
|
+
# * a path under ``codd/stack/`` is fenced ONLY when it is PROVENANCED as a
|
|
166
|
+
# project-local stack-contract file by the project's ``stack:`` declaration (a
|
|
167
|
+
# ``profiles:`` / ``proofs:`` / ``checkers:`` / ``obligations:`` / ``root:`` path it
|
|
168
|
+
# references) — NOT by a blind directory rule. A blind ``codd/stack/`` rule would
|
|
169
|
+
# wrongly fence real CoDD framework SOURCE (``codd/stack/compose.py``, ``lock.py``,
|
|
170
|
+
# ``command_plan.py``, …) whenever CoDD is the SUT, a genuine false-RED.
|
|
171
|
+
# * the ``stack:`` block of ``codd.yaml`` — fenced UNCONDITIONALLY when a patch to
|
|
172
|
+
# ``codd.yaml`` touches the ``stack:`` key (the existing whole-file oracle fence is
|
|
173
|
+
# gated on a code-addressable failure, leaving a non-code-addressable hole through
|
|
174
|
+
# which a repair could weaken the stack declaration; this closes it without
|
|
175
|
+
# disturbing the existing non-stack codd.yaml behaviour).
|
|
176
|
+
_STACK_LOCK_BASENAME = "stack.lock"
|
|
177
|
+
#: Canonical project-local stack-contract STATE root — always harness, never SUT.
|
|
178
|
+
_STACK_STATE_DIR_MARKER: tuple[str, ...] = (".codd", "stack")
|
|
179
|
+
#: ``codd.yaml`` keys whose declarations point at project-local stack-contract files
|
|
180
|
+
#: (profiles / proof witnesses / checker / obligation sources / a contract root). A
|
|
181
|
+
#: ``codd/stack/`` path is fenced only when it matches one of these declared paths.
|
|
182
|
+
_STACK_DECL_PATH_KEYS: frozenset[str] = frozenset(
|
|
183
|
+
{"profiles", "proofs", "checkers", "obligations", "root", "roots", "profile_root", "proof_root"}
|
|
184
|
+
)
|
|
185
|
+
|
|
139
186
|
#: Test-file recognition (mirrors common conventions across stacks). Used to
|
|
140
187
|
#: flag a patch that edits a TEST for a non-harness failure (B0 keeps those
|
|
141
188
|
#: read-only; we enforce it against the actual proposal path even when the
|
|
@@ -167,15 +214,19 @@ def evaluate_auto_patch_scope(
|
|
|
167
214
|
caller (the repair loop, in auto mode only) escalates/rejects on
|
|
168
215
|
``allowed=False``.
|
|
169
216
|
"""
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
if not patch_paths:
|
|
217
|
+
patches = [p for p in proposal.patches if _normalize(p.file_path)]
|
|
218
|
+
if not patches:
|
|
173
219
|
# An empty proposal is rejected upstream; nothing to scope-check.
|
|
174
220
|
return AutoScopeDecision(allowed=True, reason="no patch paths to validate")
|
|
175
221
|
|
|
176
222
|
failure_class = str(getattr(failure, "failure_class", "") or "")
|
|
177
223
|
code_addressable = bool(getattr(failure, "code_addressable", False))
|
|
178
224
|
allowlist = _editable_allowlist(failure, rca)
|
|
225
|
+
# Stack-contract path provenance from the project's ``stack:`` declaration (so a
|
|
226
|
+
# ``codd/stack/`` path is fenced only when the project actually declares it as a
|
|
227
|
+
# contract file — never a blind directory rule that would wrongly fence real CoDD
|
|
228
|
+
# framework source when CoDD is the SUT). Empty for a non-stack project.
|
|
229
|
+
declared_stack_paths = _declared_stack_contract_paths(codd_yaml)
|
|
179
230
|
# Containment is enforced strictly ONLY when the primary failure resolved a
|
|
180
231
|
# CONCRETE editable path set (B0 attribution of an executed test/typecheck
|
|
181
232
|
# failure). A purely structural DAG failure carries logical node IDs
|
|
@@ -187,13 +238,16 @@ def evaluate_auto_patch_scope(
|
|
|
187
238
|
|
|
188
239
|
offending: list[str] = []
|
|
189
240
|
reasons: list[str] = []
|
|
190
|
-
for
|
|
241
|
+
for patch in patches:
|
|
242
|
+
path = _normalize(patch.file_path)
|
|
191
243
|
verdict = _classify_path(
|
|
192
244
|
path,
|
|
193
245
|
failure_class=failure_class,
|
|
194
246
|
code_addressable=code_addressable,
|
|
195
247
|
allowlist=allowlist,
|
|
196
248
|
enforce_containment=has_resolved_targets,
|
|
249
|
+
declared_stack_paths=declared_stack_paths,
|
|
250
|
+
patch_content=getattr(patch, "content", "") or "",
|
|
197
251
|
)
|
|
198
252
|
if verdict is not None:
|
|
199
253
|
offending.append(path)
|
|
@@ -285,11 +339,20 @@ def _classify_path(
|
|
|
285
339
|
code_addressable: bool,
|
|
286
340
|
allowlist: set[str],
|
|
287
341
|
enforce_containment: bool,
|
|
342
|
+
declared_stack_paths: frozenset[str] = frozenset(),
|
|
343
|
+
patch_content: str = "",
|
|
288
344
|
) -> str | None:
|
|
289
345
|
"""Return a rejection reason for *path*, or ``None`` when it is in-scope.
|
|
290
346
|
|
|
291
347
|
Role precedence (most-protected first):
|
|
292
348
|
|
|
349
|
+
0. Stack contract artefact (``stack.lock`` / a ``codd/stack/`` profile /
|
|
350
|
+
obligation / checker) → reject UNCONDITIONALLY (Contract Kernel v2.77f).
|
|
351
|
+
A repair fixes SUT source to *satisfy* a stack obligation; it never edits
|
|
352
|
+
the stack contract (weaken / delete checker / no-op / refresh lock = a
|
|
353
|
+
silenced gate = false-green). No failure-class exception (unlike the oracle
|
|
354
|
+
fence): a stack artefact is never the thing an auto-repair legitimately
|
|
355
|
+
rewrites.
|
|
293
356
|
1. Oracle / spec / gate-control artefact + a code-addressable failure →
|
|
294
357
|
reject, UNLESS the failure class explicitly identifies THIS artefact as
|
|
295
358
|
the defect (a harness-contract violation whose attribution named it).
|
|
@@ -302,6 +365,38 @@ def _classify_path(
|
|
|
302
365
|
since the oracle/test protections above already block the false-green
|
|
303
366
|
vector and structural source/doc drift repair is legitimate.
|
|
304
367
|
"""
|
|
368
|
+
# (0) Stack contract artefact protection — UNCONDITIONAL (Contract Kernel v2.77f).
|
|
369
|
+
# Checked FIRST and independent of failure_class / code_addressable: a repair must
|
|
370
|
+
# never edit the framework-stack contract (the definition of "pass" for the stack
|
|
371
|
+
# layer). The SUT-source fix path (satisfy/strengthen) stays open; only the
|
|
372
|
+
# contract artefacts themselves are fenced. Recognition is provenance-aware so it
|
|
373
|
+
# does NOT false-RED real CoDD framework source when CoDD is the SUT.
|
|
374
|
+
if _is_stack_contract_artifact(path, declared_stack_paths=declared_stack_paths):
|
|
375
|
+
return (
|
|
376
|
+
f"'{path}' is a STACK CONTRACT artefact (stack.lock / a .codd/stack or "
|
|
377
|
+
"declared project-local stack profile, obligation, checker, or proof witness); "
|
|
378
|
+
"auto-repair may fix SUT source to SATISFY a stack obligation but must NEVER "
|
|
379
|
+
"edit the stack contract itself — weakening an obligation, deleting a checker, "
|
|
380
|
+
"inserting a no-op command, refreshing the lock, or mutating a proof witness "
|
|
381
|
+
"would silence a stack gate (false-green). A stack drift is cleared by reverting "
|
|
382
|
+
"the contract change or an explicit proof-backed update, never by an unattended "
|
|
383
|
+
"repair (Contract Kernel v2.77f)."
|
|
384
|
+
)
|
|
385
|
+
|
|
386
|
+
# (0b) The ``stack:`` block of codd.yaml — fenced UNCONDITIONALLY when a patch to
|
|
387
|
+
# codd.yaml touches it. The whole-file oracle fence (rule 1) only engages for a
|
|
388
|
+
# code-addressable failure; this closes the non-code-addressable hole through which
|
|
389
|
+
# a repair could weaken the stack declaration, WITHOUT changing the existing
|
|
390
|
+
# non-stack codd.yaml behaviour (a codd.yaml patch that does not touch ``stack:`` is
|
|
391
|
+
# still handled by the oracle fence exactly as before).
|
|
392
|
+
if _is_codd_yaml(path) and _patch_touches_stack_block(patch_content):
|
|
393
|
+
return (
|
|
394
|
+
f"'{path}' patch modifies the codd.yaml `stack:` block (the project's stack "
|
|
395
|
+
"contract declaration); auto-repair must not alter the declared stack contract "
|
|
396
|
+
"(language/frameworks/addons/obligations) to clear a failure — that is the "
|
|
397
|
+
"weaken-the-contract false-green vector (Contract Kernel v2.77f)."
|
|
398
|
+
)
|
|
399
|
+
|
|
305
400
|
is_oracle = _is_oracle_artifact(path)
|
|
306
401
|
is_test = _is_test_file(path)
|
|
307
402
|
harness_contract = failure_class == "harness_contract_violation"
|
|
@@ -346,6 +441,92 @@ def _classify_path(
|
|
|
346
441
|
)
|
|
347
442
|
|
|
348
443
|
|
|
444
|
+
def _is_stack_contract_artifact(
|
|
445
|
+
path: str, *, declared_stack_paths: frozenset[str] = frozenset()
|
|
446
|
+
) -> bool:
|
|
447
|
+
"""True for a framework-stack CONTRACT artefact (Contract Kernel v2.77f).
|
|
448
|
+
|
|
449
|
+
Provenance-aware (GPT-5.5 Pro consult 2026-06-21) to avoid false-REDs:
|
|
450
|
+
|
|
451
|
+
* the ``stack.lock`` basename anywhere — unconditional;
|
|
452
|
+
* any path under a ``.codd/stack/`` directory — unconditional (harness state);
|
|
453
|
+
* a path under ``codd/stack/`` ONLY when it matches a stack-contract file the
|
|
454
|
+
project's ``stack:`` declaration references (``declared_stack_paths``) — NOT a
|
|
455
|
+
blind directory rule (which would wrongly fence real CoDD framework source when
|
|
456
|
+
CoDD is the SUT).
|
|
457
|
+
|
|
458
|
+
The curated profiles ship INSIDE the codd PACKAGE (never in a project's working
|
|
459
|
+
tree). The ``stack:`` block of ``codd.yaml`` is fenced separately (a hunk-aware
|
|
460
|
+
check on a codd.yaml patch), not here.
|
|
461
|
+
"""
|
|
462
|
+
pure = PurePosixPath(path)
|
|
463
|
+
if pure.name.lower() == _STACK_LOCK_BASENAME:
|
|
464
|
+
return True
|
|
465
|
+
parts_lower = tuple(part.lower() for part in pure.parts)
|
|
466
|
+
if _contains_subsequence(parts_lower, _STACK_STATE_DIR_MARKER):
|
|
467
|
+
return True
|
|
468
|
+
# Provenanced project-local stack-contract file (declared in codd.yaml's stack:).
|
|
469
|
+
return path in declared_stack_paths
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
def _declared_stack_contract_paths(codd_yaml: Mapping[str, Any] | None) -> frozenset[str]:
|
|
473
|
+
"""Project-local stack-contract file/dir paths declared in codd.yaml's ``stack:``.
|
|
474
|
+
|
|
475
|
+
Reads the ``stack:`` block and collects any path-valued entries under the
|
|
476
|
+
contract-source keys (:data:`_STACK_DECL_PATH_KEYS` — ``profiles`` / ``proofs`` /
|
|
477
|
+
``checkers`` / ``obligations`` / ``root`` …). These are the project's OWN
|
|
478
|
+
stack-contract files; a ``codd/stack/`` patch path is fenced only when it matches
|
|
479
|
+
one (so real CoDD framework source is never fenced). A directory entry fences
|
|
480
|
+
everything under it. Empty for a non-stack project (the fence then keys only on the
|
|
481
|
+
``stack.lock`` basename + ``.codd/stack/`` — neither of which affects a non-stack
|
|
482
|
+
repair). Best-effort + defensive: any malformed shape yields no extra paths.
|
|
483
|
+
"""
|
|
484
|
+
if not isinstance(codd_yaml, Mapping):
|
|
485
|
+
return frozenset()
|
|
486
|
+
stack = codd_yaml.get("stack")
|
|
487
|
+
if not isinstance(stack, Mapping):
|
|
488
|
+
return frozenset()
|
|
489
|
+
collected: set[str] = set()
|
|
490
|
+
|
|
491
|
+
def _add_path_values(value: Any) -> None:
|
|
492
|
+
if isinstance(value, str):
|
|
493
|
+
norm = _normalize(value)
|
|
494
|
+
if norm:
|
|
495
|
+
collected.add(norm)
|
|
496
|
+
elif isinstance(value, (list, tuple)):
|
|
497
|
+
for item in value:
|
|
498
|
+
_add_path_values(item)
|
|
499
|
+
elif isinstance(value, Mapping):
|
|
500
|
+
for item in value.values():
|
|
501
|
+
_add_path_values(item)
|
|
502
|
+
|
|
503
|
+
for key in _STACK_DECL_PATH_KEYS:
|
|
504
|
+
if key in stack:
|
|
505
|
+
_add_path_values(stack[key])
|
|
506
|
+
return frozenset(collected)
|
|
507
|
+
|
|
508
|
+
|
|
509
|
+
def _is_codd_yaml(path: str) -> bool:
|
|
510
|
+
name = PurePosixPath(path).name.lower()
|
|
511
|
+
return name in {"codd.yaml", "codd.yml"}
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
def _patch_touches_stack_block(patch_content: str) -> bool:
|
|
515
|
+
"""True when a codd.yaml patch references the ``stack:`` mapping key.
|
|
516
|
+
|
|
517
|
+
Conservative + content-based (works for both a full-file replacement and a unified
|
|
518
|
+
diff): a top-level or diff-added ``stack:`` line means the patch is shaping the
|
|
519
|
+
stack declaration. Matching ``(^|\\n)\\s*[+]?\\s*stack:`` catches a YAML key at any
|
|
520
|
+
indentation and a diff ``+stack:`` line. False-positives (a codd.yaml that merely
|
|
521
|
+
keeps an unrelated ``stack:`` line) are acceptable — auto-repair editing codd.yaml is
|
|
522
|
+
already the discouraged path, and a stack-declaring project's codd.yaml edit is far
|
|
523
|
+
better escalated to a human than silently applied.
|
|
524
|
+
"""
|
|
525
|
+
if not patch_content:
|
|
526
|
+
return False
|
|
527
|
+
return bool(re.search(r"(^|\n)\s*\+?\s*stack\s*:", patch_content))
|
|
528
|
+
|
|
529
|
+
|
|
349
530
|
def _is_oracle_artifact(path: str) -> bool:
|
|
350
531
|
"""True for spec/design/requirements docs + test-harness/gate-control files."""
|
|
351
532
|
pure = PurePosixPath(path)
|
|
@@ -42,7 +42,7 @@ import os
|
|
|
42
42
|
import subprocess # noqa: S404 — argv comes from the trusted resolved stack contract, shell=False.
|
|
43
43
|
from dataclasses import dataclass, field
|
|
44
44
|
from pathlib import Path
|
|
45
|
-
from typing import Mapping, Protocol, Sequence
|
|
45
|
+
from typing import Any, Mapping, Protocol, Sequence
|
|
46
46
|
|
|
47
47
|
from codd.languages.profile import CommandSpec
|
|
48
48
|
|
|
@@ -105,17 +105,32 @@ def stack_command_evidence_path(slot: "StackCommandSlot", project_root: Path) ->
|
|
|
105
105
|
return project_root / STACK_COMMAND_EVIDENCE_DIR / f"{safe}.stdout"
|
|
106
106
|
|
|
107
107
|
|
|
108
|
-
def assert_stack_contract_clean(
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
108
|
+
def assert_stack_contract_clean(
|
|
109
|
+
contract: ResolvedStackContract,
|
|
110
|
+
*,
|
|
111
|
+
replacement_proofs: Any = None,
|
|
112
|
+
) -> None:
|
|
113
|
+
"""Conflict gate (v2.77c) + proof gate (v2.77f): red on ANY unclean state.
|
|
114
|
+
|
|
115
|
+
Anti-false-green: a command collision, an unproved/malformed replace, a semantic
|
|
116
|
+
weaken (an addon lowering a framework obligation's severity), an exclusive conflict,
|
|
117
|
+
a deny, or any future conflict kind makes the contract NOT clean →
|
|
118
|
+
:class:`StackContractConflictError`. The composer records these as ``Conflict``
|
|
119
|
+
entries (it refuses last-wins); this turns that record into a gate. Defensive
|
|
120
|
+
triple-check (``conflicts`` / ``is_clean`` / ``strict_ok``) so a flag desync can never
|
|
121
|
+
sneak to green.
|
|
122
|
+
|
|
123
|
+
Contract Kernel v2.77f — proof-backed replacements: a WELL-FORMED ``replace_with_proof``
|
|
124
|
+
is NOT a conflict; the composer records it as a
|
|
125
|
+
:class:`~codd.stack.replacement_proof.PendingReplacementProof`. Such a contract is NOT
|
|
126
|
+
clean until its behavioral proof has been EXECUTED and PASSED. So:
|
|
127
|
+
|
|
128
|
+
* ``contract.pending_replacement_proofs`` is non-empty AND ``replacement_proofs is
|
|
129
|
+
None`` → RED ("proof not executed"): a call-site that skips the proof gate can never
|
|
130
|
+
accidentally treat a pending replacement as clean (declaration-only is RED).
|
|
131
|
+
* ``replacement_proofs`` present but does not approve EVERY pending proof (matched by
|
|
132
|
+
*fingerprint*, not id) → RED ("proof failed / not approved").
|
|
133
|
+
* every pending proof approved by a passing result → the replacement is clean.
|
|
119
134
|
"""
|
|
120
135
|
if contract.conflicts or not contract.is_clean or not contract.strict_ok:
|
|
121
136
|
reasons = (
|
|
@@ -124,13 +139,38 @@ def assert_stack_contract_clean(contract: ResolvedStackContract) -> None:
|
|
|
124
139
|
)
|
|
125
140
|
raise StackContractConflictError(
|
|
126
141
|
f"stack composition conflict ({contract.stack_id}): {reasons}. "
|
|
127
|
-
"A command collision / unproved replace / weakened obligation /
|
|
128
|
-
"conflict is RED — the composer does NOT silently last-wins-merge a "
|
|
142
|
+
"A command collision / unproved-or-malformed replace / weakened obligation / "
|
|
143
|
+
"exclusive conflict is RED — the composer does NOT silently last-wins-merge a "
|
|
129
144
|
"collision, and the run will not materialize a command plan from a "
|
|
130
|
-
"conflicted contract. Resolve the conflict in the stack profiles
|
|
131
|
-
"
|
|
145
|
+
"conflicted contract. Resolve the conflict in the stack profiles, or declare a "
|
|
146
|
+
"well-formed, proof-backed replace_with_proof."
|
|
132
147
|
)
|
|
133
148
|
|
|
149
|
+
pending = tuple(getattr(contract, "pending_replacement_proofs", ()) or ())
|
|
150
|
+
if pending:
|
|
151
|
+
if replacement_proofs is None:
|
|
152
|
+
raise StackContractConflictError(
|
|
153
|
+
f"stack replacement proof not executed ({contract.stack_id}): the contract "
|
|
154
|
+
f"declares {len(pending)} proof-backed replacement(s) "
|
|
155
|
+
f"({', '.join(p.id for p in pending)}) but the behavioral proof gate was not "
|
|
156
|
+
"run. A replace_with_proof is NOT clean by declaration alone — RED until the "
|
|
157
|
+
"proof is executed and passes (anti-false-green: never accept a replacement on "
|
|
158
|
+
"syntax)."
|
|
159
|
+
)
|
|
160
|
+
if not replacement_proofs.approves_all(pending):
|
|
161
|
+
unapproved = [
|
|
162
|
+
p.id for p in pending if p.fingerprint not in replacement_proofs.approved
|
|
163
|
+
]
|
|
164
|
+
viol = "; ".join(
|
|
165
|
+
f"{v.id}: {v.reason}" for v in getattr(replacement_proofs, "violations", ())
|
|
166
|
+
)
|
|
167
|
+
raise StackContractConflictError(
|
|
168
|
+
f"stack replacement proof failed ({contract.stack_id}): proof did not approve "
|
|
169
|
+
f"replacement(s) {unapproved} [{viol}]. A proof-backed replacement is GREEN "
|
|
170
|
+
"ONLY when its behavioral subsumption proof passes (the replacement catches "
|
|
171
|
+
"what the original caught) — RED otherwise."
|
|
172
|
+
)
|
|
173
|
+
|
|
134
174
|
|
|
135
175
|
@dataclass(frozen=True)
|
|
136
176
|
class StackCommandSlot:
|