codd-dev 2.27.0__tar.gz → 2.28.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.27.0 → codd_dev-2.28.0}/PKG-INFO +1 -1
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/__init__.py +1 -1
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/defaults.yaml +19 -3
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/implement_oracle.py +384 -22
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/implement_oracle_scope.py +277 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/pyproject.toml +1 -1
- {codd_dev-2.27.0 → codd_dev-2.28.0}/.gitignore +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/LICENSE +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/README.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/__main__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/assembler.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/bridge.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/cli.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/clustering.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/confidence.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/config.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/config_schema.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/contracts.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/defaults.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployer.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/design_md.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/discovery.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/drift.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/env_refs.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/extractor.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fixer.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/generator.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/graph.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/greenfield/pipeline.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/implementer.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/inheritance.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/lexicon.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/measure.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/planner.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/policy.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/project_types.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/propagate.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/propagator.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/registry.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/auto_scope_guard.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/history.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/require.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/restore.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/scanner.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/synth.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/test_detection.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/traceability.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/validator.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/verifiable_behavior_audit.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/watch/events.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd/wiring.py +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/dogfood/README.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/examples/README.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.27.0 → codd_dev-2.28.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.28.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
|
|
@@ -156,12 +156,28 @@ implement:
|
|
|
156
156
|
# re-opens the false-green window the gate closes). Greenfield-only.
|
|
157
157
|
implement_oracle: true
|
|
158
158
|
# Total implement-oracle attempts: one initial check + bounded corrective
|
|
159
|
-
# retries that re-run implementation with normalized oracle feedback. Default
|
|
160
|
-
#
|
|
159
|
+
# retries that re-run implementation with normalized oracle feedback. Default 5,
|
|
160
|
+
# sized to the escalation LADDER so every rung can be reached: initial(1) +
|
|
161
|
+
# narrow(<=2) + expanded(1) + broad(1). The 2nd narrow attempt is only spent
|
|
162
|
+
# while the repair is making progress (the loop classifies shrink vs
|
|
163
|
+
# oscillation); oscillation escalates immediately, so the budget is not wasted
|
|
164
|
+
# thrashing one rung. Minimum 1. NEVER unbounded -- a genuinely uncurable
|
|
161
165
|
# incoherence still fails honestly (nothing is silently accepted). Only CURABLE
|
|
162
166
|
# incoherence is retried; an environment/toolchain failure (failed dependency
|
|
163
167
|
# install) is not handed to the SUT to "fix" in source.
|
|
164
|
-
oracle_max_attempts:
|
|
168
|
+
oracle_max_attempts: 5
|
|
169
|
+
# Orphan-artifact gate (off | warn | enforce). The implement-time oracle's
|
|
170
|
+
# invariant: every GENERATED source artifact must be owned by exactly one
|
|
171
|
+
# implement task (or a declared harness/profile contract). An orphan (a file no
|
|
172
|
+
# task owns) sits OUTSIDE the artifact-contract graph -- its repair scope and
|
|
173
|
+
# write-fence are undecidable, so a non-deterministic SUT can keep mutating it
|
|
174
|
+
# invisibly. 'warn' (default) observes + reports orphans after implement but
|
|
175
|
+
# never blocks (the check is heuristic; a large behaviour change rolls out as
|
|
176
|
+
# warn). 'enforce' makes an orphan a hard stage failure. 'off' disables it. A
|
|
177
|
+
# legitimate helper a task wrote under its OWN output directory is adopted (it
|
|
178
|
+
# is dir-owned), so the warn list should be small. Only active for stacks with
|
|
179
|
+
# a declared implement-time oracle + a derivable owner index.
|
|
180
|
+
orphan_artifact_gate: warn
|
|
165
181
|
# Bounded wall-clock for ONE implement-oracle command run (seconds). tsc on a
|
|
166
182
|
# fresh build is fast, but a cold first run can compile a large module graph.
|
|
167
183
|
# Default 600.
|
|
@@ -94,6 +94,7 @@ __all__ = [
|
|
|
94
94
|
"ImplementOracleResult",
|
|
95
95
|
"OracleRerunCallback",
|
|
96
96
|
"OracleScopeError",
|
|
97
|
+
"build_contract_feedback",
|
|
97
98
|
"certify_oracle_scope",
|
|
98
99
|
"normalize_oracle_output",
|
|
99
100
|
"resolve_implement_oracle",
|
|
@@ -204,6 +205,11 @@ class ImplementOracleResult:
|
|
|
204
205
|
#: evidence) because scope derivation needs the per-diagnostic counterpart
|
|
205
206
|
#: keys, not the language-neutral category. See ``codd.implement_oracle_scope``.
|
|
206
207
|
diagnostics: list[Any] = field(default_factory=list)
|
|
208
|
+
#: Orphan artifacts (generated source files no task owns) found by the global
|
|
209
|
+
#: orphan-artifact gate. Populated in WARN mode (observation; the gate does not
|
|
210
|
+
#: fail) and ENFORCE mode (the gate fails). Empty when the gate is off / no
|
|
211
|
+
#: scope index / no orphans. Project-relative paths, for the report + dashboard.
|
|
212
|
+
orphan_artifacts: list[str] = field(default_factory=list)
|
|
207
213
|
|
|
208
214
|
def category_counts(self) -> dict[str, int]:
|
|
209
215
|
counts: dict[str, int] = {}
|
|
@@ -236,8 +242,21 @@ class ImplementOracleResult:
|
|
|
236
242
|
"Ensure: (a) every `import { X } from \"./mod.js\"` imports a name `X` "
|
|
237
243
|
"that `mod` actually `export`s; (b) test/helper files agree on the names "
|
|
238
244
|
"they share (e.g. do not import `repoRoot` when the helper exports "
|
|
239
|
-
"`projectRoot`); (c) every imported module path resolves.
|
|
240
|
-
|
|
245
|
+
"`projectRoot`); (c) every imported module path resolves."
|
|
246
|
+
)
|
|
247
|
+
# (iii) Contract discipline — the anti-oscillation rule. A non-deterministic
|
|
248
|
+
# SUT, told only "symbol X is missing", tends to INVENT a new symbol/file
|
|
249
|
+
# each rerun (a different wrong guess every time → the diagnostics oscillate
|
|
250
|
+
# instead of converging). Forbid invention explicitly: reconcile to what
|
|
251
|
+
# ALREADY exists; a genuinely shared symbol goes in an OWNED module, not a
|
|
252
|
+
# newly-conjured file. (GPT-5.5 Pro consult, 2026-06-15: feedback iii.)
|
|
253
|
+
lines.append(
|
|
254
|
+
"Do NOT invent new symbols, helpers, or files to satisfy an import: "
|
|
255
|
+
"reconcile the import to a symbol the target module ALREADY exports (or "
|
|
256
|
+
"delete the import/usage if it is spurious). If two files must share a "
|
|
257
|
+
"symbol, add it to one OWNED module and import it — never duplicate it or "
|
|
258
|
+
"create an unowned shared file. Make the SMALLEST change that restores "
|
|
259
|
+
"coherence; do not rewrite unrelated code."
|
|
241
260
|
)
|
|
242
261
|
return "\n".join(lines)
|
|
243
262
|
|
|
@@ -246,10 +265,20 @@ class ImplementOracleResult:
|
|
|
246
265
|
_FEEDBACK_FINDING_CAP = 12
|
|
247
266
|
|
|
248
267
|
#: Total implement-oracle attempts: one initial check + bounded corrective
|
|
249
|
-
#: retries
|
|
250
|
-
#:
|
|
251
|
-
#:
|
|
252
|
-
|
|
268
|
+
#: retries, sized to the ESCALATION LADDER so every rung can actually be reached
|
|
269
|
+
#: before the budget is spent. Default 5 = initial(1) + narrow(≤2) + expanded(1)
|
|
270
|
+
#: + broad(1). A flat cap of 3 (the previous default) could not run all three
|
|
271
|
+
#: rungs once — it died on ``narrow`` (initial + 2 reruns), so an oscillating SUT
|
|
272
|
+
#: that needed ``expanded``/``broad`` never got there (2026-06-15 codex11 dogfood:
|
|
273
|
+
#: 20→4→6 oscillation forced the gate to give up at cap=3 while still narrow).
|
|
274
|
+
#: The second ``narrow`` attempt is only spent when progress is being made (see
|
|
275
|
+
#: the progress/oscillation escalation in ``run_implement_oracle_gate``);
|
|
276
|
+
#: oscillation escalates immediately, so the budget is not wasted thrashing one
|
|
277
|
+
#: rung. Bounded on purpose — a genuinely uncurable incoherence still fails
|
|
278
|
+
#: honestly (nothing is silently accepted). Override via
|
|
279
|
+
#: ``implement.oracle_max_attempts``. Mirrors the implement syntax-gate's
|
|
280
|
+
#: ``DEFAULT_SYNTAX_GATE_MAX_ATTEMPTS`` discipline.
|
|
281
|
+
DEFAULT_ORACLE_MAX_ATTEMPTS = 5
|
|
253
282
|
|
|
254
283
|
|
|
255
284
|
def _oracle_max_attempts(config: Mapping[str, Any] | None) -> int:
|
|
@@ -277,6 +306,32 @@ def _oracle_opt_out(config: Mapping[str, Any] | None) -> bool:
|
|
|
277
306
|
return False
|
|
278
307
|
|
|
279
308
|
|
|
309
|
+
#: Orphan-artifact gate modes. ``warn`` (default) observes + reports orphans but
|
|
310
|
+
#: never blocks; ``enforce`` makes an orphan a hard stage failure; ``off`` disables
|
|
311
|
+
#: the check. Conservative default because the check is heuristic (see
|
|
312
|
+
#: ``find_orphan_artifacts``) — a large behaviour change starts as warn.
|
|
313
|
+
_ORPHAN_GATE_MODES = ("off", "warn", "enforce")
|
|
314
|
+
DEFAULT_ORPHAN_ARTIFACT_GATE = "warn"
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
def _orphan_artifact_gate_mode(config: Mapping[str, Any] | None) -> str:
|
|
318
|
+
"""``implement.orphan_artifact_gate`` → ``off`` | ``warn`` | ``enforce``.
|
|
319
|
+
|
|
320
|
+
Default ``warn`` (observe + report, never block). An unrecognized value falls
|
|
321
|
+
back to the default rather than erroring — the gate must never be the thing
|
|
322
|
+
that breaks a build over a config typo.
|
|
323
|
+
"""
|
|
324
|
+
section = (config or {}).get("implement") if isinstance(config, Mapping) else None
|
|
325
|
+
if isinstance(section, Mapping) and "orphan_artifact_gate" in section:
|
|
326
|
+
raw = section["orphan_artifact_gate"]
|
|
327
|
+
if isinstance(raw, bool): # tolerate a bool: True→enforce, False→off
|
|
328
|
+
return "enforce" if raw else "off"
|
|
329
|
+
value = str(raw).strip().lower()
|
|
330
|
+
if value in _ORPHAN_GATE_MODES:
|
|
331
|
+
return value
|
|
332
|
+
return DEFAULT_ORPHAN_ARTIFACT_GATE
|
|
333
|
+
|
|
334
|
+
|
|
280
335
|
def _oracle_timeout_seconds(config: Mapping[str, Any] | None) -> float:
|
|
281
336
|
"""Bounded wall-clock for the oracle command (``implement.oracle_timeout_seconds``)."""
|
|
282
337
|
section = (config or {}).get("implement") if isinstance(config, Mapping) else None
|
|
@@ -300,6 +355,132 @@ DEFAULT_ORACLE_TIMEOUT_SECONDS = 600.0
|
|
|
300
355
|
DEFAULT_ORACLE_INSTALL_TIMEOUT_SECONDS = 900.0
|
|
301
356
|
|
|
302
357
|
|
|
358
|
+
# ── contract-aware feedback (exporter surface + targeted-edit directives) ──
|
|
359
|
+
#
|
|
360
|
+
# The base ``ImplementOracleResult.feedback_message()`` is contract-aware in
|
|
361
|
+
# vocabulary (it names the broken edge + the no-invent rule) but cannot see the
|
|
362
|
+
# EXPORTER's current interface or the rerun's allowed paths — those need
|
|
363
|
+
# ``project_root`` + the derived scope, which only the gate holds. This builder
|
|
364
|
+
# folds three convergence levers onto the base message at call time:
|
|
365
|
+
#
|
|
366
|
+
# (1) EXPORTER SURFACE — for each broken edge, the target module's CURRENT
|
|
367
|
+
# public exports ("./cli exports {run}"). Turns "invent a name for the
|
|
368
|
+
# missing symbol" into "reconcile to one of THESE". The #1 anti-oscillation
|
|
369
|
+
# lever (GPT-5.5 Pro consult, 2026-06-15: feedback 3a).
|
|
370
|
+
# (2) TARGETED-EDIT — on a SCOPED (narrow/expanded) rerun, the explicit
|
|
371
|
+
# "edit only these files, minimal diff, do not create new files/symbols"
|
|
372
|
+
# directive + the allowed-paths fence list. This is what makes a scoped
|
|
373
|
+
# rerun a localized RECONCILE instead of a full re-sample (change 2). Broad
|
|
374
|
+
# reruns omit it (broad legitimately regenerates).
|
|
375
|
+
# (3) it is purely ADDITIVE — a stack with no surface extractor (unknown
|
|
376
|
+
# language) and no scope still gets the full base message, unchanged.
|
|
377
|
+
#
|
|
378
|
+
# Language-agnostic: the surface extraction lives behind
|
|
379
|
+
# ``implement_oracle_scope.extract_public_surface`` (per-language; TS today,
|
|
380
|
+
# graceful ``None`` otherwise). No TS-specific text appears here.
|
|
381
|
+
|
|
382
|
+
#: Cap on exporter-surface entries listed in feedback (bounded prompt).
|
|
383
|
+
_FEEDBACK_SURFACE_CAP = 12
|
|
384
|
+
#: Cap on individual export names shown per module (a barrel can export hundreds).
|
|
385
|
+
_FEEDBACK_SURFACE_NAMES_CAP = 40
|
|
386
|
+
|
|
387
|
+
|
|
388
|
+
def build_contract_feedback(
|
|
389
|
+
result: ImplementOracleResult,
|
|
390
|
+
*,
|
|
391
|
+
project_root: Path,
|
|
392
|
+
scope: Any = None,
|
|
393
|
+
) -> str:
|
|
394
|
+
"""The SUT-facing feedback for a rerun: base message + surface + edit directives.
|
|
395
|
+
|
|
396
|
+
Always includes ``result.feedback_message()`` (the contract + no-invent rule).
|
|
397
|
+
Appends the EXPORTER SURFACE block when an extractor can recover any broken
|
|
398
|
+
edge's target exports, and — when ``scope`` is a NON-broad (scoped) rerun — the
|
|
399
|
+
TARGETED-EDIT block (minimal-diff directive + the allowed-paths write-fence).
|
|
400
|
+
Best-effort: any enrichment failure degrades to the base message (never raises).
|
|
401
|
+
"""
|
|
402
|
+
base = result.feedback_message()
|
|
403
|
+
blocks: list[str] = [base]
|
|
404
|
+
|
|
405
|
+
# (1) Exporter surface — the current public interface of each broken edge's
|
|
406
|
+
# target module, so the SUT reconciles to a REAL symbol instead of guessing.
|
|
407
|
+
surface_block = _exporter_surface_block(result, project_root)
|
|
408
|
+
if surface_block:
|
|
409
|
+
blocks.append(surface_block)
|
|
410
|
+
|
|
411
|
+
# (2) Targeted-edit directive — only for a SCOPED rerun (narrow/expanded). A
|
|
412
|
+
# broad rerun (scope None / is_broad) legitimately regenerates everything, so
|
|
413
|
+
# it gets no minimal-diff fence.
|
|
414
|
+
scoped = scope is not None and not bool(getattr(scope, "is_broad", lambda: True)())
|
|
415
|
+
if scoped:
|
|
416
|
+
edit_block = _targeted_edit_block(scope)
|
|
417
|
+
if edit_block:
|
|
418
|
+
blocks.append(edit_block)
|
|
419
|
+
|
|
420
|
+
return "\n\n".join(blocks)
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
def _exporter_surface_block(result: ImplementOracleResult, project_root: Path) -> str:
|
|
424
|
+
"""The 'current public interface of the demanded module(s)' feedback block."""
|
|
425
|
+
if not result.diagnostics:
|
|
426
|
+
return ""
|
|
427
|
+
try:
|
|
428
|
+
from codd.implement_oracle_scope import exporter_surface_for_diagnostics
|
|
429
|
+
|
|
430
|
+
surfaces = exporter_surface_for_diagnostics(result.diagnostics, project_root)
|
|
431
|
+
except Exception: # noqa: BLE001 — surface enrichment is best-effort.
|
|
432
|
+
return ""
|
|
433
|
+
if not surfaces:
|
|
434
|
+
return ""
|
|
435
|
+
lines = [
|
|
436
|
+
"CURRENT PUBLIC INTERFACE of the demanded module(s) — reconcile your "
|
|
437
|
+
"imports to these EXACT exports (do not invent members not listed):",
|
|
438
|
+
]
|
|
439
|
+
for path, names in list(surfaces.items())[:_FEEDBACK_SURFACE_CAP]:
|
|
440
|
+
if names:
|
|
441
|
+
shown = names[:_FEEDBACK_SURFACE_NAMES_CAP]
|
|
442
|
+
more = len(names) - len(shown)
|
|
443
|
+
suffix = f", … (+{more} more)" if more > 0 else ""
|
|
444
|
+
lines.append(f" - `{path}` exports: {{{', '.join(shown)}}}{suffix}")
|
|
445
|
+
else:
|
|
446
|
+
lines.append(
|
|
447
|
+
f" - `{path}` exports NOTHING — the module has no public exports, so "
|
|
448
|
+
f"importing any named symbol from it is wrong (add the export to it, "
|
|
449
|
+
f"or import from the correct module)."
|
|
450
|
+
)
|
|
451
|
+
extra = len(surfaces) - _FEEDBACK_SURFACE_CAP
|
|
452
|
+
if extra > 0:
|
|
453
|
+
lines.append(f" ... and {extra} more module(s).")
|
|
454
|
+
return "\n".join(lines)
|
|
455
|
+
|
|
456
|
+
|
|
457
|
+
def _targeted_edit_block(scope: Any) -> str:
|
|
458
|
+
"""The minimal-diff + write-fence feedback block for a SCOPED rerun.
|
|
459
|
+
|
|
460
|
+
Tells the SUT to RECONCILE the named files with the smallest possible change
|
|
461
|
+
and forbids creating files outside the scope — the prompt-side half of the
|
|
462
|
+
write-fence (the pipeline enforces the fence by reverting out-of-scope writes).
|
|
463
|
+
"""
|
|
464
|
+
allowed = tuple(getattr(scope, "allowed_paths", ()) or ())
|
|
465
|
+
rung = getattr(scope, "rung", "scoped")
|
|
466
|
+
lines = [
|
|
467
|
+
f"TARGETED EDIT ({rung} scope): this is a LOCALIZED repair, not a "
|
|
468
|
+
"regeneration. Make the SMALLEST edit that makes the typecheck pass — "
|
|
469
|
+
"reconcile the imports/exports between the files below. Do NOT regenerate "
|
|
470
|
+
"them from scratch, do NOT create new files, and do NOT add new public "
|
|
471
|
+
"symbols beyond what is needed to satisfy the existing imports.",
|
|
472
|
+
]
|
|
473
|
+
if allowed:
|
|
474
|
+
shown = list(allowed)[:_FEEDBACK_SURFACE_CAP]
|
|
475
|
+
more = len(allowed) - len(shown)
|
|
476
|
+
suffix = f", … (+{more} more)" if more > 0 else ""
|
|
477
|
+
lines.append(
|
|
478
|
+
"You may ONLY create/modify these paths (anything else you write will "
|
|
479
|
+
f"be reverted): {', '.join(shown)}{suffix}."
|
|
480
|
+
)
|
|
481
|
+
return "\n".join(lines)
|
|
482
|
+
|
|
483
|
+
|
|
303
484
|
# ── scope certification (anti-false-green: the oracle must SEE src + tests) ──
|
|
304
485
|
|
|
305
486
|
|
|
@@ -892,30 +1073,58 @@ def run_implement_oracle_gate(
|
|
|
892
1073
|
attempt = 1
|
|
893
1074
|
rung = _SCOPE_NARROW if scope_index is not None else _SCOPE_BROAD
|
|
894
1075
|
last_signature: tuple[Any, ...] | None = None
|
|
1076
|
+
#: Bounded history of EARLIER signatures (before ``last_signature``) for cycle
|
|
1077
|
+
#: detection. Small window — the cap is small, so a long cycle would exhaust the
|
|
1078
|
+
#: budget before recurring; this catches the tight A↔B↔A loop.
|
|
1079
|
+
signature_history: list[tuple[Any, ...]] = []
|
|
1080
|
+
#: Rungs that have already spent their ONE soft-progress allowance. A rung gets
|
|
1081
|
+
#: at most one "fewer-but-some-new" pass before soft progress also escalates —
|
|
1082
|
+
#: this is the ``narrow 2nd attempt only while progressing`` budget.
|
|
1083
|
+
soft_progress_used: set[str] = set()
|
|
895
1084
|
while not result.passed and result.executed and rerun is not None and attempt < max_attempts:
|
|
896
1085
|
# Only retry CURABLE incoherence — an environment/toolchain failure is not
|
|
897
1086
|
# something the SUT can fix in source, so do not burn retries on it.
|
|
898
1087
|
if _only_environment(result):
|
|
899
1088
|
break
|
|
900
1089
|
|
|
901
|
-
# Loop-breaker
|
|
902
|
-
#
|
|
903
|
-
#
|
|
904
|
-
#
|
|
1090
|
+
# Loop-breaker (progress/oscillation, set-based — NOT exact equality). The
|
|
1091
|
+
# previous design escalated only when the signature was IDENTICAL twice,
|
|
1092
|
+
# which mis-read oscillation (a SUT inventing different errors each rerun)
|
|
1093
|
+
# as progress and stayed pinned at one rung until the budget drained. Now
|
|
1094
|
+
# we classify the SET relation to the previous signature and escalate on
|
|
1095
|
+
# oscillation/stuck/cycle, keep the rung on a strict shrink, and allow a
|
|
1096
|
+
# "fewer-but-some-new" soft step AT MOST ONCE per rung. (See
|
|
1097
|
+
# ``classify_signature_progress``.)
|
|
905
1098
|
signature = _diagnostic_signature(result)
|
|
906
|
-
if last_signature is not None and
|
|
907
|
-
|
|
908
|
-
|
|
1099
|
+
if last_signature is not None and scope_index is not None:
|
|
1100
|
+
verdict = _classify_progress(signature, last_signature, signature_history)
|
|
1101
|
+
should_escalate, escalate_reason = _escalation_decision(
|
|
1102
|
+
verdict, rung=rung, soft_progress_used=soft_progress_used
|
|
1103
|
+
)
|
|
1104
|
+
if should_escalate:
|
|
1105
|
+
escalated = _next_rung(rung)
|
|
1106
|
+
if escalated is None:
|
|
1107
|
+
echo(
|
|
1108
|
+
f"[greenfield] implement-oracle: {escalate_reason} at broad rerun — "
|
|
1109
|
+
"stopping (honest failure)."
|
|
1110
|
+
)
|
|
1111
|
+
break
|
|
909
1112
|
echo(
|
|
910
|
-
"[greenfield] implement-oracle:
|
|
911
|
-
"
|
|
1113
|
+
f"[greenfield] implement-oracle: {escalate_reason} after {rung} rerun — "
|
|
1114
|
+
f"escalating scope to {escalated}."
|
|
912
1115
|
)
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
1116
|
+
rung = escalated
|
|
1117
|
+
else:
|
|
1118
|
+
echo(
|
|
1119
|
+
f"[greenfield] implement-oracle: {verdict} at {rung} rerun — "
|
|
1120
|
+
f"keeping scope (the repair is converging)."
|
|
1121
|
+
)
|
|
1122
|
+
# Record history AFTER the comparison: ``last_signature`` rolls into the
|
|
1123
|
+
# bounded window so a later run can detect a cycle back to it.
|
|
1124
|
+
if last_signature is not None:
|
|
1125
|
+
signature_history.append(last_signature)
|
|
1126
|
+
if len(signature_history) > _SIGNATURE_HISTORY_WINDOW:
|
|
1127
|
+
signature_history.pop(0)
|
|
919
1128
|
last_signature = signature
|
|
920
1129
|
|
|
921
1130
|
# Derive the scope for this rung (broad when no index, or when the
|
|
@@ -941,7 +1150,8 @@ def run_implement_oracle_gate(
|
|
|
941
1150
|
f"(attempt {attempt}/{max_attempts - 1}, scope={scope_label}) — "
|
|
942
1151
|
f"categories {result.category_counts()}"
|
|
943
1152
|
)
|
|
944
|
-
|
|
1153
|
+
feedback = build_contract_feedback(result, project_root=root, scope=scope)
|
|
1154
|
+
_invoke_rerun(rerun, feedback, scope)
|
|
945
1155
|
attempt += 1
|
|
946
1156
|
result = _run_oracle_command(root, profile, spec, config)
|
|
947
1157
|
|
|
@@ -952,6 +1162,92 @@ def run_implement_oracle_gate(
|
|
|
952
1162
|
f"[greenfield] implement-oracle: FAILED after {attempt} attempt(s) — "
|
|
953
1163
|
f"{result.detail}; categories {result.category_counts()}"
|
|
954
1164
|
)
|
|
1165
|
+
|
|
1166
|
+
# Global orphan-artifact gate (invariant 1+2): after the typecheck loop, check
|
|
1167
|
+
# that every generated source artifact has an owning task. Default WARN
|
|
1168
|
+
# (observe + record on the result, never block); ENFORCE turns an orphan into a
|
|
1169
|
+
# failure. Only runs with a scope index (the owner map) and a real oracle.
|
|
1170
|
+
result = _apply_orphan_artifact_gate(
|
|
1171
|
+
result, project_root=root, scope_index=scope_index, manifest_paths=manifest_paths, config=config, echo=echo
|
|
1172
|
+
)
|
|
1173
|
+
return result
|
|
1174
|
+
|
|
1175
|
+
|
|
1176
|
+
def _apply_orphan_artifact_gate(
|
|
1177
|
+
result: ImplementOracleResult,
|
|
1178
|
+
*,
|
|
1179
|
+
project_root: Path,
|
|
1180
|
+
scope_index: Any,
|
|
1181
|
+
manifest_paths: Any,
|
|
1182
|
+
config: Mapping[str, Any] | None,
|
|
1183
|
+
echo: Callable[[str], None],
|
|
1184
|
+
) -> ImplementOracleResult:
|
|
1185
|
+
"""Run the global orphan-artifact gate; return the (possibly failed) result.
|
|
1186
|
+
|
|
1187
|
+
NO-OP unless a ``scope_index`` exists (no owner map ⇒ nothing to check) and the
|
|
1188
|
+
mode is not ``off``. WARN records the orphans on ``result.orphan_artifacts`` and
|
|
1189
|
+
logs them. ENFORCE additionally flips a passing result to a HARD failure (an
|
|
1190
|
+
orphan artifact is an out-of-contract file the SUT can mutate invisibly). The
|
|
1191
|
+
manifest/profile-owned files are treated as legitimately owned (the contract
|
|
1192
|
+
escape hatch). Best-effort: any failure to compute orphans is swallowed (the
|
|
1193
|
+
gate must never crash a build it was only observing).
|
|
1194
|
+
"""
|
|
1195
|
+
if scope_index is None:
|
|
1196
|
+
return result
|
|
1197
|
+
mode = _orphan_artifact_gate_mode(config)
|
|
1198
|
+
if mode == "off":
|
|
1199
|
+
return result
|
|
1200
|
+
try:
|
|
1201
|
+
from codd.implement_oracle_scope import find_orphan_artifacts
|
|
1202
|
+
|
|
1203
|
+
orphans = find_orphan_artifacts(
|
|
1204
|
+
scope_index, project_root, extra_owned=tuple(manifest_paths or ())
|
|
1205
|
+
)
|
|
1206
|
+
except Exception as exc: # noqa: BLE001 — observation must not break the build.
|
|
1207
|
+
echo(f"[greenfield] implement-oracle: orphan-artifact gate skipped ({exc}).")
|
|
1208
|
+
return result
|
|
1209
|
+
if not orphans:
|
|
1210
|
+
return result
|
|
1211
|
+
|
|
1212
|
+
paths = [o.path for o in orphans]
|
|
1213
|
+
result.orphan_artifacts = paths
|
|
1214
|
+
listing = ", ".join(paths[:_FEEDBACK_FINDING_CAP]) + (
|
|
1215
|
+
f", … (+{len(paths) - _FEEDBACK_FINDING_CAP} more)" if len(paths) > _FEEDBACK_FINDING_CAP else ""
|
|
1216
|
+
)
|
|
1217
|
+
if mode == "enforce":
|
|
1218
|
+
echo(
|
|
1219
|
+
f"[greenfield] implement-oracle: orphan-artifact gate (enforce) FAILED — "
|
|
1220
|
+
f"{len(paths)} generated artifact(s) own no task: {listing}. Every "
|
|
1221
|
+
f"artifact must be owned by a task (or declared harness/profile contract)."
|
|
1222
|
+
)
|
|
1223
|
+
if result.passed:
|
|
1224
|
+
# Flip an otherwise-clean result to a hard failure, carrying an honest
|
|
1225
|
+
# environment_build finding so the caller's StageError explains why.
|
|
1226
|
+
return ImplementOracleResult(
|
|
1227
|
+
passed=False,
|
|
1228
|
+
executed=result.executed,
|
|
1229
|
+
command=result.command,
|
|
1230
|
+
findings=[
|
|
1231
|
+
ImplementOracleFinding(
|
|
1232
|
+
category=EVIDENCE_ENVIRONMENT_BUILD,
|
|
1233
|
+
code="orphan_artifact",
|
|
1234
|
+
message=(
|
|
1235
|
+
f"{len(paths)} generated artifact(s) own no task: {listing}"
|
|
1236
|
+
),
|
|
1237
|
+
)
|
|
1238
|
+
],
|
|
1239
|
+
detail=f"orphan-artifact gate (enforce): {len(paths)} unowned artifact(s)",
|
|
1240
|
+
raw_output=result.raw_output,
|
|
1241
|
+
diagnostics=result.diagnostics,
|
|
1242
|
+
orphan_artifacts=paths,
|
|
1243
|
+
)
|
|
1244
|
+
return result
|
|
1245
|
+
# WARN (default): observe + report, never block.
|
|
1246
|
+
echo(
|
|
1247
|
+
f"[greenfield] implement-oracle: orphan-artifact gate (warn) — "
|
|
1248
|
+
f"{len(paths)} generated artifact(s) own no task: {listing}. (Observation "
|
|
1249
|
+
f"only; set implement.orphan_artifact_gate: enforce to make this a hard gate.)"
|
|
1250
|
+
)
|
|
955
1251
|
return result
|
|
956
1252
|
|
|
957
1253
|
|
|
@@ -979,6 +1275,72 @@ def _diagnostic_signature(result: ImplementOracleResult) -> tuple[Any, ...]:
|
|
|
979
1275
|
return ()
|
|
980
1276
|
|
|
981
1277
|
|
|
1278
|
+
#: How many earlier signatures the cycle detector remembers. Small — the attempt
|
|
1279
|
+
#: budget is small, so only a TIGHT cycle (A↔B↔A) can recur within it; a longer
|
|
1280
|
+
#: cycle drains the budget first (and the oscillation test catches its steps).
|
|
1281
|
+
_SIGNATURE_HISTORY_WINDOW = 4
|
|
1282
|
+
|
|
1283
|
+
|
|
1284
|
+
def _classify_progress(
|
|
1285
|
+
signature: tuple[Any, ...],
|
|
1286
|
+
last_signature: tuple[Any, ...] | None,
|
|
1287
|
+
history: list[tuple[Any, ...]],
|
|
1288
|
+
) -> str:
|
|
1289
|
+
"""Classify progress between signatures (delegates to the scope module).
|
|
1290
|
+
|
|
1291
|
+
Best-effort: a classification failure degrades to ``stuck`` (escalate) — the
|
|
1292
|
+
safe default, never an infinite stay at one rung.
|
|
1293
|
+
"""
|
|
1294
|
+
try:
|
|
1295
|
+
from codd.implement_oracle_scope import classify_signature_progress
|
|
1296
|
+
|
|
1297
|
+
return classify_signature_progress(signature, last_signature, history=history)
|
|
1298
|
+
except Exception: # noqa: BLE001 — a classify miss must escalate, not loop.
|
|
1299
|
+
from codd.implement_oracle_scope import PROGRESS_STUCK
|
|
1300
|
+
|
|
1301
|
+
return PROGRESS_STUCK
|
|
1302
|
+
|
|
1303
|
+
|
|
1304
|
+
def _escalation_decision(
|
|
1305
|
+
verdict: str,
|
|
1306
|
+
*,
|
|
1307
|
+
rung: str,
|
|
1308
|
+
soft_progress_used: set[str],
|
|
1309
|
+
) -> tuple[bool, str]:
|
|
1310
|
+
"""Map a progress verdict → ``(should_escalate, human_reason)``.
|
|
1311
|
+
|
|
1312
|
+
* strict progress → stay (the repair is shrinking the SAME incoherence).
|
|
1313
|
+
* soft progress → stay ONCE per rung (record the allowance), then escalate.
|
|
1314
|
+
* oscillation / stuck / cycle → escalate immediately.
|
|
1315
|
+
|
|
1316
|
+
The soft allowance is the ``narrow 2nd attempt only while making progress``
|
|
1317
|
+
budget the cap (default 5) is sized for: one extra narrow shot when the SUT is
|
|
1318
|
+
genuinely converging, but no thrashing.
|
|
1319
|
+
"""
|
|
1320
|
+
from codd.implement_oracle_scope import (
|
|
1321
|
+
PROGRESS_CYCLE,
|
|
1322
|
+
PROGRESS_OSCILLATION,
|
|
1323
|
+
PROGRESS_SOFT,
|
|
1324
|
+
PROGRESS_STRICT,
|
|
1325
|
+
PROGRESS_STUCK,
|
|
1326
|
+
)
|
|
1327
|
+
|
|
1328
|
+
if verdict == PROGRESS_STRICT:
|
|
1329
|
+
return False, "strict progress"
|
|
1330
|
+
if verdict == PROGRESS_SOFT:
|
|
1331
|
+
if rung in soft_progress_used:
|
|
1332
|
+
return True, "soft progress already spent its one allowance"
|
|
1333
|
+
soft_progress_used.add(rung)
|
|
1334
|
+
return False, "soft progress (one allowance)"
|
|
1335
|
+
if verdict == PROGRESS_OSCILLATION:
|
|
1336
|
+
return True, "diagnostics oscillating (not a shrink)"
|
|
1337
|
+
if verdict == PROGRESS_CYCLE:
|
|
1338
|
+
return True, "diagnostic cycle detected"
|
|
1339
|
+
# PROGRESS_STUCK or any unknown verdict → escalate (safe default).
|
|
1340
|
+
del PROGRESS_STUCK # named for clarity; the fallthrough covers it
|
|
1341
|
+
return True, "signature unchanged"
|
|
1342
|
+
|
|
1343
|
+
|
|
982
1344
|
def _derive_scope_for_rung(
|
|
983
1345
|
*,
|
|
984
1346
|
result: ImplementOracleResult,
|