codd-dev 2.97.0__tar.gz → 2.98.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.97.0 → codd_dev-2.98.0}/PKG-INFO +1 -1
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/__init__.py +1 -1
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/command_plan.py +180 -8
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/compose.py +111 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/pyproject.toml +1 -1
- {codd_dev-2.97.0 → codd_dev-2.98.0}/.gitignore +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/LICENSE +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/README.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/__main__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/assembler.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/bridge.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/cli.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/clustering.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/confidence.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/config.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/config_schema.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/contracts.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/contracts_registry/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/contracts_registry/__main__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/contracts_registry/certify.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/contracts_registry/generate_matrix.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/contracts_registry/registry.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/coverage_execution_coherence.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/defaults.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/defaults.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployer.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/design_md.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/discovery.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/drift.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/e2e_harness.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/env_refs.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/extractor.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fixer.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/generator.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/graph.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/greenfield/pipeline.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/implement_oracle.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/implement_oracle_scope.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/implement_oracle_types.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/implementer.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/inheritance.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/adapters/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/adapters/implement_oracle.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/adapters/oracle_go.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/adapters/oracle_python.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/adapters/oracle_typescript.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/adapters/runner_report.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/builtin_adapters.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/compat.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/contract.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/loader.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/oracle_executor.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/path_planner.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/profile.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/profiles/go.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/profiles/python.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/profiles/typescript.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/registry.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/verify_executor.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/languages/verify_plan.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/lexicon.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/measure.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/parsing/extractor_registry.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/parsing/regex_strategies.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/planner.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/policy.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/project_types.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/propagate.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/propagator.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/reference_resolution.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/registry.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/auto_scope_guard.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/history.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/require.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/restore.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/scanner.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/adapters/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/adapters/_base.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/adapters/nextjs.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/adapters/playwright.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/command_authenticity.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/loader.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/lock.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/obligations.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/profile.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/project.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/registry.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/replacement_proof.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/stack/resolve.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/synth.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/test_detection.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/traceability.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/validator.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/vb_marker_authenticity.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/vb_rerun_scope.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/verifiable_behavior_audit.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/watch/events.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd/wiring.py +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/dogfood/README.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/examples/README.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.97.0 → codd_dev-2.98.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.98.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
|
|
@@ -39,14 +39,33 @@ non-stack runs are byte-identical (no plan, no new trace keys, no execution).
|
|
|
39
39
|
from __future__ import annotations
|
|
40
40
|
|
|
41
41
|
import os
|
|
42
|
+
import re
|
|
42
43
|
import subprocess # noqa: S404 — argv comes from the trusted resolved stack contract, shell=False.
|
|
43
44
|
from dataclasses import dataclass, field
|
|
44
45
|
from pathlib import Path
|
|
45
46
|
from typing import Any, Mapping, Protocol, Sequence
|
|
46
47
|
|
|
47
48
|
from codd.languages.profile import CommandSpec
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
from codd.languages.verify_plan import _substitute_layout_placeholders
|
|
50
|
+
|
|
51
|
+
from .compose import (
|
|
52
|
+
NON_VERIFICATION_SLOTS,
|
|
53
|
+
VERIFICATION_SLOTS,
|
|
54
|
+
ResolvedStackContract,
|
|
55
|
+
StackLayout,
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
#: The layout placeholder tokens the plan substitutes. The unsubstituted-guard matches
|
|
59
|
+
#: ONLY these KNOWN tokens (not an arbitrary ``\{...\}``) so a legitimate argv that
|
|
60
|
+
#: happens to carry braces — a JSON ``--define={...}`` flag, or a ``printf '%s'
|
|
61
|
+
#: '{"suites":...}'`` that streams a report — is NOT a false positive (the v2.75 oracle
|
|
62
|
+
#: path can use the broad regex because oracle argv is never JSON; stack e2e argv can be).
|
|
63
|
+
#: A remaining KNOWN token means the layout did not resolve it → the executor must NOT
|
|
64
|
+
#: spawn in a literal ``{module_root}`` dir / write to a literal ``{report}`` path.
|
|
65
|
+
_KNOWN_LAYOUT_PLACEHOLDERS = ("{module_root}", "{repo_root}", "{manifest_root}", "{test_root}", "{report}")
|
|
66
|
+
_UNSUBSTITUTED_PLACEHOLDER_RE = re.compile(
|
|
67
|
+
"|".join(re.escape(tok) for tok in _KNOWN_LAYOUT_PLACEHOLDERS)
|
|
68
|
+
)
|
|
50
69
|
|
|
51
70
|
#: Default wall-clock cap for a single stack command slot. A slot that exceeds it is
|
|
52
71
|
#: RED (a timeout is never green), never a hang that blocks the gate forever. Mirrors
|
|
@@ -78,6 +97,21 @@ class StackCommandMaterializationError(RuntimeError):
|
|
|
78
97
|
"""
|
|
79
98
|
|
|
80
99
|
|
|
100
|
+
class StackCommandClassificationError(StackContractConflictError):
|
|
101
|
+
"""A composed command slot has NO execution classification (Contract Kernel v2.77g).
|
|
102
|
+
|
|
103
|
+
Raised by :func:`stack_command_plan` when ``contract.commands`` carries a slot id that
|
|
104
|
+
is in NEITHER :data:`codd.stack.compose.VERIFICATION_SLOTS` (executed as a release
|
|
105
|
+
check) NOR :data:`codd.stack.compose.NON_VERIFICATION_SLOTS` (a known lifecycle/
|
|
106
|
+
convenience slot deliberately excluded). The harness does NOT guess: an unknown slot
|
|
107
|
+
could be a genuine verification the plan would otherwise SILENTLY DROP (a false-green)
|
|
108
|
+
or a long-running server it would HANG on. So an unclassified slot is RED at plan
|
|
109
|
+
build, forcing the profile to classify every command it declares. Subclasses
|
|
110
|
+
:class:`StackContractConflictError` so the existing call-sites (greenfield pipeline +
|
|
111
|
+
verify CLI), which already translate that to their context's RED, catch it unchanged.
|
|
112
|
+
"""
|
|
113
|
+
|
|
114
|
+
|
|
81
115
|
#: Harness-owned directory (under the project) where a stack command's CURRENT-RUN
|
|
82
116
|
#: report evidence is teed (for ``capture: stdout`` commands — ``npx playwright test
|
|
83
117
|
#: --reporter=json`` streams its report to stdout). A per-slot file under here is the
|
|
@@ -92,6 +126,28 @@ def _owner_sort_key(owner: str, slot_id: str) -> tuple[int, str, str]:
|
|
|
92
126
|
return (_OWNER_KIND_ORDER.get(kind, len(_OWNER_KIND_ORDER)), owner, slot_id)
|
|
93
127
|
|
|
94
128
|
|
|
129
|
+
def _unsubstituted_placeholders(slot: "StackCommandSlot") -> list[str]:
|
|
130
|
+
"""Human labels for any ``{placeholder}`` the plan-build substitution did not resolve.
|
|
131
|
+
|
|
132
|
+
Empty ⇒ every cwd/argv/env value is concrete (safe to spawn). A non-empty list means
|
|
133
|
+
a slot still carries a literal ``{...}`` (the resolved stack layout had no value for
|
|
134
|
+
it) — the executor fails closed rather than spawn in an unresolved path. ``report_path``
|
|
135
|
+
is the slot's resolved evidence target and is checked too (a literal ``{report}`` there
|
|
136
|
+
would desync writer/reader)."""
|
|
137
|
+
problems: list[str] = []
|
|
138
|
+
if _UNSUBSTITUTED_PLACEHOLDER_RE.search(slot.cwd or ""):
|
|
139
|
+
problems.append(f"cwd={slot.cwd!r}")
|
|
140
|
+
for arg in slot.argv:
|
|
141
|
+
if _UNSUBSTITUTED_PLACEHOLDER_RE.search(arg or ""):
|
|
142
|
+
problems.append(f"argv:{arg!r}")
|
|
143
|
+
for key, value in slot.env.items():
|
|
144
|
+
if _UNSUBSTITUTED_PLACEHOLDER_RE.search(str(value)):
|
|
145
|
+
problems.append(f"env[{key}]={value!r}")
|
|
146
|
+
if _UNSUBSTITUTED_PLACEHOLDER_RE.search(slot.report_path or ""):
|
|
147
|
+
problems.append(f"report_path={slot.report_path!r}")
|
|
148
|
+
return problems
|
|
149
|
+
|
|
150
|
+
|
|
95
151
|
def stack_command_evidence_path(slot: "StackCommandSlot", project_root: Path) -> Path:
|
|
96
152
|
"""The deterministic per-slot current-run report evidence file (``capture: stdout``).
|
|
97
153
|
|
|
@@ -235,16 +291,69 @@ class StackCommandPlan:
|
|
|
235
291
|
}
|
|
236
292
|
|
|
237
293
|
|
|
238
|
-
def
|
|
294
|
+
def _substitute_stack_placeholders(
|
|
295
|
+
value: str | None, layout: StackLayout, *, report_path: str | None
|
|
296
|
+
) -> str | None:
|
|
297
|
+
"""Resolve a stack command's layout placeholders (cwd/argv/env), report-aware.
|
|
298
|
+
|
|
299
|
+
Reuses :func:`codd.languages.verify_plan._substitute_layout_placeholders` for the
|
|
300
|
+
shared roots (``{module_root}`` / ``{repo_root}`` / ``{manifest_root}``) — the SAME
|
|
301
|
+
helper the language verify executor + the oracle install-preflight use (the v2.75/
|
|
302
|
+
v2.76 fix) — then resolves the two stack-command extras the language helper does not:
|
|
303
|
+
|
|
304
|
+
* ``{test_root}`` — the resolved test tree root (a ``verify`` slot runs
|
|
305
|
+
``vitest run {test_root}``); from :attr:`StackLayout.test_root`.
|
|
306
|
+
* ``{report}`` — the slot's OWN declared ``report_path`` (a ``verify`` slot writes
|
|
307
|
+
``--outputFile={report}``). It MUST resolve to exactly ``report_path`` so the
|
|
308
|
+
command's ``--outputFile`` and the authenticity/obligation reader (which reads
|
|
309
|
+
``slot.report_path``) name the SAME file — a mismatch would make the reader see a
|
|
310
|
+
missing report (false-RED) or read a stale one (false-green). Both are resolved
|
|
311
|
+
relative to the run cwd, which is ``module_root`` for both writer and reader, so a
|
|
312
|
+
relative ``report_path`` lands at one absolute path. ``{report}`` with no declared
|
|
313
|
+
``report_path`` is left literal → the unsubstituted→RED guard fires (a command
|
|
314
|
+
that writes a report MUST declare where, or it cannot be observed).
|
|
315
|
+
"""
|
|
316
|
+
if value is None:
|
|
317
|
+
return None
|
|
318
|
+
resolved = _substitute_layout_placeholders(value, layout)
|
|
319
|
+
assert resolved is not None # value was not None
|
|
320
|
+
resolved = resolved.replace("{test_root}", layout.test_root)
|
|
321
|
+
if report_path is not None:
|
|
322
|
+
resolved = resolved.replace("{report}", report_path)
|
|
323
|
+
return resolved
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
def _slot_from_command(
|
|
327
|
+
slot_id: str, owner: str, spec: CommandSpec, layout: StackLayout
|
|
328
|
+
) -> StackCommandSlot:
|
|
329
|
+
"""Build a slot, SUBSTITUTING its layout placeholders at plan-build time.
|
|
330
|
+
|
|
331
|
+
Substitution happens HERE (build time), not in the executor, because the plan is a
|
|
332
|
+
shared artifact: the authenticity gate and the obligation gate ALSO rebuild the plan
|
|
333
|
+
(:func:`stack_command_plan`) and read ``slot.cwd`` (``project_root / slot.cwd``) +
|
|
334
|
+
``slot.report_path`` to locate the report. If substitution lived only in the
|
|
335
|
+
executor, those READERS would still see a literal ``{module_root}`` and resolve the
|
|
336
|
+
wrong path — re-introducing the bug on the read side. Baking the resolved values into
|
|
337
|
+
the slot makes ALL THREE consumers agree on one resolved truth. A placeholder the
|
|
338
|
+
layout could not resolve is LEFT literal here and fails closed at execution (the
|
|
339
|
+
executor refuses to spawn in a literal ``{...}`` dir — RED, never a silent pass).
|
|
340
|
+
"""
|
|
239
341
|
report = spec.report
|
|
342
|
+
report_path = report.path if report else None
|
|
240
343
|
return StackCommandSlot(
|
|
241
344
|
slot_id=slot_id,
|
|
242
345
|
owner=owner,
|
|
243
|
-
argv=tuple(
|
|
244
|
-
|
|
245
|
-
|
|
346
|
+
argv=tuple(
|
|
347
|
+
_substitute_stack_placeholders(a, layout, report_path=report_path) or ""
|
|
348
|
+
for a in spec.argv
|
|
349
|
+
),
|
|
350
|
+
cwd=_substitute_stack_placeholders(spec.cwd, layout, report_path=report_path),
|
|
351
|
+
env={
|
|
352
|
+
str(k): (_substitute_stack_placeholders(str(v), layout, report_path=report_path) or "")
|
|
353
|
+
for k, v in spec.env.items()
|
|
354
|
+
},
|
|
246
355
|
requires_materialized_deps=bool(spec.requires_materialized_deps),
|
|
247
|
-
report_path=
|
|
356
|
+
report_path=report_path,
|
|
248
357
|
report_adapter=(report.adapter if report else None),
|
|
249
358
|
report_capture=(report.capture if report else None),
|
|
250
359
|
)
|
|
@@ -258,12 +367,52 @@ def stack_command_plan(contract: ResolvedStackContract) -> StackCommandPlan:
|
|
|
258
367
|
:class:`StackCommandSlot` carrying its owning namespace, ordered deterministically
|
|
259
368
|
by owner kind (language → framework → addon) then owner then slot id. No
|
|
260
369
|
framework-name literal: the plan is a pure projection of the resolved contract.
|
|
370
|
+
|
|
371
|
+
Contract Kernel v2.77g — THREE-STATE slot classification (GPT-5.5 Pro consult
|
|
372
|
+
2026-06-21). Every composed command slot is EITHER:
|
|
373
|
+
|
|
374
|
+
* a VERIFICATION slot (:data:`codd.stack.compose.VERIFICATION_SLOTS`) → materialized +
|
|
375
|
+
executed as a release check (build / typecheck / unit/integration/e2e test / lint /
|
|
376
|
+
coverage / read-only migration check). The set is audited to contain
|
|
377
|
+
``framework_build``/``build`` so the framework production build the ignoreBuildErrors
|
|
378
|
+
obligation is enforced against is never silently dropped.
|
|
379
|
+
* a KNOWN non-verification slot (:data:`codd.stack.compose.NON_VERIFICATION_SLOTS`) →
|
|
380
|
+
EXCLUDED from the plan: ``dev`` / ``start`` (a long-running SERVER that never exits →
|
|
381
|
+
would HANG the gate at the per-slot timeout), ``generate`` / ``migrate`` (codegen /
|
|
382
|
+
mutating convenience, not a proof). Never spawned by ``codd verify`` / the greenfield
|
|
383
|
+
verify stage.
|
|
384
|
+
* UNKNOWN (in neither set) → RED (:class:`StackCommandClassificationError`). The
|
|
385
|
+
harness does NOT guess: silently dropping an unknown slot could hide a genuine
|
|
386
|
+
verification (a false-green), and blindly executing one could hang on a server. An
|
|
387
|
+
unclassified slot forces the profile to declare its intent.
|
|
388
|
+
|
|
389
|
+
Slot ``cwd``/``argv``/``env`` layout placeholders are substituted at plan build (see
|
|
390
|
+
:func:`_slot_from_command`).
|
|
261
391
|
"""
|
|
262
392
|
assert_stack_contract_clean(contract)
|
|
263
393
|
owners = contract.command_owners
|
|
394
|
+
layout = contract.layout
|
|
395
|
+
|
|
396
|
+
unclassified = sorted(
|
|
397
|
+
slot_id
|
|
398
|
+
for slot_id in contract.commands
|
|
399
|
+
if slot_id not in VERIFICATION_SLOTS and slot_id not in NON_VERIFICATION_SLOTS
|
|
400
|
+
)
|
|
401
|
+
if unclassified:
|
|
402
|
+
raise StackCommandClassificationError(
|
|
403
|
+
f"stack command classification ({contract.stack_id}): command slot(s) "
|
|
404
|
+
f"{unclassified} are in neither the verification-execution allowlist nor the "
|
|
405
|
+
"known non-verification (lifecycle/convenience) set — the harness will not "
|
|
406
|
+
"guess. An unclassified slot is RED at plan build: executing it could hang "
|
|
407
|
+
"(a server), and silently excluding it could drop a real verification (a "
|
|
408
|
+
"false-green). Classify the slot in codd.stack.compose (VERIFICATION_SLOTS or "
|
|
409
|
+
"NON_VERIFICATION_SLOTS)."
|
|
410
|
+
)
|
|
411
|
+
|
|
264
412
|
slots = [
|
|
265
|
-
_slot_from_command(slot_id, owners.get(slot_id, ""), spec)
|
|
413
|
+
_slot_from_command(slot_id, owners.get(slot_id, ""), spec, layout)
|
|
266
414
|
for slot_id, spec in contract.commands.items()
|
|
415
|
+
if slot_id in VERIFICATION_SLOTS
|
|
267
416
|
]
|
|
268
417
|
slots.sort(key=lambda s: _owner_sort_key(s.owner, s.slot_id))
|
|
269
418
|
return StackCommandPlan(
|
|
@@ -352,6 +501,29 @@ def default_stack_command_executor(
|
|
|
352
501
|
layer parses the current run's report. This is capture TRANSPORT only — the
|
|
353
502
|
parser/observation lives outside the executor.
|
|
354
503
|
"""
|
|
504
|
+
# Unsubstituted-placeholder guard (Contract Kernel v2.77g; the v2.75 cwd-bug class):
|
|
505
|
+
# the plan substitutes layout placeholders at build time, but a placeholder the layout
|
|
506
|
+
# could not resolve is left literal. Refuse to spawn in a literal ``{...}`` dir / with
|
|
507
|
+
# a literal ``{...}`` argv or env value — that is RED (spawn-refused), never a silent
|
|
508
|
+
# pass and never a spawn in a wrong dir. Mirrors
|
|
509
|
+
# :func:`codd.languages.oracle_executor.run_command_sequence` step (3).
|
|
510
|
+
unresolved = _unsubstituted_placeholders(slot)
|
|
511
|
+
if unresolved:
|
|
512
|
+
return StackCommandSlotResult(
|
|
513
|
+
slot_id=slot.slot_id,
|
|
514
|
+
owner=slot.owner,
|
|
515
|
+
command_str=slot.command_str,
|
|
516
|
+
spawned=False,
|
|
517
|
+
returncode=None,
|
|
518
|
+
timed_out=False,
|
|
519
|
+
detail=(
|
|
520
|
+
f"stack command slot {slot.slot_id!r} has unsubstituted layout "
|
|
521
|
+
f"placeholder(s) {unresolved}; refusing to spawn in an unresolved path "
|
|
522
|
+
"(a literal '{...}' cwd/argv/env is the v2.75 cwd-bug class — RED, not a "
|
|
523
|
+
"benign miss). The resolved stack layout did not provide a value for it."
|
|
524
|
+
),
|
|
525
|
+
)
|
|
526
|
+
|
|
355
527
|
cwd = (project_root / slot.cwd) if slot.cwd else project_root
|
|
356
528
|
env = os.environ.copy()
|
|
357
529
|
env.update(slot.env)
|
|
@@ -33,8 +33,64 @@ from typing import Any, Literal, Mapping, Sequence
|
|
|
33
33
|
from codd.languages.profile import CommandSpec, LanguageProfile
|
|
34
34
|
from .profile import AddonProfile, FileRole, FrameworkProfile, Obligation, SourceSet
|
|
35
35
|
|
|
36
|
+
|
|
37
|
+
@dataclass(frozen=True)
|
|
38
|
+
class StackLayout:
|
|
39
|
+
"""The resolved layout roots the harness needs to RUN a composed command.
|
|
40
|
+
|
|
41
|
+
Contract Kernel v2.77g. A composed command slot's ``cwd``/``argv``/``env`` may
|
|
42
|
+
carry LITERAL layout placeholders (``{module_root}`` / ``{repo_root}`` /
|
|
43
|
+
``{manifest_root}`` / ``{test_root}``) exactly like a language verify command — the
|
|
44
|
+
profile keeps them as templates (full template substitution is PathPlanner's job).
|
|
45
|
+
But the executor must spawn in a REAL directory and write its report to a REAL path,
|
|
46
|
+
so the resolved contract carries the layout roots the plan substitutes at build time
|
|
47
|
+
(the stack twin of :class:`codd.languages.profile.LayoutSpec` +
|
|
48
|
+
:func:`codd.languages.verify_plan._substitute_layout_placeholders`).
|
|
49
|
+
|
|
50
|
+
Sourced from the LANGUAGE profile's layout in :func:`compose` (the language owns
|
|
51
|
+
repo topology + test sets; a framework CONTRIBUTES source sets but not the module/
|
|
52
|
+
repo roots). ``test_roots`` carries EVERY declared test set's root so the plan can
|
|
53
|
+
resolve ``{test_root}`` deterministically — a stack's ``verify`` runs the whole test
|
|
54
|
+
tree from ONE root, so a profile with zero OR multiple test roots makes ``{test_root}``
|
|
55
|
+
AMBIGUOUS and the plan reds (rather than guessing — GPT-5.5 Pro consult 2026-06-21).
|
|
56
|
+
The convenience :attr:`test_root` is the single root when exactly one is declared (the
|
|
57
|
+
common case), else ``""`` (the substitution then leaves ``{test_root}`` unresolved →
|
|
58
|
+
the unsubstituted→RED guard fires). NOT part of
|
|
59
|
+
:attr:`ResolvedStackContract.content_hash`: it is fully DERIVED from the already-pinned
|
|
60
|
+
language layer (whose digest is in ``layers``), so it cannot drift independently of a
|
|
61
|
+
pinned stack — folding it into the hash would only spuriously break a committed lock
|
|
62
|
+
when nothing the lock protects changed.
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
module_root: str = "."
|
|
66
|
+
repo_root: str = "."
|
|
67
|
+
manifest_root: str = "."
|
|
68
|
+
test_roots: tuple[str, ...] = ()
|
|
69
|
+
|
|
70
|
+
@property
|
|
71
|
+
def test_root(self) -> str:
|
|
72
|
+
"""The single unambiguous test root, or ``""`` when zero/multiple are declared.
|
|
73
|
+
|
|
74
|
+
``{test_root}`` substitution uses this; ``""`` deliberately leaves the placeholder
|
|
75
|
+
unresolved so the executor's unsubstituted→RED guard fires (an ambiguous test root
|
|
76
|
+
must not be silently guessed — anti-false-green)."""
|
|
77
|
+
return self.test_roots[0] if len(self.test_roots) == 1 else ""
|
|
78
|
+
|
|
36
79
|
#: Verification command slots — a green in one NEVER implies another (design §207).
|
|
37
80
|
#: A cross-layer redefinition of one of these with different argv is a conflict.
|
|
81
|
+
#:
|
|
82
|
+
#: This is ALSO the materialization allowlist (Contract Kernel v2.77g): the command
|
|
83
|
+
#: plan executes ONLY these slots, so a non-verification convenience slot a framework
|
|
84
|
+
#: declares (``dev`` / ``start`` — a long-running SERVER that never exits, ``generate``
|
|
85
|
+
#: / ``migrate`` — a mutating convenience) is NEVER spawned by ``codd verify`` (running
|
|
86
|
+
#: a server slot would hang the gate forever). Every slot that GENUINELY verifies must
|
|
87
|
+
#: be in this set or it would be dropped — and a dropped verification = "not verified" =
|
|
88
|
+
#: a false-green. So this set is the SINGLE source of truth for "which composed slot is
|
|
89
|
+
#: a release check", and it MUST contain every build/test/static check: ``framework_build``
|
|
90
|
+
#: / ``build`` (a framework's production build — the ``no_ignore_build_errors_as_typecheck``
|
|
91
|
+
#: obligation is enforced AGAINST it being run, so dropping it would be the exact
|
|
92
|
+
#: false-green the obligation exists to kill). ``migration_check`` / ``migration_status``
|
|
93
|
+
#: (READ-ONLY drift checks) stay verification.
|
|
38
94
|
VERIFICATION_SLOTS = frozenset(
|
|
39
95
|
{
|
|
40
96
|
"typecheck",
|
|
@@ -44,12 +100,42 @@ VERIFICATION_SLOTS = frozenset(
|
|
|
44
100
|
"coverage",
|
|
45
101
|
"lint",
|
|
46
102
|
"e2e_test",
|
|
103
|
+
"build",
|
|
104
|
+
"framework_build",
|
|
47
105
|
"migration_check",
|
|
48
106
|
"migration_status",
|
|
49
107
|
"eval",
|
|
50
108
|
}
|
|
51
109
|
)
|
|
52
110
|
|
|
111
|
+
#: KNOWN non-verification command slots — a framework/addon legitimately declares these
|
|
112
|
+
#: (a dev/start SERVER, a codegen/migration convenience) but they are NOT release checks,
|
|
113
|
+
#: so the command plan EXCLUDES them (a server would hang the gate; a mutating migration
|
|
114
|
+
#: must never run during verify). This is the OTHER half of the three-state slot model
|
|
115
|
+
#: (GPT-5.5 Pro consult 2026-06-21): a slot id is EITHER a verification slot (executed),
|
|
116
|
+
#: OR a known non-verification slot (excluded), OR UNKNOWN. An UNKNOWN slot id (in neither
|
|
117
|
+
#: set) is NOT silently dropped — that would be a false-green if it were a real check the
|
|
118
|
+
#: harness did not recognize — it is RED at plan build (``stack_command_plan`` raises),
|
|
119
|
+
#: forcing a profile to CLASSIFY every command it declares. ``generate`` (codegen) and
|
|
120
|
+
#: ``migrate_deploy`` (mutating apply) / ``migrate`` are non-proof-bearing convenience;
|
|
121
|
+
#: ``dev`` / ``start`` are servers. Mirrors the authenticity layer's own classification
|
|
122
|
+
#: of these ids as non-verification (``DEFAULT_STACK_COMMAND_OBSERVATION_POLICIES``).
|
|
123
|
+
NON_VERIFICATION_SLOTS = frozenset(
|
|
124
|
+
{
|
|
125
|
+
"dev",
|
|
126
|
+
"start",
|
|
127
|
+
"serve",
|
|
128
|
+
"preview",
|
|
129
|
+
"generate",
|
|
130
|
+
"migrate",
|
|
131
|
+
"migrate_deploy",
|
|
132
|
+
"migrate_status",
|
|
133
|
+
"install",
|
|
134
|
+
"format",
|
|
135
|
+
"clean",
|
|
136
|
+
}
|
|
137
|
+
)
|
|
138
|
+
|
|
53
139
|
def _normalize_checker_ref(ref: str | None) -> str:
|
|
54
140
|
"""Canonical form of an obligation ``checker`` ref for redefinition comparison.
|
|
55
141
|
|
|
@@ -182,6 +268,16 @@ class ResolvedStackContract:
|
|
|
182
268
|
#: (``Any``) to keep ``compose`` import-cycle-free at the dataclass level. Empty for the
|
|
183
269
|
#: curated stacks (no profile declares a replacement yet).
|
|
184
270
|
pending_replacement_proofs: tuple[Any, ...] = ()
|
|
271
|
+
#: Resolved layout roots (Contract Kernel v2.77g) — the real directories/paths the
|
|
272
|
+
#: command plan substitutes for a slot's ``{module_root}`` / ``{repo_root}`` /
|
|
273
|
+
#: ``{manifest_root}`` / ``{test_root}`` placeholders so a composed command spawns in
|
|
274
|
+
#: a real dir and writes its report to a real path (the stack twin of the language
|
|
275
|
+
#: verify executor's layout substitution). Sourced from the LANGUAGE profile's layout
|
|
276
|
+
#: in :func:`compose`. NOT part of ``content_hash`` (see :class:`StackLayout`): it is
|
|
277
|
+
#: derived from the already-pinned language layer, so it cannot drift independently of
|
|
278
|
+
#: a pinned stack. Defaulted so an unparameterized contract (and every existing test
|
|
279
|
+
#: constructing a contract directly) is unaffected.
|
|
280
|
+
layout: StackLayout = field(default_factory=StackLayout)
|
|
185
281
|
|
|
186
282
|
@property
|
|
187
283
|
def is_clean(self) -> bool:
|
|
@@ -427,6 +523,20 @@ def compose(
|
|
|
427
523
|
fw.id: tuple(v.id for v in fw.variants) for fw in frameworks if fw.variants
|
|
428
524
|
}
|
|
429
525
|
|
|
526
|
+
# -- resolved layout (Contract Kernel v2.77g) ------------------------------
|
|
527
|
+
# The LANGUAGE owns repo topology + test sets; copy the roots the command plan
|
|
528
|
+
# needs to substitute a slot's {module_root}/{repo_root}/{manifest_root}/{test_root}.
|
|
529
|
+
# Carry ALL test roots so the plan can detect an ambiguous {test_root} (zero/multiple)
|
|
530
|
+
# and RED rather than guess. Derived from the language layer, NOT hashed.
|
|
531
|
+
lang_layout = language.layout
|
|
532
|
+
test_sets = getattr(lang_layout, "test_sets", ()) or ()
|
|
533
|
+
stack_layout = StackLayout(
|
|
534
|
+
module_root=lang_layout.module_root,
|
|
535
|
+
repo_root=lang_layout.repo_root,
|
|
536
|
+
manifest_root=lang_layout.manifest_root,
|
|
537
|
+
test_roots=tuple(ts.root for ts in test_sets),
|
|
538
|
+
)
|
|
539
|
+
|
|
430
540
|
stack_id = "+".join(l.id for l in layers)
|
|
431
541
|
content_hash = _content_hash(
|
|
432
542
|
layers, commands, obligations, file_roles, source_sets, pending_proofs
|
|
@@ -447,4 +557,5 @@ def compose(
|
|
|
447
557
|
conflicts=tuple(conflicts),
|
|
448
558
|
content_hash=content_hash,
|
|
449
559
|
pending_replacement_proofs=tuple(pending_proofs),
|
|
560
|
+
layout=stack_layout,
|
|
450
561
|
)
|
|
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
|
|
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
|
|
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
|