codd-dev 2.25.0__tar.gz → 2.26.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.25.0 → codd_dev-2.26.0}/PKG-INFO +1 -1
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/__init__.py +1 -1
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/greenfield/pipeline.py +260 -19
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/implement_oracle.py +199 -8
- codd_dev-2.26.0/codd/implement_oracle_scope.py +1106 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/pyproject.toml +1 -1
- {codd_dev-2.25.0 → codd_dev-2.26.0}/.gitignore +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/LICENSE +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/README.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/__main__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/assembler.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/bridge.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/cli.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/clustering.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/confidence.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/config.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/config_schema.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/contracts.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/defaults.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/defaults.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployer.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/design_md.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/discovery.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/drift.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/env_refs.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/extractor.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fixer.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/generator.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/graph.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/implementer.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/inheritance.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/measure.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/planner.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/policy.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/project_types.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/propagate.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/propagator.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/registry.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/auto_scope_guard.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/history.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/require.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/restore.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/scanner.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/synth.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/test_detection.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/traceability.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/validator.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/verifiable_behavior_audit.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/watch/events.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/wiring.py +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/dogfood/README.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/examples/README.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.25.0 → codd_dev-2.26.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.26.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
|
|
@@ -741,14 +741,16 @@ class GreenfieldPipeline:
|
|
|
741
741
|
Ensures the stack topology is scaffolded first (idempotent — the same
|
|
742
742
|
``_ensure_test_runner`` verify uses), so the oracle's config (tsconfig)
|
|
743
743
|
exists to certify and run against AT implement-time. Then runs the gate
|
|
744
|
-
with a ``rerun(feedback)`` callback
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
744
|
+
with a SCOPED ``rerun(feedback, scope)`` callback: on an oracle failure
|
|
745
|
+
the gate derives the both-ends-of-the-broken-edge scope and re-implements
|
|
746
|
+
ONLY the owning tasks (under a write-fence), escalating
|
|
747
|
+
narrow→expanded→broad only when the diagnostic signature fails to move
|
|
748
|
+
(see ``codd.implement_oracle_scope`` + ``run_implement_oracle_gate``).
|
|
749
|
+
``scope is None`` ⇒ the broad fallback (re-implement every task — the
|
|
750
|
+
legacy shape the VB coverage gate uses). A non-passing final result is a
|
|
751
|
+
StageError; an uncertifiable oracle scope (OracleScopeError) propagates
|
|
752
|
+
as a hard failure. The whole gate is a NO-OP for a stack without a
|
|
753
|
+
declared implement-time oracle.
|
|
752
754
|
"""
|
|
753
755
|
from codd.implement_oracle import (
|
|
754
756
|
OracleScopeError,
|
|
@@ -776,8 +778,14 @@ class GreenfieldPipeline:
|
|
|
776
778
|
# clobbering, so verify's re-scaffold is a no-op.
|
|
777
779
|
self._ensure_test_runner(project_root)
|
|
778
780
|
|
|
779
|
-
|
|
780
|
-
|
|
781
|
+
# The path→owning-task index for the SCOPED rerun: declared task outputs
|
|
782
|
+
# UNION the config-derived output paths. Built once; the gate consults it
|
|
783
|
+
# to localize each rerun to the diagnostics' owners.
|
|
784
|
+
scope_index = self._build_oracle_scope_index(project_root, tasks, config)
|
|
785
|
+
manifest_paths = self._oracle_manifest_paths(project_root)
|
|
786
|
+
|
|
787
|
+
def _rerun(feedback: str, scope: Any = None) -> None:
|
|
788
|
+
self._rerun_tasks_with_feedback(project_root, tasks, feedback, options, scope=scope)
|
|
781
789
|
|
|
782
790
|
try:
|
|
783
791
|
result = run_implement_oracle_gate(
|
|
@@ -789,6 +797,8 @@ class GreenfieldPipeline:
|
|
|
789
797
|
config=config,
|
|
790
798
|
rerun=_rerun,
|
|
791
799
|
echo=self.echo,
|
|
800
|
+
scope_index=scope_index,
|
|
801
|
+
manifest_paths=manifest_paths,
|
|
792
802
|
)
|
|
793
803
|
except OracleScopeError as exc:
|
|
794
804
|
raise StageError(str(exc)) from exc
|
|
@@ -802,29 +812,122 @@ class GreenfieldPipeline:
|
|
|
802
812
|
f"{result.category_counts()}. {result.detail}"
|
|
803
813
|
)
|
|
804
814
|
|
|
815
|
+
def _build_oracle_scope_index(
|
|
816
|
+
self,
|
|
817
|
+
project_root: Path,
|
|
818
|
+
tasks: list[ImplementTaskRef],
|
|
819
|
+
config: dict[str, Any],
|
|
820
|
+
) -> Any:
|
|
821
|
+
"""Build the path→owning-task index used to scope an oracle rerun.
|
|
822
|
+
|
|
823
|
+
Unions each task's DECLARED ``output_paths`` with its CONFIG-derived
|
|
824
|
+
output paths (``_output_paths_for_task`` — the same resolution the rerun
|
|
825
|
+
itself uses), so a diagnostic on any owned file/dir maps back to the task
|
|
826
|
+
that wrote it. A failure to build the index degrades the gate to the
|
|
827
|
+
broad rerun (``None`` → ``scope_index`` unset), never aborts.
|
|
828
|
+
"""
|
|
829
|
+
try:
|
|
830
|
+
from codd.implement_oracle_scope import build_path_owner_index
|
|
831
|
+
|
|
832
|
+
config_output_paths: dict[str, list[str]] = {}
|
|
833
|
+
for task in tasks:
|
|
834
|
+
try:
|
|
835
|
+
config_output_paths[task.task_id] = (
|
|
836
|
+
list(task.output_paths)
|
|
837
|
+
if task.output_paths
|
|
838
|
+
else _output_paths_for_task(config, task)
|
|
839
|
+
)
|
|
840
|
+
except Exception: # noqa: BLE001 — a task whose paths fail just falls to broad.
|
|
841
|
+
config_output_paths[task.task_id] = list(task.output_paths or ())
|
|
842
|
+
return build_path_owner_index(
|
|
843
|
+
tasks,
|
|
844
|
+
project_root=project_root,
|
|
845
|
+
config=config,
|
|
846
|
+
config_output_paths=config_output_paths,
|
|
847
|
+
)
|
|
848
|
+
except Exception as exc: # noqa: BLE001 — index build is best-effort.
|
|
849
|
+
self.echo(f"[greenfield] implement-oracle: scope index unavailable ({exc}); rerun stays broad.")
|
|
850
|
+
return None
|
|
851
|
+
|
|
852
|
+
def _oracle_manifest_paths(self, project_root: Path) -> tuple[str, ...]:
|
|
853
|
+
"""Manifest/config files the write-fence always permits (they are shared).
|
|
854
|
+
|
|
855
|
+
A scoped rerun may legitimately touch the build manifest/config even when
|
|
856
|
+
no task "owns" it (e.g. adding a dependency the fix needs). Only files
|
|
857
|
+
that actually exist are listed, project-relative.
|
|
858
|
+
"""
|
|
859
|
+
candidates = (
|
|
860
|
+
"package.json",
|
|
861
|
+
"tsconfig.json",
|
|
862
|
+
"package-lock.json",
|
|
863
|
+
"pnpm-lock.yaml",
|
|
864
|
+
"yarn.lock",
|
|
865
|
+
)
|
|
866
|
+
present: list[str] = []
|
|
867
|
+
for name in candidates:
|
|
868
|
+
if (project_root / name).is_file():
|
|
869
|
+
present.append(name)
|
|
870
|
+
return tuple(present)
|
|
871
|
+
|
|
805
872
|
def _rerun_tasks_with_feedback(
|
|
806
873
|
self,
|
|
807
874
|
project_root: Path,
|
|
808
875
|
tasks: list[ImplementTaskRef],
|
|
809
876
|
feedback: str,
|
|
810
877
|
options: dict[str, Any],
|
|
878
|
+
*,
|
|
879
|
+
scope: Any = None,
|
|
811
880
|
) -> None:
|
|
812
|
-
"""Re-invoke implementation
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
the
|
|
818
|
-
|
|
819
|
-
|
|
881
|
+
"""Re-invoke implementation under ``feedback`` — SCOPED when ``scope`` set.
|
|
882
|
+
|
|
883
|
+
``scope is None`` (or a broad scope) → re-implement EVERY task (the
|
|
884
|
+
legacy broad rerun). A scoped :class:`~codd.implement_oracle_scope.OracleRerunScope`
|
|
885
|
+
→ re-implement ONLY its ``task_ids``, under a WRITE-FENCE: out-of-scope
|
|
886
|
+
files the SUT writes during the scoped rerun are reverted afterwards (an
|
|
887
|
+
out-of-scope CREATE is removed, an out-of-scope MODIFY is restored), so a
|
|
888
|
+
"targeted" rerun cannot silently regenerate the whole tree. The fence is
|
|
889
|
+
OFF for a broad rerun (broad legitimately rewrites everything).
|
|
890
|
+
|
|
891
|
+
Routes through the SAME implement path the stage uses (``implement_tasks``
|
|
892
|
+
with the resolved output paths), threading the normalized oracle feedback
|
|
893
|
+
so the SUT regenerates coherent files.
|
|
820
894
|
"""
|
|
821
895
|
from codd.config import load_project_config
|
|
822
|
-
from codd.implementer import implement_tasks
|
|
823
896
|
|
|
824
897
|
try:
|
|
825
898
|
config = load_project_config(project_root)
|
|
826
899
|
except (FileNotFoundError, ValueError):
|
|
827
900
|
config = {}
|
|
901
|
+
|
|
902
|
+
scoped = scope is not None and not bool(getattr(scope, "is_broad", lambda: False)())
|
|
903
|
+
if not scoped:
|
|
904
|
+
self._reimplement_tasks(project_root, tasks, feedback, config)
|
|
905
|
+
return
|
|
906
|
+
|
|
907
|
+
# Scoped rerun: only the scope's tasks, fenced to its allowed paths.
|
|
908
|
+
target_ids = set(getattr(scope, "task_ids", ()) or ())
|
|
909
|
+
scoped_tasks = [task for task in tasks if task.task_id in target_ids]
|
|
910
|
+
if not scoped_tasks:
|
|
911
|
+
# Nothing resolvable in this scope (defensive) → broad, never a no-op.
|
|
912
|
+
self.echo("[greenfield] implement-oracle: scoped task set empty — re-running broad.")
|
|
913
|
+
self._reimplement_tasks(project_root, tasks, feedback, config)
|
|
914
|
+
return
|
|
915
|
+
|
|
916
|
+
allowed = tuple(getattr(scope, "allowed_paths", ()) or ())
|
|
917
|
+
with _OracleWriteFence(project_root, allowed_paths=allowed, echo=self.echo) as fence:
|
|
918
|
+
self._reimplement_tasks(project_root, scoped_tasks, feedback, config)
|
|
919
|
+
fence.enforce()
|
|
920
|
+
|
|
921
|
+
def _reimplement_tasks(
|
|
922
|
+
self,
|
|
923
|
+
project_root: Path,
|
|
924
|
+
tasks: list[ImplementTaskRef],
|
|
925
|
+
feedback: str,
|
|
926
|
+
config: dict[str, Any],
|
|
927
|
+
) -> None:
|
|
928
|
+
"""Re-run ``implement_tasks`` for each given task carrying ``feedback``."""
|
|
929
|
+
from codd.implementer import implement_tasks
|
|
930
|
+
|
|
828
931
|
for task in tasks:
|
|
829
932
|
output_paths = (
|
|
830
933
|
list(task.output_paths)
|
|
@@ -1253,6 +1356,144 @@ def _default_generate_wave_runner(project_root: Path, wave: int, *, ai_command:
|
|
|
1253
1356
|
return f"{generated} generated, {len(results) - generated} skipped"
|
|
1254
1357
|
|
|
1255
1358
|
|
|
1359
|
+
#: Directories never snapshotted/fenced — vendored deps, VCS, the codd cache,
|
|
1360
|
+
#: build output. A write here is not a SUT source-write the fence governs.
|
|
1361
|
+
_FENCE_EXCLUDE_DIRS = frozenset(
|
|
1362
|
+
{"node_modules", ".git", ".codd", ".hg", ".svn", "dist", "build", "__pycache__", ".pytest_cache"}
|
|
1363
|
+
)
|
|
1364
|
+
#: Source/test file suffixes the fence tracks. Restricting to code keeps the
|
|
1365
|
+
#: snapshot cheap and avoids fighting tooling that touches caches/logs.
|
|
1366
|
+
_FENCE_TRACKED_SUFFIXES = frozenset(
|
|
1367
|
+
{".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs", ".py", ".json"}
|
|
1368
|
+
)
|
|
1369
|
+
|
|
1370
|
+
|
|
1371
|
+
class _OracleWriteFence:
|
|
1372
|
+
"""Restrict a SCOPED oracle rerun's writes to the scope's ``allowed_paths``.
|
|
1373
|
+
|
|
1374
|
+
Re-implementing only the scoped tasks does NOT stop the SUT from writing
|
|
1375
|
+
OUT-of-scope files (the design's #1 implementation note). The fence snapshots
|
|
1376
|
+
the tracked source/test tree on entry; on :meth:`enforce` it reverts every
|
|
1377
|
+
out-of-scope change made during the rerun — an out-of-scope CREATE is deleted,
|
|
1378
|
+
an out-of-scope MODIFY is restored to its pre-rerun bytes. In-scope writes
|
|
1379
|
+
(under an allowed file/dir, or a manifest/config) pass untouched. This makes
|
|
1380
|
+
a "targeted" rerun genuinely local: it cannot silently regenerate the tree.
|
|
1381
|
+
|
|
1382
|
+
``allowed_paths`` entries are matched as exact files OR directory prefixes
|
|
1383
|
+
(a task that owns ``src/`` may write any file under ``src/``). An EMPTY
|
|
1384
|
+
allow-set means "no fence" (the broad rerun's signal) and the caller does not
|
|
1385
|
+
construct a fence in that case.
|
|
1386
|
+
"""
|
|
1387
|
+
|
|
1388
|
+
def __init__(self, project_root: Path, *, allowed_paths: tuple[str, ...], echo: Callable[[str], str]):
|
|
1389
|
+
self._root = Path(project_root).resolve()
|
|
1390
|
+
self._allowed_files, self._allowed_dirs = self._split_allowed(allowed_paths)
|
|
1391
|
+
self._echo = echo
|
|
1392
|
+
self._snapshot: dict[str, bytes] = {}
|
|
1393
|
+
|
|
1394
|
+
def __enter__(self) -> "_OracleWriteFence":
|
|
1395
|
+
self._snapshot = self._capture()
|
|
1396
|
+
return self
|
|
1397
|
+
|
|
1398
|
+
def __exit__(self, *_exc: Any) -> None:
|
|
1399
|
+
# The fence does not suppress exceptions; enforce() is called explicitly
|
|
1400
|
+
# by the caller on the SUCCESS path so a failing rerun's exception still
|
|
1401
|
+
# propagates with the tree left for the caller's error handling.
|
|
1402
|
+
return None
|
|
1403
|
+
|
|
1404
|
+
def enforce(self) -> None:
|
|
1405
|
+
"""Revert every out-of-scope create/modify made since entry."""
|
|
1406
|
+
current = self._capture()
|
|
1407
|
+
reverted_modified: list[str] = []
|
|
1408
|
+
reverted_created: list[str] = []
|
|
1409
|
+
|
|
1410
|
+
# Reverts for modified/created files.
|
|
1411
|
+
for rel, content in current.items():
|
|
1412
|
+
if self._is_allowed(rel):
|
|
1413
|
+
continue
|
|
1414
|
+
if rel in self._snapshot:
|
|
1415
|
+
if self._snapshot[rel] != content:
|
|
1416
|
+
self._restore(rel, self._snapshot[rel])
|
|
1417
|
+
reverted_modified.append(rel)
|
|
1418
|
+
else:
|
|
1419
|
+
self._remove(rel)
|
|
1420
|
+
reverted_created.append(rel)
|
|
1421
|
+
|
|
1422
|
+
# Re-create any tracked file the scoped rerun DELETED out of scope (a
|
|
1423
|
+
# deletion is also an out-of-scope mutation we must undo).
|
|
1424
|
+
reverted_deleted: list[str] = []
|
|
1425
|
+
for rel, content in self._snapshot.items():
|
|
1426
|
+
if rel in current or self._is_allowed(rel):
|
|
1427
|
+
continue
|
|
1428
|
+
self._restore(rel, content)
|
|
1429
|
+
reverted_deleted.append(rel)
|
|
1430
|
+
|
|
1431
|
+
total = len(reverted_modified) + len(reverted_created) + len(reverted_deleted)
|
|
1432
|
+
if total:
|
|
1433
|
+
self._echo(
|
|
1434
|
+
"[greenfield] implement-oracle: write-fence reverted "
|
|
1435
|
+
f"{total} out-of-scope change(s) "
|
|
1436
|
+
f"(modified={len(reverted_modified)}, created={len(reverted_created)}, "
|
|
1437
|
+
f"deleted={len(reverted_deleted)}); the scoped rerun is kept local."
|
|
1438
|
+
)
|
|
1439
|
+
|
|
1440
|
+
# ── internals ──
|
|
1441
|
+
@staticmethod
|
|
1442
|
+
def _split_allowed(allowed_paths: tuple[str, ...]) -> tuple[set[str], list[str]]:
|
|
1443
|
+
files: set[str] = set()
|
|
1444
|
+
dirs: list[str] = []
|
|
1445
|
+
for raw in allowed_paths:
|
|
1446
|
+
norm = str(raw).strip().replace("\\", "/").strip("/")
|
|
1447
|
+
if not norm:
|
|
1448
|
+
continue
|
|
1449
|
+
if PurePosixPath(norm).suffix:
|
|
1450
|
+
files.add(norm)
|
|
1451
|
+
else:
|
|
1452
|
+
dirs.append(norm)
|
|
1453
|
+
return files, dirs
|
|
1454
|
+
|
|
1455
|
+
def _is_allowed(self, rel: str) -> bool:
|
|
1456
|
+
if rel in self._allowed_files:
|
|
1457
|
+
return True
|
|
1458
|
+
for directory in self._allowed_dirs:
|
|
1459
|
+
if rel == directory or rel.startswith(directory + "/"):
|
|
1460
|
+
return True
|
|
1461
|
+
return False
|
|
1462
|
+
|
|
1463
|
+
def _capture(self) -> dict[str, bytes]:
|
|
1464
|
+
out: dict[str, bytes] = {}
|
|
1465
|
+
for path in self._iter_tracked_files():
|
|
1466
|
+
try:
|
|
1467
|
+
out[path.relative_to(self._root).as_posix()] = path.read_bytes()
|
|
1468
|
+
except OSError:
|
|
1469
|
+
continue
|
|
1470
|
+
return out
|
|
1471
|
+
|
|
1472
|
+
def _iter_tracked_files(self):
|
|
1473
|
+
import os
|
|
1474
|
+
|
|
1475
|
+
for dirpath, dirnames, filenames in os.walk(self._root):
|
|
1476
|
+
dirnames[:] = [d for d in dirnames if d not in _FENCE_EXCLUDE_DIRS]
|
|
1477
|
+
for name in filenames:
|
|
1478
|
+
if PurePosixPath(name).suffix in _FENCE_TRACKED_SUFFIXES:
|
|
1479
|
+
yield Path(dirpath) / name
|
|
1480
|
+
|
|
1481
|
+
def _restore(self, rel: str, content: bytes) -> None:
|
|
1482
|
+
target = self._root / rel
|
|
1483
|
+
try:
|
|
1484
|
+
target.parent.mkdir(parents=True, exist_ok=True)
|
|
1485
|
+
target.write_bytes(content)
|
|
1486
|
+
except OSError as exc:
|
|
1487
|
+
self._echo(f"[greenfield] implement-oracle: write-fence could not restore {rel} ({exc}).")
|
|
1488
|
+
|
|
1489
|
+
def _remove(self, rel: str) -> None:
|
|
1490
|
+
target = self._root / rel
|
|
1491
|
+
try:
|
|
1492
|
+
target.unlink()
|
|
1493
|
+
except OSError as exc:
|
|
1494
|
+
self._echo(f"[greenfield] implement-oracle: write-fence could not remove {rel} ({exc}).")
|
|
1495
|
+
|
|
1496
|
+
|
|
1256
1497
|
def _default_task_lister(project_root: Path) -> list[ImplementTaskRef]:
|
|
1257
1498
|
from codd.implementer import list_implement_tasks
|
|
1258
1499
|
|
|
@@ -92,6 +92,7 @@ __all__ = [
|
|
|
92
92
|
"EVIDENCE_CATEGORIES",
|
|
93
93
|
"ImplementOracleFinding",
|
|
94
94
|
"ImplementOracleResult",
|
|
95
|
+
"OracleRerunCallback",
|
|
95
96
|
"OracleScopeError",
|
|
96
97
|
"certify_oracle_scope",
|
|
97
98
|
"normalize_oracle_output",
|
|
@@ -197,6 +198,12 @@ class ImplementOracleResult:
|
|
|
197
198
|
failed_paths: list[str] = field(default_factory=list)
|
|
198
199
|
detail: str = ""
|
|
199
200
|
raw_output: str = ""
|
|
201
|
+
#: Structured diagnostics (code + primary file + symbol/module) for the SCOPED
|
|
202
|
+
#: rerun derivation + the loop-breaking signature. Empty for a pass / for a
|
|
203
|
+
#: non-TS oracle. Kept separate from ``findings`` (the SUT-facing normalized
|
|
204
|
+
#: evidence) because scope derivation needs the per-diagnostic counterpart
|
|
205
|
+
#: keys, not the language-neutral category. See ``codd.implement_oracle_scope``.
|
|
206
|
+
diagnostics: list[Any] = field(default_factory=list)
|
|
200
207
|
|
|
201
208
|
def category_counts(self) -> dict[str, int]:
|
|
202
209
|
counts: dict[str, int] = {}
|
|
@@ -724,6 +731,16 @@ def _run_oracle_command(
|
|
|
724
731
|
message=(_output_tail(completed.stdout, completed.stderr) or "non-zero exit, no diagnostics"),
|
|
725
732
|
)
|
|
726
733
|
]
|
|
734
|
+
# Structured diagnostics for the scoped rerun + the loop-breaking signature.
|
|
735
|
+
# Best-effort: a parser failure must never abort the gate (the scope layer
|
|
736
|
+
# degrades to broad on empty diagnostics).
|
|
737
|
+
diagnostics: list[Any] = []
|
|
738
|
+
try:
|
|
739
|
+
from codd.implement_oracle_scope import _parse_ts_diagnostics
|
|
740
|
+
|
|
741
|
+
diagnostics = _parse_ts_diagnostics(full_output, project_root)
|
|
742
|
+
except Exception: # noqa: BLE001 — structured-diag parsing is enrichment only.
|
|
743
|
+
diagnostics = []
|
|
727
744
|
return ImplementOracleResult(
|
|
728
745
|
passed=False,
|
|
729
746
|
executed=True,
|
|
@@ -732,6 +749,7 @@ def _run_oracle_command(
|
|
|
732
749
|
failed_paths=failed_paths,
|
|
733
750
|
detail=f"native oracle failed (exit {completed.returncode}); {len(findings)} diagnostic(s)",
|
|
734
751
|
raw_output=full_output,
|
|
752
|
+
diagnostics=diagnostics,
|
|
735
753
|
)
|
|
736
754
|
|
|
737
755
|
|
|
@@ -778,6 +796,16 @@ def resolve_implement_oracle(
|
|
|
778
796
|
return profile, profile.implement_oracle
|
|
779
797
|
|
|
780
798
|
|
|
799
|
+
#: The rerun callback the gate invokes to re-implement under the oracle feedback.
|
|
800
|
+
#: ``scope is None`` ⇒ BROAD rerun (re-implement every task — the escalation
|
|
801
|
+
#: fallback, the legacy behaviour). A non-None ``OracleRerunScope`` ⇒ a SCOPED
|
|
802
|
+
#: rerun (re-implement only the scope's tasks, under its write-fence). The second
|
|
803
|
+
#: positional is kept optional in spirit — a callback that ignores it falls back
|
|
804
|
+
#: to broad, preserving back-compat for any plain ``Callable[[str], None]`` only
|
|
805
|
+
#: if it accepts the extra arg; the pipeline's callback consumes the scope.
|
|
806
|
+
OracleRerunCallback = Callable[[str, "Any"], None]
|
|
807
|
+
|
|
808
|
+
|
|
781
809
|
def run_implement_oracle_gate(
|
|
782
810
|
project_root: Path | str,
|
|
783
811
|
*,
|
|
@@ -786,9 +814,12 @@ def run_implement_oracle_gate(
|
|
|
786
814
|
source_dirs: Any = None,
|
|
787
815
|
test_dirs: Any = None,
|
|
788
816
|
config: Mapping[str, Any] | None = None,
|
|
789
|
-
rerun: Callable[[str], None] | None = None,
|
|
817
|
+
rerun: OracleRerunCallback | Callable[[str], None] | None = None,
|
|
790
818
|
echo: Callable[[str], None] = print,
|
|
791
819
|
profile: LayoutProfile | None = None,
|
|
820
|
+
scope_index: Any = None,
|
|
821
|
+
structured_source: Any = None,
|
|
822
|
+
manifest_paths: Any = None,
|
|
792
823
|
) -> ImplementOracleResult:
|
|
793
824
|
"""Run the implement-time native-oracle gate (stage-level, once).
|
|
794
825
|
|
|
@@ -799,10 +830,26 @@ def run_implement_oracle_gate(
|
|
|
799
830
|
install failure is an honest ``environment_build_error`` (no retry).
|
|
800
831
|
3. CERTIFY the oracle scope covers source + tests (raises
|
|
801
832
|
:class:`OracleScopeError` on an uncertifiable scope — anti-false-green).
|
|
802
|
-
4. Run the oracle. On failure,
|
|
803
|
-
``rerun(feedback)``
|
|
804
|
-
the
|
|
805
|
-
|
|
833
|
+
4. Run the oracle. On failure, derive a SCOPED rerun and re-invoke
|
|
834
|
+
implementation through ``rerun(feedback, scope)`` up to a bounded cap,
|
|
835
|
+
re-running the oracle each time. Returns the FINAL result.
|
|
836
|
+
|
|
837
|
+
SCOPED RERUN + ESCALATION LADDER (the localized-rerun design)
|
|
838
|
+
-------------------------------------------------------------
|
|
839
|
+
A broad rerun (regenerate every task) is correct but slow. When a
|
|
840
|
+
``scope_index`` (a ``codd.implement_oracle_scope.TaskOutputIndex``, the
|
|
841
|
+
path→owning-task map) is supplied, the gate derives the BOTH-ENDS-OF-THE-
|
|
842
|
+
BROKEN-EDGE scope from the diagnostics and re-implements only those tasks.
|
|
843
|
+
Broad is DEMOTED to a fallback rung. The ladder — driven by the diagnostic
|
|
844
|
+
SIGNATURE (the loop-breaker) — is:
|
|
845
|
+
|
|
846
|
+
narrow edge scope → expanded one-hop scope → broad → fail honestly
|
|
847
|
+
|
|
848
|
+
Escalation triggers: the diagnostics have no determinable owner (→ broad);
|
|
849
|
+
the SAME signature survives a scoped rerun (the scope was too small →
|
|
850
|
+
next rung); or a breadth/fan-out guard fires inside the derivation (→ broad).
|
|
851
|
+
Without a ``scope_index`` the gate behaves exactly as before — a broad rerun
|
|
852
|
+
every attempt — so the change is opt-in via the index.
|
|
806
853
|
|
|
807
854
|
The caller (greenfield ``_stage_implement``) turns a non-passing result into
|
|
808
855
|
a :class:`StageError`. ``OracleScopeError`` propagates (it is a hard
|
|
@@ -839,21 +886,62 @@ def run_implement_oracle_gate(
|
|
|
839
886
|
certification = certify_oracle_scope(root, profile, spec)
|
|
840
887
|
echo(f"[greenfield] implement-oracle: {certification}")
|
|
841
888
|
|
|
842
|
-
# 4. Run + bounded retry-with-feedback.
|
|
889
|
+
# 4. Run + bounded retry-with-feedback, escalating the rerun scope.
|
|
843
890
|
max_attempts = _oracle_max_attempts(config)
|
|
844
891
|
result = _run_oracle_command(root, profile, spec, config)
|
|
845
892
|
attempt = 1
|
|
893
|
+
rung = _SCOPE_NARROW if scope_index is not None else _SCOPE_BROAD
|
|
894
|
+
last_signature: tuple[Any, ...] | None = None
|
|
846
895
|
while not result.passed and result.executed and rerun is not None and attempt < max_attempts:
|
|
847
896
|
# Only retry CURABLE incoherence — an environment/toolchain failure is not
|
|
848
897
|
# something the SUT can fix in source, so do not burn retries on it.
|
|
849
898
|
if _only_environment(result):
|
|
850
899
|
break
|
|
900
|
+
|
|
901
|
+
# Loop-breaker: if the SAME diagnostic signature survived the previous
|
|
902
|
+
# scoped rerun, the scope was too small — escalate the ladder a rung
|
|
903
|
+
# (narrow → expanded → broad). Past broad with no progress → stop and
|
|
904
|
+
# fail honestly (the next loop guard / the final return handle it).
|
|
905
|
+
signature = _diagnostic_signature(result)
|
|
906
|
+
if last_signature is not None and signature == last_signature and scope_index is not None:
|
|
907
|
+
escalated = _next_rung(rung)
|
|
908
|
+
if escalated is None:
|
|
909
|
+
echo(
|
|
910
|
+
"[greenfield] implement-oracle: signature unchanged after broad rerun — "
|
|
911
|
+
"stopping (honest failure)."
|
|
912
|
+
)
|
|
913
|
+
break
|
|
914
|
+
echo(
|
|
915
|
+
f"[greenfield] implement-oracle: signature unchanged after {rung} rerun — "
|
|
916
|
+
f"escalating scope to {escalated}."
|
|
917
|
+
)
|
|
918
|
+
rung = escalated
|
|
919
|
+
last_signature = signature
|
|
920
|
+
|
|
921
|
+
# Derive the scope for this rung (broad when no index, or when the
|
|
922
|
+
# derivation's guards force it). A broad scope is passed as ``None`` so a
|
|
923
|
+
# callback that distinguishes scoped-vs-broad sees the legacy signal.
|
|
924
|
+
scope, forced_broad = _derive_scope_for_rung(
|
|
925
|
+
result=result,
|
|
926
|
+
project_root=root,
|
|
927
|
+
scope_index=scope_index,
|
|
928
|
+
rung=rung,
|
|
929
|
+
structured_source=structured_source,
|
|
930
|
+
manifest_paths=manifest_paths,
|
|
931
|
+
echo=echo,
|
|
932
|
+
)
|
|
933
|
+
if forced_broad and scope_index is not None:
|
|
934
|
+
rung = _SCOPE_BROAD # a forced-broad derivation pins the rung (monotonic ladder)
|
|
935
|
+
scope_label = (
|
|
936
|
+
"broad" if scope is None or getattr(scope, "is_broad", lambda: False)() else getattr(scope, "rung", rung)
|
|
937
|
+
)
|
|
851
938
|
echo(
|
|
852
939
|
f"[greenfield] implement-oracle: {result.detail}; "
|
|
853
940
|
f"re-running implementation with normalized feedback "
|
|
854
|
-
f"(attempt {attempt}/{max_attempts - 1}) —
|
|
941
|
+
f"(attempt {attempt}/{max_attempts - 1}, scope={scope_label}) — "
|
|
942
|
+
f"categories {result.category_counts()}"
|
|
855
943
|
)
|
|
856
|
-
rerun
|
|
944
|
+
_invoke_rerun(rerun, result.feedback_message(), scope)
|
|
857
945
|
attempt += 1
|
|
858
946
|
result = _run_oracle_command(root, profile, spec, config)
|
|
859
947
|
|
|
@@ -867,6 +955,109 @@ def run_implement_oracle_gate(
|
|
|
867
955
|
return result
|
|
868
956
|
|
|
869
957
|
|
|
958
|
+
# Ladder-rung constants mirrored here so the gate does not hard-import the scope
|
|
959
|
+
# module at call time when no index is supplied (keeps the no-op path light).
|
|
960
|
+
_SCOPE_NARROW = "narrow"
|
|
961
|
+
_SCOPE_BROAD = "broad"
|
|
962
|
+
|
|
963
|
+
|
|
964
|
+
def _next_rung(rung: str) -> str | None:
|
|
965
|
+
from codd.implement_oracle_scope import next_rung
|
|
966
|
+
|
|
967
|
+
return next_rung(rung)
|
|
968
|
+
|
|
969
|
+
|
|
970
|
+
def _diagnostic_signature(result: ImplementOracleResult) -> tuple[Any, ...]:
|
|
971
|
+
"""The result's diagnostic signature (the loop-breaker key); () if none."""
|
|
972
|
+
if not result.diagnostics:
|
|
973
|
+
return ()
|
|
974
|
+
try:
|
|
975
|
+
from codd.implement_oracle_scope import diagnostic_signature
|
|
976
|
+
|
|
977
|
+
return diagnostic_signature(result.diagnostics)
|
|
978
|
+
except Exception: # noqa: BLE001 — signature is a guard; a parse miss ⇒ no guard.
|
|
979
|
+
return ()
|
|
980
|
+
|
|
981
|
+
|
|
982
|
+
def _derive_scope_for_rung(
|
|
983
|
+
*,
|
|
984
|
+
result: ImplementOracleResult,
|
|
985
|
+
project_root: Path,
|
|
986
|
+
scope_index: Any,
|
|
987
|
+
rung: str,
|
|
988
|
+
structured_source: Any,
|
|
989
|
+
manifest_paths: Any,
|
|
990
|
+
echo: Callable[[str], None],
|
|
991
|
+
) -> tuple[Any, bool]:
|
|
992
|
+
"""Derive the rerun scope for ``rung`` → ``(scope, forced_broad)``.
|
|
993
|
+
|
|
994
|
+
``scope is None`` ⇒ broad (the legacy signal the callback re-runs everything
|
|
995
|
+
on). ``forced_broad`` is True when the derivation itself demanded broad (no
|
|
996
|
+
determinable owner / too-wide / wide-fan-out artifact, or a derivation error)
|
|
997
|
+
so the caller can PIN the ladder rung at broad — the ladder is monotonic, it
|
|
998
|
+
never drops back to a narrower rung once broad was required. With no
|
|
999
|
+
``scope_index`` (the back-compat path) returns ``(None, False)`` so behaviour
|
|
1000
|
+
is exactly the legacy broad rerun without disturbing the rung bookkeeping.
|
|
1001
|
+
"""
|
|
1002
|
+
if scope_index is None:
|
|
1003
|
+
return None, False
|
|
1004
|
+
try:
|
|
1005
|
+
from codd.implement_oracle_scope import derive_oracle_rerun_scope
|
|
1006
|
+
|
|
1007
|
+
decision = derive_oracle_rerun_scope(
|
|
1008
|
+
output=result.raw_output,
|
|
1009
|
+
project_root=project_root,
|
|
1010
|
+
index=scope_index,
|
|
1011
|
+
rung=rung,
|
|
1012
|
+
structured_source=structured_source,
|
|
1013
|
+
manifest_paths=tuple(manifest_paths or ()),
|
|
1014
|
+
)
|
|
1015
|
+
except Exception as exc: # noqa: BLE001 — a derivation failure degrades to broad.
|
|
1016
|
+
echo(f"[greenfield] implement-oracle: scope derivation failed ({exc}); falling back to broad.")
|
|
1017
|
+
return None, True
|
|
1018
|
+
if decision.scope is None or decision.force_broad:
|
|
1019
|
+
if decision.reason:
|
|
1020
|
+
echo(f"[greenfield] implement-oracle: {decision.reason}")
|
|
1021
|
+
return None, True
|
|
1022
|
+
echo(f"[greenfield] implement-oracle: {decision.scope.detail}")
|
|
1023
|
+
return decision.scope, decision.scope.rung == _SCOPE_BROAD
|
|
1024
|
+
|
|
1025
|
+
|
|
1026
|
+
def _invoke_rerun(rerun: Callable[..., None], feedback: str, scope: Any) -> None:
|
|
1027
|
+
"""Call the rerun callback, supporting both the scoped ``(feedback, scope)``
|
|
1028
|
+
and the legacy single-arg ``(feedback)`` signatures.
|
|
1029
|
+
|
|
1030
|
+
Arity is decided by INSPECTION (not by catching ``TypeError``): a ``TypeError``
|
|
1031
|
+
raised *inside* a 2-arg callback must propagate, not be silently retried as a
|
|
1032
|
+
1-arg call. A callback that takes only one positional parameter (and no
|
|
1033
|
+
``*args``) is invoked with feedback alone (it cannot localize → broad).
|
|
1034
|
+
"""
|
|
1035
|
+
if _accepts_scope_arg(rerun):
|
|
1036
|
+
rerun(feedback, scope)
|
|
1037
|
+
else:
|
|
1038
|
+
rerun(feedback)
|
|
1039
|
+
|
|
1040
|
+
|
|
1041
|
+
def _accepts_scope_arg(rerun: Callable[..., None]) -> bool:
|
|
1042
|
+
"""True if ``rerun`` accepts a second positional (the scope) — else legacy."""
|
|
1043
|
+
import inspect
|
|
1044
|
+
|
|
1045
|
+
try:
|
|
1046
|
+
sig = inspect.signature(rerun)
|
|
1047
|
+
except (TypeError, ValueError):
|
|
1048
|
+
return True # un-introspectable (builtin/C) — assume the new signature.
|
|
1049
|
+
positional = 0
|
|
1050
|
+
for param in sig.parameters.values():
|
|
1051
|
+
if param.kind in (
|
|
1052
|
+
inspect.Parameter.POSITIONAL_ONLY,
|
|
1053
|
+
inspect.Parameter.POSITIONAL_OR_KEYWORD,
|
|
1054
|
+
):
|
|
1055
|
+
positional += 1
|
|
1056
|
+
elif param.kind is inspect.Parameter.VAR_POSITIONAL:
|
|
1057
|
+
return True # *args swallows the scope.
|
|
1058
|
+
return positional >= 2
|
|
1059
|
+
|
|
1060
|
+
|
|
870
1061
|
def _only_environment(result: ImplementOracleResult) -> bool:
|
|
871
1062
|
"""True when every finding is an environment/toolchain failure (not curable by SUT)."""
|
|
872
1063
|
if not result.findings:
|