codd-dev 2.90.0__tar.gz → 2.91.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.90.0 → codd_dev-2.91.0}/PKG-INFO +1 -1
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/__init__.py +1 -1
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/cli.py +34 -1
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/greenfield/pipeline.py +80 -0
- codd_dev-2.91.0/codd/stack/command_plan.py +385 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/pyproject.toml +1 -1
- {codd_dev-2.90.0 → codd_dev-2.91.0}/.gitignore +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/LICENSE +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/README.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/__main__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/assembler.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/bridge.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/clustering.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/confidence.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/config.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/config_schema.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/contracts.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/contracts_registry/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/contracts_registry/__main__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/contracts_registry/certify.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/contracts_registry/generate_matrix.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/contracts_registry/registry.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/coverage_execution_coherence.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/defaults.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/defaults.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployer.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/design_md.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/discovery.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/drift.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/e2e_harness.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/env_refs.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/extractor.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fixer.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/generator.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/graph.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/implement_oracle.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/implement_oracle_scope.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/implement_oracle_types.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/implementer.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/inheritance.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/adapters/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/adapters/implement_oracle.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/adapters/oracle_go.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/adapters/oracle_python.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/adapters/oracle_typescript.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/adapters/runner_report.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/builtin_adapters.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/compat.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/contract.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/loader.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/oracle_executor.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/path_planner.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/profile.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/profiles/go.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/profiles/python.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/profiles/typescript.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/registry.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/verify_executor.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/languages/verify_plan.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/lexicon.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/measure.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/parsing/extractor_registry.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/parsing/regex_strategies.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/planner.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/policy.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/project_types.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/propagate.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/propagator.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/reference_resolution.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/registry.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/auto_scope_guard.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/history.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/require.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/restore.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/scanner.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/stack/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/stack/adapters/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/stack/adapters/_base.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/stack/adapters/nextjs.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/stack/adapters/playwright.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/stack/compose.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/stack/loader.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/stack/lock.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/stack/obligations.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/stack/profile.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/stack/project.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/stack/registry.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/stack/resolve.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/synth.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/test_detection.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/traceability.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/validator.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/vb_marker_authenticity.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/vb_rerun_scope.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/verifiable_behavior_audit.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/watch/events.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd/wiring.py +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/dogfood/README.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/examples/README.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.90.0 → codd_dev-2.91.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.91.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
|
|
@@ -7600,7 +7600,7 @@ def _load_optional_project_config(project_root: Path) -> dict[str, Any]:
|
|
|
7600
7600
|
return {}
|
|
7601
7601
|
|
|
7602
7602
|
|
|
7603
|
-
def _intake_stack_contract_for_verify(project_root: Path) -> None:
|
|
7603
|
+
def _intake_stack_contract_for_verify(project_root: Path, *, stack_command_executor=None) -> None:
|
|
7604
7604
|
"""Resolve the project's declared stack contract into the verify run trace.
|
|
7605
7605
|
|
|
7606
7606
|
Contract Kernel v2.77a (intake only) — the verify-path mirror of the greenfield
|
|
@@ -7609,6 +7609,11 @@ def _intake_stack_contract_for_verify(project_root: Path) -> None:
|
|
|
7609
7609
|
the run trace), WITHOUT enforcing any obligation or changing the verify verdict
|
|
7610
7610
|
(obligation enforcement is v2.77b-e).
|
|
7611
7611
|
|
|
7612
|
+
``stack_command_executor`` is the v2.77c materialization seam (default: the real
|
|
7613
|
+
subprocess executor): an injectable executor that invokes each composed stack
|
|
7614
|
+
command slot (exit-code only). Tests pass a recording/sentinel executor so the
|
|
7615
|
+
declared slots are provably invoked without real Next.js/Playwright.
|
|
7616
|
+
|
|
7612
7617
|
* No ``stack:`` block → no-op (the opt-in framework layer is unused; the vast
|
|
7613
7618
|
majority of projects — emits a single trace line, no behaviour change).
|
|
7614
7619
|
* A declared stack → its ``stack_contract_hash`` is echoed to the run trace.
|
|
@@ -7658,6 +7663,34 @@ def _intake_stack_contract_for_verify(project_root: Path) -> None:
|
|
|
7658
7663
|
if gate.red:
|
|
7659
7664
|
raise SystemExit(1)
|
|
7660
7665
|
|
|
7666
|
+
# Stack command MATERIALIZATION (Contract Kernel v2.77c) — the verify-path mirror
|
|
7667
|
+
# of the greenfield pipeline's :meth:`_materialize_stack_commands`. (1) CONFLICT
|
|
7668
|
+
# GATE: a composition conflict (command collision / unproved replace / weakened
|
|
7669
|
+
# obligation / exclusive / deny) is RED (honest non-zero exit) — the composer
|
|
7670
|
+
# already refuses a silent last-wins merge by recording a Conflict; this makes it
|
|
7671
|
+
# a gate. (2) PLAN + EXECUTE: build a deterministic, contract-driven command plan
|
|
7672
|
+
# (NO framework literal) and INVOKE each composed slot by exit code, so a declared
|
|
7673
|
+
# framework_build/e2e_test is genuinely run on verify (not silently skipped while
|
|
7674
|
+
# the language verify greens alone). Exit-code ONLY here; command AUTHENTICITY is
|
|
7675
|
+
# v2.77d and the obligation-checker gate is v2.77e (out of lane).
|
|
7676
|
+
from codd.stack.command_plan import (
|
|
7677
|
+
StackCommandMaterializationError,
|
|
7678
|
+
StackContractConflictError,
|
|
7679
|
+
materialize_stack_command_plan,
|
|
7680
|
+
)
|
|
7681
|
+
|
|
7682
|
+
try:
|
|
7683
|
+
plan, _result = materialize_stack_command_plan(
|
|
7684
|
+
contract, project_root, executor=stack_command_executor
|
|
7685
|
+
)
|
|
7686
|
+
except (StackContractConflictError, StackCommandMaterializationError) as exc:
|
|
7687
|
+
click.echo(f"[verify] stack command materialization: {exc}", err=True)
|
|
7688
|
+
raise SystemExit(1) from exc
|
|
7689
|
+
click.echo(
|
|
7690
|
+
f"[verify] stack command materialization: {len(plan.slots)} slot(s) invoked "
|
|
7691
|
+
f"({', '.join(plan.command_ids)})"
|
|
7692
|
+
)
|
|
7693
|
+
|
|
7661
7694
|
|
|
7662
7695
|
def _run_verify_once(
|
|
7663
7696
|
path: str,
|
|
@@ -313,6 +313,11 @@ CiScaffoldRunner = Callable[..., str]
|
|
|
313
313
|
PropagateRunner = Callable[..., str]
|
|
314
314
|
CheckRunner = Callable[[Path], str]
|
|
315
315
|
Notifier = Callable[[str, str], bool]
|
|
316
|
+
#: Injectable seam for the v2.77c stack-command materialization executor (a slot →
|
|
317
|
+
#: exit-code outcome). Default (None) uses the real subprocess executor in
|
|
318
|
+
#: ``codd.stack.command_plan``; tests inject a recording/sentinel executor so the
|
|
319
|
+
#: declared stack command slots are provably invoked without real Next.js/Playwright.
|
|
320
|
+
StackCommandExecutor = Callable[..., Any]
|
|
316
321
|
|
|
317
322
|
|
|
318
323
|
class GreenfieldPipeline:
|
|
@@ -351,6 +356,7 @@ class GreenfieldPipeline:
|
|
|
351
356
|
propagate_runner: PropagateRunner | None = None,
|
|
352
357
|
check_runner: CheckRunner | None = None,
|
|
353
358
|
notifier: Notifier | None = None,
|
|
359
|
+
stack_command_executor: StackCommandExecutor | None = None,
|
|
354
360
|
echo: Callable[[str], None] = print,
|
|
355
361
|
) -> None:
|
|
356
362
|
self.project_name = project_name
|
|
@@ -380,6 +386,7 @@ class GreenfieldPipeline:
|
|
|
380
386
|
self.propagate_runner = propagate_runner
|
|
381
387
|
self.check_runner = check_runner
|
|
382
388
|
self.notifier = notifier
|
|
389
|
+
self.stack_command_executor = stack_command_executor
|
|
383
390
|
self.echo = echo
|
|
384
391
|
|
|
385
392
|
def _restore_session_options(self, session: dict[str, Any]) -> None:
|
|
@@ -500,6 +507,32 @@ class GreenfieldPipeline:
|
|
|
500
507
|
{"status": STATUS_PENDING, "detail": ""}, str(exc),
|
|
501
508
|
)
|
|
502
509
|
|
|
510
|
+
# Stack command MATERIALIZATION (Contract Kernel v2.77c) — connect the
|
|
511
|
+
# composed stack commands (and thus the stack obligations) to the run's
|
|
512
|
+
# ACTUAL verify/build/test command plan. Two parts (both RED-routed through
|
|
513
|
+
# _fail, like intake/lock):
|
|
514
|
+
# 1. CONFLICT GATE — a composition conflict (command collision / unproved
|
|
515
|
+
# replace / weakened obligation / exclusive / deny) is RED. The composer
|
|
516
|
+
# already records these (it refuses last-wins); this makes that a gate.
|
|
517
|
+
# 2. PLAN + EXECUTE — build a deterministic, contract-driven command plan
|
|
518
|
+
# from contract.commands (NO framework literal) and INVOKE each slot by
|
|
519
|
+
# exit code, so a declared framework_build/e2e_test is genuinely run (not
|
|
520
|
+
# silently skipped while the language verify greens alone — the false
|
|
521
|
+
# green this step closes). Exit-code ONLY here; command AUTHENTICITY
|
|
522
|
+
# (no-op/"build":"true"/observed-no-tests) is v2.77d and the obligation-
|
|
523
|
+
# checker gate is v2.77e — both deliberately out of lane.
|
|
524
|
+
# Only for stack-declared projects (contract is not None) — a non-stack run
|
|
525
|
+
# never reaches here, so it is byte-identical (no plan, no execution, no new
|
|
526
|
+
# trace keys).
|
|
527
|
+
try:
|
|
528
|
+
if contract is not None:
|
|
529
|
+
self._materialize_stack_commands(project_root, session, contract)
|
|
530
|
+
except StageError as exc:
|
|
531
|
+
return self._fail(
|
|
532
|
+
project_root, session, options, "stack_commands",
|
|
533
|
+
{"status": STATUS_PENDING, "detail": ""}, str(exc),
|
|
534
|
+
)
|
|
535
|
+
|
|
503
536
|
runners: dict[str, Callable[[Path, dict[str, Any], dict[str, Any]], None]] = {
|
|
504
537
|
"init": self._stage_init,
|
|
505
538
|
"elicit": self._stage_elicit,
|
|
@@ -667,6 +700,53 @@ class GreenfieldPipeline:
|
|
|
667
700
|
if gate.red:
|
|
668
701
|
raise StageError(gate.message)
|
|
669
702
|
|
|
703
|
+
# ── stack command materialization (Contract Kernel v2.77c) ──
|
|
704
|
+
|
|
705
|
+
def _materialize_stack_commands(self, project_root: Path, session: dict[str, Any], contract) -> None:
|
|
706
|
+
"""Conflict-gate + materialize the composed stack commands into the run plan (v2.77c).
|
|
707
|
+
|
|
708
|
+
See the call site in :meth:`run`. Only invoked for stack-declared projects.
|
|
709
|
+
|
|
710
|
+
1. CONFLICT GATE — :func:`assert_stack_contract_clean` (inside
|
|
711
|
+
:func:`stack_command_plan`) raises :class:`StackContractConflictError` on
|
|
712
|
+
ANY composition conflict (command collision / unproved replace / weakened
|
|
713
|
+
obligation / exclusive / deny). That is RED — the composer already refuses
|
|
714
|
+
a silent last-wins merge by recording a ``Conflict``; this makes it a gate.
|
|
715
|
+
2. MATERIALIZE — build a deterministic, contract-driven command plan and
|
|
716
|
+
INVOKE each composed slot by exit code (via the injectable
|
|
717
|
+
``stack_command_executor`` seam). A failing slot raises
|
|
718
|
+
:class:`StackCommandMaterializationError`. Both domain errors become a
|
|
719
|
+
:class:`StageError` so the autopilot reports them honestly (the run does
|
|
720
|
+
NOT advance to the stage loop with a conflicted/failing stack plan).
|
|
721
|
+
|
|
722
|
+
The materialized plan + executed slot ids are recorded in the run trace
|
|
723
|
+
(observable, like the intake hash + lock verdict) so "the declared stack
|
|
724
|
+
command slots were invoked" is provable. Exit-code only — authenticity is
|
|
725
|
+
v2.77d, the obligation-checker gate is v2.77e.
|
|
726
|
+
"""
|
|
727
|
+
from codd.stack.command_plan import (
|
|
728
|
+
StackCommandMaterializationError,
|
|
729
|
+
StackContractConflictError,
|
|
730
|
+
materialize_stack_command_plan,
|
|
731
|
+
)
|
|
732
|
+
|
|
733
|
+
try:
|
|
734
|
+
plan, result = materialize_stack_command_plan(
|
|
735
|
+
contract, project_root, executor=self.stack_command_executor
|
|
736
|
+
)
|
|
737
|
+
except (StackContractConflictError, StackCommandMaterializationError) as exc:
|
|
738
|
+
self.echo(f"[greenfield] stack command materialization: {exc}")
|
|
739
|
+
raise StageError(str(exc)) from exc
|
|
740
|
+
|
|
741
|
+
record = session.get("stack_contract")
|
|
742
|
+
if isinstance(record, dict):
|
|
743
|
+
record["stack_command_plan"] = plan.to_record()
|
|
744
|
+
record["stack_commands_executed"] = list(result.executed_slot_ids)
|
|
745
|
+
self.echo(
|
|
746
|
+
"[greenfield] stack command materialization: "
|
|
747
|
+
f"{len(plan.slots)} slot(s) invoked ({', '.join(plan.command_ids)})"
|
|
748
|
+
)
|
|
749
|
+
|
|
670
750
|
# ── option resolution ───────────────────────────────────
|
|
671
751
|
|
|
672
752
|
def _resolve_options(self, project_root: Path) -> dict[str, Any]:
|
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
"""Materialize a ResolvedStackContract's composed commands into the run's command plan.
|
|
2
|
+
|
|
3
|
+
Contract Kernel v2.77c (Stack Command Materialization). v2.77a brought the
|
|
4
|
+
framework-stack contract LIVE (intake hash → trace); v2.77b made the lock a
|
|
5
|
+
red/green gate. This step connects the *composed commands* (and, through them, the
|
|
6
|
+
stack obligations) to the verify/build/test command plan the run ACTUALLY executes
|
|
7
|
+
— so a declared ``framework_build`` / ``e2e_test`` / ``migration_check`` slot is
|
|
8
|
+
genuinely invoked, not silently ignored while the run greens on the language verify
|
|
9
|
+
alone (the false-green this step removes, GPT-5.5 Pro consult 2026-06-21).
|
|
10
|
+
|
|
11
|
+
Two responsibilities, kept PURE (this module imports neither pipeline nor CLI code;
|
|
12
|
+
it raises domain errors the call-sites translate):
|
|
13
|
+
|
|
14
|
+
1. **Conflict gate** — :func:`assert_stack_contract_clean` reds on ANY composition
|
|
15
|
+
conflict (command collision / unproved replace / semantic weaken / exclusive /
|
|
16
|
+
deny / any future kind) via :class:`StackContractConflictError`. The composer
|
|
17
|
+
(``codd.stack.compose``) is the authority that lowers those into ``Conflict``
|
|
18
|
+
entries — this module does NOT reimplement merge semantics, it gates on them.
|
|
19
|
+
Defensive: it also reds on ``not is_clean`` / ``not strict_ok`` so an invalid
|
|
20
|
+
contract state (conflicts cleared but a flag still false) can never sneak to
|
|
21
|
+
green. "last-wins" is forbidden because the composer records a ``Conflict``
|
|
22
|
+
instead of silently overwriting; this gate turns that record into a RED.
|
|
23
|
+
|
|
24
|
+
2. **Materialization** — :func:`stack_command_plan` builds a deterministic, ordered
|
|
25
|
+
:class:`StackCommandPlan` from ``contract.commands`` + ``contract.command_owners``
|
|
26
|
+
(NO framework-name literal — the plan is driven entirely by the resolved
|
|
27
|
+
contract), and :func:`execute_stack_command_plan` actually invokes each slot by
|
|
28
|
+
exit code. A non-zero / un-spawnable / timed-out slot is RED. This is exit-code
|
|
29
|
+
pass/fail ONLY — proving the declared stack command slots were INVOKED. Proving
|
|
30
|
+
those invoked commands are *meaningful* (no-op / ``"build": "true"`` / empty
|
|
31
|
+
script / missing reporter / observed-no-tests) is v2.77d (command authenticity),
|
|
32
|
+
a SEPARATE seam; the obligation-checker gate (``verify_project_stack``) is v2.77e.
|
|
33
|
+
|
|
34
|
+
A project with no ``stack:`` block resolves to ``contract is None`` and never
|
|
35
|
+
reaches this module — the call-sites hard-branch on ``contract is not None``, so
|
|
36
|
+
non-stack runs are byte-identical (no plan, no new trace keys, no execution).
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
from __future__ import annotations
|
|
40
|
+
|
|
41
|
+
import os
|
|
42
|
+
import subprocess # noqa: S404 — argv comes from the trusted resolved stack contract, shell=False.
|
|
43
|
+
from dataclasses import dataclass, field
|
|
44
|
+
from pathlib import Path
|
|
45
|
+
from typing import Mapping, Protocol, Sequence
|
|
46
|
+
|
|
47
|
+
from codd.languages.profile import CommandSpec
|
|
48
|
+
|
|
49
|
+
from .compose import ResolvedStackContract
|
|
50
|
+
|
|
51
|
+
#: Default wall-clock cap for a single stack command slot. A slot that exceeds it is
|
|
52
|
+
#: RED (a timeout is never green), never a hang that blocks the gate forever. Mirrors
|
|
53
|
+
#: ``codd.languages.verify_executor.DEFAULT_VERIFY_TIMEOUT_SECONDS``.
|
|
54
|
+
DEFAULT_STACK_COMMAND_TIMEOUT_SECONDS = 1800
|
|
55
|
+
|
|
56
|
+
#: Layer-kind ordering for a deterministic plan: language slots first, then
|
|
57
|
+
#: framework, then addon (the design's composition order — §合成順序). Unknown
|
|
58
|
+
#: owner kinds sort last (stable, after the known kinds) so the plan is still
|
|
59
|
+
#: deterministic for a future layer kind.
|
|
60
|
+
_OWNER_KIND_ORDER = {"language": 0, "framework": 1, "addon": 2, "runtime": 3, "platform": 4}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class StackContractConflictError(RuntimeError):
|
|
64
|
+
"""A resolved stack contract carries a composition conflict — the gate reds.
|
|
65
|
+
|
|
66
|
+
Raised by :func:`assert_stack_contract_clean`. The call-sites translate it to
|
|
67
|
+
their context's RED (``StageError`` in the greenfield pipeline → ``_fail``;
|
|
68
|
+
``SystemExit`` non-zero on the verify CLI path).
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class StackCommandMaterializationError(RuntimeError):
|
|
73
|
+
"""A composed stack command slot failed when actually invoked (exit-code RED).
|
|
74
|
+
|
|
75
|
+
Raised by :func:`execute_stack_command_plan` when a slot exits non-zero, cannot
|
|
76
|
+
spawn, or times out. (Authenticity — whether an exit-0 slot was *meaningful* —
|
|
77
|
+
is v2.77d, NOT raised here.)
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def _owner_sort_key(owner: str, slot_id: str) -> tuple[int, str, str]:
|
|
82
|
+
kind = owner.split(":", 1)[0] if owner else ""
|
|
83
|
+
return (_OWNER_KIND_ORDER.get(kind, len(_OWNER_KIND_ORDER)), owner, slot_id)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def assert_stack_contract_clean(contract: ResolvedStackContract) -> None:
|
|
87
|
+
"""Conflict gate (v2.77c): red on ANY composition conflict / unclean state.
|
|
88
|
+
|
|
89
|
+
Anti-false-green: a command collision, an unproved replace (a layer replacing
|
|
90
|
+
another's command with different argv and no ``replace_with_proof`` — exactly a
|
|
91
|
+
command conflict today), a semantic weaken (an addon lowering a framework
|
|
92
|
+
obligation's severity), an exclusive conflict, a deny, or any future conflict
|
|
93
|
+
kind makes the contract NOT clean → :class:`StackContractConflictError`. The
|
|
94
|
+
composer already records these as ``Conflict`` entries (it refuses last-wins);
|
|
95
|
+
this turns that record into a gate. Defensive triple-check (``conflicts`` /
|
|
96
|
+
``is_clean`` / ``strict_ok``) so a flag desync can never sneak to green.
|
|
97
|
+
"""
|
|
98
|
+
if contract.conflicts or not contract.is_clean or not contract.strict_ok:
|
|
99
|
+
reasons = (
|
|
100
|
+
"; ".join(f"[{c.kind}] {c.detail}" for c in contract.conflicts)
|
|
101
|
+
or "resolved stack contract is not in a clean composed state"
|
|
102
|
+
)
|
|
103
|
+
raise StackContractConflictError(
|
|
104
|
+
f"stack composition conflict ({contract.stack_id}): {reasons}. "
|
|
105
|
+
"A command collision / unproved replace / weakened obligation / exclusive "
|
|
106
|
+
"conflict is RED — the composer does NOT silently last-wins-merge a "
|
|
107
|
+
"collision, and the run will not materialize a command plan from a "
|
|
108
|
+
"conflicted contract. Resolve the conflict in the stack profiles (or "
|
|
109
|
+
"declare an explicit replace_with_proof once that mechanism exists)."
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
@dataclass(frozen=True)
|
|
114
|
+
class StackCommandSlot:
|
|
115
|
+
"""One materialized command slot in the run's plan, with its owning namespace.
|
|
116
|
+
|
|
117
|
+
``slot_id`` is the command id (e.g. ``typecheck`` / ``framework_build`` /
|
|
118
|
+
``e2e_test``); ``owner`` is its composed owner (``language:typescript`` /
|
|
119
|
+
``framework:nextjs`` / ``addon:playwright``) — the namespace ownership that makes
|
|
120
|
+
a green in one slot never imply another. ``argv`` is the canonical (shell-free)
|
|
121
|
+
command. ``cwd``/``env`` may carry literal layout placeholders (not substituted
|
|
122
|
+
here — Phase-1 contract).
|
|
123
|
+
"""
|
|
124
|
+
|
|
125
|
+
slot_id: str
|
|
126
|
+
owner: str
|
|
127
|
+
argv: tuple[str, ...]
|
|
128
|
+
cwd: str | None = None
|
|
129
|
+
env: Mapping[str, str] = field(default_factory=dict)
|
|
130
|
+
requires_materialized_deps: bool = False
|
|
131
|
+
report_path: str | None = None
|
|
132
|
+
report_adapter: str | None = None
|
|
133
|
+
report_capture: str | None = None
|
|
134
|
+
|
|
135
|
+
@property
|
|
136
|
+
def command_str(self) -> str:
|
|
137
|
+
return " ".join(self.argv)
|
|
138
|
+
|
|
139
|
+
def to_record(self) -> dict[str, object]:
|
|
140
|
+
rec: dict[str, object] = {
|
|
141
|
+
"slot": self.slot_id,
|
|
142
|
+
"owner": self.owner,
|
|
143
|
+
"argv": list(self.argv),
|
|
144
|
+
}
|
|
145
|
+
if self.cwd:
|
|
146
|
+
rec["cwd"] = self.cwd
|
|
147
|
+
return rec
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
@dataclass(frozen=True)
|
|
151
|
+
class StackCommandPlan:
|
|
152
|
+
"""The deterministic, contract-driven plan of composed stack command slots.
|
|
153
|
+
|
|
154
|
+
Built ENTIRELY from ``contract.commands`` + ``contract.command_owners`` (no
|
|
155
|
+
framework literal): changing the stack profile/declaration changes the resolved
|
|
156
|
+
commands and thus this plan. ``content_hash`` ties the plan to the contract it
|
|
157
|
+
came from (observability — recorded in the run trace next to the stack hash).
|
|
158
|
+
"""
|
|
159
|
+
|
|
160
|
+
stack_id: str
|
|
161
|
+
content_hash: str
|
|
162
|
+
slots: tuple[StackCommandSlot, ...]
|
|
163
|
+
|
|
164
|
+
@property
|
|
165
|
+
def command_ids(self) -> tuple[str, ...]:
|
|
166
|
+
return tuple(s.slot_id for s in self.slots)
|
|
167
|
+
|
|
168
|
+
def to_record(self) -> dict[str, object]:
|
|
169
|
+
return {
|
|
170
|
+
"stack_id": self.stack_id,
|
|
171
|
+
"stack_contract_hash": self.content_hash,
|
|
172
|
+
"command_slots": [s.to_record() for s in self.slots],
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
def _slot_from_command(slot_id: str, owner: str, spec: CommandSpec) -> StackCommandSlot:
|
|
177
|
+
report = spec.report
|
|
178
|
+
return StackCommandSlot(
|
|
179
|
+
slot_id=slot_id,
|
|
180
|
+
owner=owner,
|
|
181
|
+
argv=tuple(spec.argv),
|
|
182
|
+
cwd=spec.cwd,
|
|
183
|
+
env={str(k): str(v) for k, v in spec.env.items()},
|
|
184
|
+
requires_materialized_deps=bool(spec.requires_materialized_deps),
|
|
185
|
+
report_path=(report.path if report else None),
|
|
186
|
+
report_adapter=(report.adapter if report else None),
|
|
187
|
+
report_capture=(report.capture if report else None),
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def stack_command_plan(contract: ResolvedStackContract) -> StackCommandPlan:
|
|
192
|
+
"""Materialize the composed stack commands into a deterministic command plan.
|
|
193
|
+
|
|
194
|
+
Runs the conflict gate FIRST (:func:`assert_stack_contract_clean`) — a plan is
|
|
195
|
+
NEVER built from a conflicted contract. Then maps every composed command to a
|
|
196
|
+
:class:`StackCommandSlot` carrying its owning namespace, ordered deterministically
|
|
197
|
+
by owner kind (language → framework → addon) then owner then slot id. No
|
|
198
|
+
framework-name literal: the plan is a pure projection of the resolved contract.
|
|
199
|
+
"""
|
|
200
|
+
assert_stack_contract_clean(contract)
|
|
201
|
+
owners = contract.command_owners
|
|
202
|
+
slots = [
|
|
203
|
+
_slot_from_command(slot_id, owners.get(slot_id, ""), spec)
|
|
204
|
+
for slot_id, spec in contract.commands.items()
|
|
205
|
+
]
|
|
206
|
+
slots.sort(key=lambda s: _owner_sort_key(s.owner, s.slot_id))
|
|
207
|
+
return StackCommandPlan(
|
|
208
|
+
stack_id=contract.stack_id,
|
|
209
|
+
content_hash=contract.content_hash,
|
|
210
|
+
slots=tuple(slots),
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
@dataclass(frozen=True)
|
|
215
|
+
class StackCommandSlotResult:
|
|
216
|
+
"""The exit-code outcome of invoking one stack command slot.
|
|
217
|
+
|
|
218
|
+
``spawned`` is False when the tool could not be executed at all (missing
|
|
219
|
+
binary / spawn error); ``timed_out`` True when it exceeded the cap. ``ok`` is the
|
|
220
|
+
anti-false-green verdict: it requires the slot to have SPAWNED, NOT timed out,
|
|
221
|
+
and exited 0. (It says nothing about whether the command was *meaningful* — that
|
|
222
|
+
is v2.77d.)
|
|
223
|
+
"""
|
|
224
|
+
|
|
225
|
+
slot_id: str
|
|
226
|
+
owner: str
|
|
227
|
+
command_str: str
|
|
228
|
+
spawned: bool
|
|
229
|
+
returncode: int | None
|
|
230
|
+
timed_out: bool
|
|
231
|
+
detail: str = ""
|
|
232
|
+
|
|
233
|
+
@property
|
|
234
|
+
def ok(self) -> bool:
|
|
235
|
+
return self.spawned and not self.timed_out and self.returncode == 0
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
@dataclass(frozen=True)
|
|
239
|
+
class StackCommandPlanResult:
|
|
240
|
+
"""Aggregate result of executing a whole :class:`StackCommandPlan`."""
|
|
241
|
+
|
|
242
|
+
results: tuple[StackCommandSlotResult, ...]
|
|
243
|
+
|
|
244
|
+
@property
|
|
245
|
+
def ok(self) -> bool:
|
|
246
|
+
return all(r.ok for r in self.results)
|
|
247
|
+
|
|
248
|
+
@property
|
|
249
|
+
def failed(self) -> tuple[StackCommandSlotResult, ...]:
|
|
250
|
+
return tuple(r for r in self.results if not r.ok)
|
|
251
|
+
|
|
252
|
+
@property
|
|
253
|
+
def executed_slot_ids(self) -> tuple[str, ...]:
|
|
254
|
+
return tuple(r.slot_id for r in self.results)
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
class StackCommandExecutor(Protocol):
|
|
258
|
+
"""Seam that invokes one stack command slot and reports its exit-code outcome.
|
|
259
|
+
|
|
260
|
+
The default (:func:`default_stack_command_executor`) shells out via
|
|
261
|
+
``subprocess.run`` (trusted argv, ``shell=False``). Tests inject a recording /
|
|
262
|
+
sentinel-writing executor so they can prove the declared slots are actually
|
|
263
|
+
invoked WITHOUT needing real Next.js / Playwright (GPT-consult: "use a fake
|
|
264
|
+
fixture command that writes a sentinel or a mocked executor that records called
|
|
265
|
+
command ids").
|
|
266
|
+
"""
|
|
267
|
+
|
|
268
|
+
def __call__(
|
|
269
|
+
self, slot: StackCommandSlot, project_root: Path, *, timeout: float
|
|
270
|
+
) -> StackCommandSlotResult: ...
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
def default_stack_command_executor(
|
|
274
|
+
slot: StackCommandSlot, project_root: Path, *, timeout: float
|
|
275
|
+
) -> StackCommandSlotResult:
|
|
276
|
+
"""Invoke a slot via ``subprocess.run`` (exit-code only; trusted argv, shell=False).
|
|
277
|
+
|
|
278
|
+
Mirrors :func:`codd.languages.verify_executor.execute_verify_plan`'s spawn
|
|
279
|
+
handling: a missing binary / spawn error → ``spawned=False`` (RED); a timeout →
|
|
280
|
+
``timed_out=True`` (RED); otherwise the real exit code. NO report parsing / test
|
|
281
|
+
observation here — that is v2.77d authenticity.
|
|
282
|
+
"""
|
|
283
|
+
cwd = (project_root / slot.cwd) if slot.cwd else project_root
|
|
284
|
+
env = os.environ.copy()
|
|
285
|
+
env.update(slot.env)
|
|
286
|
+
try:
|
|
287
|
+
completed = subprocess.run( # noqa: S603 — trusted argv from the resolved contract, shell=False.
|
|
288
|
+
list(slot.argv),
|
|
289
|
+
shell=False,
|
|
290
|
+
cwd=str(cwd),
|
|
291
|
+
env=env,
|
|
292
|
+
capture_output=True,
|
|
293
|
+
text=True,
|
|
294
|
+
timeout=timeout,
|
|
295
|
+
)
|
|
296
|
+
except (FileNotFoundError, OSError) as exc:
|
|
297
|
+
return StackCommandSlotResult(
|
|
298
|
+
slot_id=slot.slot_id,
|
|
299
|
+
owner=slot.owner,
|
|
300
|
+
command_str=slot.command_str,
|
|
301
|
+
spawned=False,
|
|
302
|
+
returncode=None,
|
|
303
|
+
timed_out=False,
|
|
304
|
+
detail=f"stack command slot could not spawn ({slot.command_str!r}): {exc}",
|
|
305
|
+
)
|
|
306
|
+
except subprocess.TimeoutExpired:
|
|
307
|
+
return StackCommandSlotResult(
|
|
308
|
+
slot_id=slot.slot_id,
|
|
309
|
+
owner=slot.owner,
|
|
310
|
+
command_str=slot.command_str,
|
|
311
|
+
spawned=True,
|
|
312
|
+
returncode=None,
|
|
313
|
+
timed_out=True,
|
|
314
|
+
detail=f"stack command slot timed out after {timeout}s ({slot.command_str!r})",
|
|
315
|
+
)
|
|
316
|
+
return StackCommandSlotResult(
|
|
317
|
+
slot_id=slot.slot_id,
|
|
318
|
+
owner=slot.owner,
|
|
319
|
+
command_str=slot.command_str,
|
|
320
|
+
spawned=True,
|
|
321
|
+
returncode=completed.returncode,
|
|
322
|
+
timed_out=False,
|
|
323
|
+
detail=("" if completed.returncode == 0 else f"exit {completed.returncode}"),
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
def execute_stack_command_plan(
|
|
328
|
+
plan: StackCommandPlan,
|
|
329
|
+
project_root: Path,
|
|
330
|
+
*,
|
|
331
|
+
executor: StackCommandExecutor | None = None,
|
|
332
|
+
timeout: float | None = None,
|
|
333
|
+
) -> StackCommandPlanResult:
|
|
334
|
+
"""Invoke every slot in ``plan`` (exit-code pass/fail) and aggregate the result.
|
|
335
|
+
|
|
336
|
+
This is the materialization that makes "stack obligations affect actual
|
|
337
|
+
commands": the composed ``framework_build`` / ``e2e_test`` / ``migration_check``
|
|
338
|
+
slots are actually run, so a slot that would fail is no longer silently skipped
|
|
339
|
+
while the run greens on the language verify alone. ``executor`` is the injectable
|
|
340
|
+
seam (default: real subprocess). Exit-code ONLY — authenticity is v2.77d.
|
|
341
|
+
"""
|
|
342
|
+
run_executor = executor if executor is not None else default_stack_command_executor
|
|
343
|
+
run_timeout = timeout if timeout is not None else DEFAULT_STACK_COMMAND_TIMEOUT_SECONDS
|
|
344
|
+
results = tuple(
|
|
345
|
+
run_executor(slot, project_root, timeout=run_timeout) for slot in plan.slots
|
|
346
|
+
)
|
|
347
|
+
return StackCommandPlanResult(results=results)
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
def materialize_stack_command_plan(
|
|
351
|
+
contract: ResolvedStackContract,
|
|
352
|
+
project_root: Path,
|
|
353
|
+
*,
|
|
354
|
+
executor: StackCommandExecutor | None = None,
|
|
355
|
+
timeout: float | None = None,
|
|
356
|
+
) -> tuple[StackCommandPlan, StackCommandPlanResult]:
|
|
357
|
+
"""Conflict-gate → build the plan → execute it, raising the domain RED on failure.
|
|
358
|
+
|
|
359
|
+
The single entry the pipeline / verify call-sites use:
|
|
360
|
+
|
|
361
|
+
* the conflict gate (:func:`assert_stack_contract_clean`, inside
|
|
362
|
+
:func:`stack_command_plan`) raises :class:`StackContractConflictError` on any
|
|
363
|
+
conflict;
|
|
364
|
+
* executing the plan raises :class:`StackCommandMaterializationError` if any slot
|
|
365
|
+
is not ``ok`` (non-zero / un-spawnable / timed out).
|
|
366
|
+
|
|
367
|
+
Returns ``(plan, result)`` on success so the caller can record the materialized
|
|
368
|
+
plan (and which slots executed) in the run trace.
|
|
369
|
+
"""
|
|
370
|
+
plan = stack_command_plan(contract) # conflict gate runs here
|
|
371
|
+
result = execute_stack_command_plan(
|
|
372
|
+
plan, project_root, executor=executor, timeout=timeout
|
|
373
|
+
)
|
|
374
|
+
if not result.ok:
|
|
375
|
+
detail = "; ".join(
|
|
376
|
+
f"{r.slot_id} ({r.owner}): {r.detail or 'failed'}" for r in result.failed
|
|
377
|
+
)
|
|
378
|
+
raise StackCommandMaterializationError(
|
|
379
|
+
f"stack command materialization failed ({plan.stack_id}): {detail}. "
|
|
380
|
+
"A composed stack command slot was invoked and did NOT pass (exit-code) — "
|
|
381
|
+
"the declared framework/addon command is part of the run's command plan "
|
|
382
|
+
"and must run green (anti-false-green: a failing framework_build/e2e_test "
|
|
383
|
+
"is not silently skipped while the language verify greens alone)."
|
|
384
|
+
)
|
|
385
|
+
return plan, result
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|