codd-dev 2.93.0__tar.gz → 2.95.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.93.0 → codd_dev-2.95.0}/PKG-INFO +1 -1
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/__init__.py +1 -1
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/contracts_registry/registry.py +5 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/auto_scope_guard.py +185 -4
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/command_plan.py +56 -16
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/compose.py +130 -7
- codd_dev-2.95.0/codd/stack/replacement_proof.py +456 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/pyproject.toml +1 -1
- {codd_dev-2.93.0 → codd_dev-2.95.0}/.gitignore +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/LICENSE +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/README.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/__main__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/assembler.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/bridge.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/cli.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/clustering.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/confidence.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/config.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/config_schema.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/contracts.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/contracts_registry/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/contracts_registry/__main__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/contracts_registry/certify.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/contracts_registry/generate_matrix.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/coverage_execution_coherence.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/defaults.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/defaults.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployer.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/design_md.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/discovery.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/drift.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/e2e_harness.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/env_refs.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/extractor.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fixer.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/generator.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/graph.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/greenfield/pipeline.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/implement_oracle.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/implement_oracle_scope.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/implement_oracle_types.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/implementer.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/inheritance.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/adapters/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/adapters/implement_oracle.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/adapters/oracle_go.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/adapters/oracle_python.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/adapters/oracle_typescript.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/adapters/runner_report.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/builtin_adapters.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/compat.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/contract.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/loader.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/oracle_executor.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/path_planner.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/profile.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/profiles/go.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/profiles/python.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/profiles/typescript.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/registry.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/verify_executor.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/languages/verify_plan.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/lexicon.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/measure.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/parsing/extractor_registry.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/parsing/regex_strategies.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/planner.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/policy.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/project_types.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/propagate.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/propagator.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/reference_resolution.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/registry.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/history.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/require.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/restore.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/scanner.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/adapters/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/adapters/_base.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/adapters/nextjs.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/adapters/playwright.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/command_authenticity.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/loader.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/lock.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/obligations.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/profile.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/project.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/registry.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/stack/resolve.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/synth.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/test_detection.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/traceability.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/validator.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/vb_marker_authenticity.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/vb_rerun_scope.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/verifiable_behavior_audit.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/watch/events.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd/wiring.py +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/dogfood/README.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/examples/README.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.93.0 → codd_dev-2.95.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.95.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
|
|
@@ -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
|
),
|
|
@@ -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:
|
|
@@ -70,13 +70,73 @@ class ResolvedLayerRef:
|
|
|
70
70
|
|
|
71
71
|
@dataclass(frozen=True)
|
|
72
72
|
class Conflict:
|
|
73
|
-
"""A composition conflict the strict gate must red on (design §衝突解決).
|
|
73
|
+
"""A composition conflict the strict gate must red on (design §衝突解決).
|
|
74
74
|
|
|
75
|
-
kind:
|
|
75
|
+
``replace_with_proof`` is the Contract Kernel v2.77f kind: a layer DECLARED a
|
|
76
|
+
proof-backed replacement but the declaration is MALFORMED (bad schema / kind /
|
|
77
|
+
missing witness / cross-id). A WELL-FORMED declaration is NOT a conflict — it is a
|
|
78
|
+
pending proof (:attr:`ResolvedStackContract.pending_replacement_proofs`).
|
|
79
|
+
"""
|
|
80
|
+
|
|
81
|
+
kind: Literal["exclusive", "command", "semantic", "replace_with_proof"]
|
|
76
82
|
detail: str
|
|
77
83
|
layers: tuple[str, ...] = ()
|
|
78
84
|
|
|
79
85
|
|
|
86
|
+
#: Sentinel returned by :func:`_classify_replacement` when a well-formed
|
|
87
|
+
#: ``replace_with_proof`` was recorded as a pending proof (so the caller records neither a
|
|
88
|
+
#: command nor a semantic conflict for it).
|
|
89
|
+
_REPLACEMENT_PENDING = object()
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def _classify_replacement(
|
|
93
|
+
*,
|
|
94
|
+
kind: str,
|
|
95
|
+
cid: str,
|
|
96
|
+
original: Any,
|
|
97
|
+
replacement: Any,
|
|
98
|
+
owner: str,
|
|
99
|
+
replacer: str,
|
|
100
|
+
pending_proofs: list[Any],
|
|
101
|
+
) -> Any:
|
|
102
|
+
"""Classify a same-id redefinition that carries (or lacks) a ``replace_with_proof``.
|
|
103
|
+
|
|
104
|
+
Returns one of:
|
|
105
|
+
* :data:`_REPLACEMENT_PENDING` — a WELL-FORMED declaration was found and appended to
|
|
106
|
+
``pending_proofs`` (the caller records NO conflict; the proof gate decides clean).
|
|
107
|
+
* a :class:`Conflict` (``kind="replace_with_proof"``) — a declaration was present but
|
|
108
|
+
MALFORMED (anti-false-green: a broken proof declaration is RED, never accepted).
|
|
109
|
+
* ``None`` — no declaration; the caller falls back to its ordinary conflict.
|
|
110
|
+
|
|
111
|
+
Imported lazily to keep the dataclass/module load free of an import cycle (the
|
|
112
|
+
replacement_proof module imports profile types from this package).
|
|
113
|
+
"""
|
|
114
|
+
from .replacement_proof import (
|
|
115
|
+
PendingReplacementProof,
|
|
116
|
+
ReplacementProofError,
|
|
117
|
+
extract_proof_declaration,
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
try:
|
|
121
|
+
decl = extract_proof_declaration(replacement, kind=kind)
|
|
122
|
+
except ReplacementProofError as exc:
|
|
123
|
+
return Conflict(
|
|
124
|
+
kind="replace_with_proof",
|
|
125
|
+
detail=(
|
|
126
|
+
f"{kind} {cid!r} declares a malformed replace_with_proof on {replacer} "
|
|
127
|
+
f"(owner {owner}): {exc}. A proof-backed replacement is RED unless its "
|
|
128
|
+
"declaration is well-formed AND its behavioral proof passes."
|
|
129
|
+
),
|
|
130
|
+
layers=(owner, replacer),
|
|
131
|
+
)
|
|
132
|
+
if decl is None:
|
|
133
|
+
return None
|
|
134
|
+
pending_proofs.append(
|
|
135
|
+
PendingReplacementProof.build(kind, original, replacement, decl)
|
|
136
|
+
)
|
|
137
|
+
return _REPLACEMENT_PENDING
|
|
138
|
+
|
|
139
|
+
|
|
80
140
|
@dataclass(frozen=True)
|
|
81
141
|
class ResolvedStackContract:
|
|
82
142
|
"""The single contract the harness consumes (design §1 ResolvedStackContract).
|
|
@@ -111,6 +171,17 @@ class ResolvedStackContract:
|
|
|
111
171
|
command_observation_policies: Mapping[str, Any] = field(
|
|
112
172
|
default_factory=lambda: MappingProxyType({})
|
|
113
173
|
)
|
|
174
|
+
#: Proof-backed replacements (Contract Kernel v2.77f). A command/obligation that
|
|
175
|
+
#: REPLACES another layer's via a well-formed ``codd.replace_with_proof`` is recorded
|
|
176
|
+
#: here as a :class:`~codd.stack.replacement_proof.PendingReplacementProof` INSTEAD of
|
|
177
|
+
#: an ordinary command/semantic Conflict — the replacement is NOT clean-by-syntax: it
|
|
178
|
+
#: is pending an EXECUTED behavioral-subsumption proof. ``is_clean``/``strict_ok`` are
|
|
179
|
+
#: about ordinary conflicts only; the proof gate
|
|
180
|
+
#: (``codd.stack.command_plan.assert_stack_contract_clean`` with a
|
|
181
|
+
#: ``ReplacementProofGateResult``) is what turns a pending proof GREEN. Typed loosely
|
|
182
|
+
#: (``Any``) to keep ``compose`` import-cycle-free at the dataclass level. Empty for the
|
|
183
|
+
#: curated stacks (no profile declares a replacement yet).
|
|
184
|
+
pending_replacement_proofs: tuple[Any, ...] = ()
|
|
114
185
|
|
|
115
186
|
@property
|
|
116
187
|
def is_clean(self) -> bool:
|
|
@@ -142,6 +213,7 @@ def _content_hash(
|
|
|
142
213
|
obligations: Sequence[Obligation],
|
|
143
214
|
file_roles: Sequence[FileRole],
|
|
144
215
|
source_sets: Sequence[SourceSet],
|
|
216
|
+
pending_proofs: Sequence[Any] = (),
|
|
145
217
|
) -> str:
|
|
146
218
|
canonical = {
|
|
147
219
|
"layers": [[l.kind, l.id, l.profile_version] for l in layers],
|
|
@@ -149,6 +221,13 @@ def _content_hash(
|
|
|
149
221
|
"obligations": sorted([o.id, o.severity] for o in obligations),
|
|
150
222
|
"file_roles": sorted([r.pattern, r.role] for r in file_roles),
|
|
151
223
|
"source_sets": sorted([s.id, s.root] for s in source_sets),
|
|
224
|
+
# Proof-backed replacements (Contract Kernel v2.77f gaming-vector #5): the proof
|
|
225
|
+
# DECLARATION must affect the content hash, so a changed witness/proof drifts the
|
|
226
|
+
# lock (a proof cannot silently change under a stable lock). Each pending proof's
|
|
227
|
+
# fingerprint already hashes (original, replacement, declaration).
|
|
228
|
+
"replacement_proofs": sorted(
|
|
229
|
+
getattr(p, "fingerprint", "") for p in (pending_proofs or ())
|
|
230
|
+
),
|
|
152
231
|
}
|
|
153
232
|
payload = json.dumps(canonical, sort_keys=True, ensure_ascii=False)
|
|
154
233
|
return "sha256:" + hashlib.sha256(payload.encode("utf-8")).hexdigest()
|
|
@@ -177,6 +256,7 @@ def compose(
|
|
|
177
256
|
)
|
|
178
257
|
|
|
179
258
|
conflicts: list[Conflict] = []
|
|
259
|
+
pending_proofs: list[Any] = []
|
|
180
260
|
|
|
181
261
|
# -- commands (language base; frameworks/addons add their own slots) --------
|
|
182
262
|
commands: dict[str, CommandSpec] = dict(language.commands)
|
|
@@ -189,11 +269,28 @@ def compose(
|
|
|
189
269
|
command_owners[cid] = f"{kind}:{prof.id}"
|
|
190
270
|
continue
|
|
191
271
|
# Collision. Identical argv → harmless (same command). Different argv →
|
|
192
|
-
# a layer is replacing another's command.
|
|
193
|
-
# is a hard conflict (no silent weakening); elsewhere too (must be an
|
|
194
|
-
# explicit replace_with_proof, which no profile declares yet).
|
|
272
|
+
# a layer is replacing another's command.
|
|
195
273
|
if tuple(commands[cid].argv) == tuple(spec.argv):
|
|
196
274
|
continue
|
|
275
|
+
# A different-argv redefinition is a hard conflict UNLESS the replacing layer
|
|
276
|
+
# carries a well-formed ``replace_with_proof`` (Contract Kernel v2.77f). Then
|
|
277
|
+
# it is recorded as a PendingReplacementProof — NOT clean-by-syntax: the proof
|
|
278
|
+
# gate must execute the behavioral subsumption before the contract is clean. A
|
|
279
|
+
# MALFORMED declaration is its own RED (``replace_with_proof`` conflict kind).
|
|
280
|
+
proof_conflict = _classify_replacement(
|
|
281
|
+
kind="command",
|
|
282
|
+
cid=cid,
|
|
283
|
+
original=commands[cid],
|
|
284
|
+
replacement=spec,
|
|
285
|
+
owner=command_owners[cid],
|
|
286
|
+
replacer=f"{kind}:{prof.id}",
|
|
287
|
+
pending_proofs=pending_proofs,
|
|
288
|
+
)
|
|
289
|
+
if proof_conflict is _REPLACEMENT_PENDING:
|
|
290
|
+
continue # recorded as a pending proof; do NOT also record a conflict
|
|
291
|
+
if proof_conflict is not None:
|
|
292
|
+
conflicts.append(proof_conflict)
|
|
293
|
+
continue
|
|
197
294
|
conflicts.append(
|
|
198
295
|
Conflict(
|
|
199
296
|
kind="command",
|
|
@@ -255,6 +352,28 @@ def compose(
|
|
|
255
352
|
)
|
|
256
353
|
)
|
|
257
354
|
elif _normalize_checker_ref(obl.checker) != _normalize_checker_ref(existing.checker):
|
|
355
|
+
# A same-severity, different-CHECKER redefinition. This may be a legitimate
|
|
356
|
+
# proof-backed replacement (a stronger/equivalent checker) IFF the new
|
|
357
|
+
# checker is REAL (non-empty) AND a well-formed replace_with_proof is
|
|
358
|
+
# declared. A null/empty new checker can NEVER be proof-rescued (you cannot
|
|
359
|
+
# prove subsumption with no checker — it would be an unenforced RED anyway),
|
|
360
|
+
# so that path stays a hard semantic conflict.
|
|
361
|
+
proof_outcome = None
|
|
362
|
+
if _normalize_checker_ref(obl.checker): # new checker is non-empty
|
|
363
|
+
proof_outcome = _classify_replacement(
|
|
364
|
+
kind="obligation",
|
|
365
|
+
cid=obl.id,
|
|
366
|
+
original=existing,
|
|
367
|
+
replacement=obl,
|
|
368
|
+
owner=obligation_owners[obl.id],
|
|
369
|
+
replacer=f"{kind}:{prof.id}",
|
|
370
|
+
pending_proofs=pending_proofs,
|
|
371
|
+
)
|
|
372
|
+
if proof_outcome is _REPLACEMENT_PENDING:
|
|
373
|
+
continue # recorded as a pending proof; no conflict
|
|
374
|
+
if proof_outcome is not None:
|
|
375
|
+
conflicts.append(proof_outcome)
|
|
376
|
+
continue
|
|
258
377
|
conflicts.append(
|
|
259
378
|
Conflict(
|
|
260
379
|
kind="semantic",
|
|
@@ -265,7 +384,8 @@ def compose(
|
|
|
265
384
|
"a same-id checker-ref change is a semantic conflict (it would "
|
|
266
385
|
"silently keep one checker and discard the other); two different "
|
|
267
386
|
"checks need two different obligation ids, the same check needs "
|
|
268
|
-
"the same checker ref"
|
|
387
|
+
"the same checker ref (or an explicit, proof-backed "
|
|
388
|
+
"replace_with_proof)"
|
|
269
389
|
),
|
|
270
390
|
layers=(obligation_owners[obl.id], f"{kind}:{prof.id}"),
|
|
271
391
|
)
|
|
@@ -308,7 +428,9 @@ def compose(
|
|
|
308
428
|
}
|
|
309
429
|
|
|
310
430
|
stack_id = "+".join(l.id for l in layers)
|
|
311
|
-
content_hash = _content_hash(
|
|
431
|
+
content_hash = _content_hash(
|
|
432
|
+
layers, commands, obligations, file_roles, source_sets, pending_proofs
|
|
433
|
+
)
|
|
312
434
|
|
|
313
435
|
return ResolvedStackContract(
|
|
314
436
|
stack_id=stack_id,
|
|
@@ -324,4 +446,5 @@ def compose(
|
|
|
324
446
|
variants=MappingProxyType(dict(variants)),
|
|
325
447
|
conflicts=tuple(conflicts),
|
|
326
448
|
content_hash=content_hash,
|
|
449
|
+
pending_replacement_proofs=tuple(pending_proofs),
|
|
327
450
|
)
|