codd-dev 3.2.0__tar.gz → 3.4.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-3.2.0 → codd_dev-3.4.0}/PKG-INFO +1 -1
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/__init__.py +1 -1
- codd_dev-3.4.0/codd/dag/checks/resource_flow_coherence.py +382 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/extractor.py +14 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/runner.py +1 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/pyproject.toml +1 -1
- {codd_dev-3.2.0 → codd_dev-3.4.0}/.gitignore +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/LICENSE +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/README.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/bench_fixture/README.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/__main__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/_git_helper.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/action_outcome.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/ai_invoke.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/ai_patch.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/artifact_contract.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/artifact_ids.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/assembler.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/bridge.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/capability_completeness.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/claude_cli.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/cli.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/clustering.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/coherence_engine.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/confidence.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/config.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/config_schema.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/contracts.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/contracts_registry/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/contracts_registry/__main__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/contracts_registry/certify.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/contracts_registry/generate_matrix.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/contracts_registry/registry.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/coverage_execution_coherence.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/builder.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/impact.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/defaults.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/defaults.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployer.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/design_md.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/diff/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/diff/apply.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/diff/engine.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/diff/persistence.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/discovery.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/drift.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/e2e_generator.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/e2e_harness.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/e2e_runner.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/apply.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/engine.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/finding.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/env_refs.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/extract_ai.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/extract_paths.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/extractor.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/impact_planner.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fixer.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fixup_drift.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/frontmatter.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/generator.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/git_evidence.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/graph.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/greenfield/pipeline.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/hitl_session.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/iac_nfr.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/implement_oracle.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/implement_oracle_scope.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/implement_oracle_types.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/implementer.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/import_coherence.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/inheritance.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/init/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/adapters/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/adapters/implement_oracle.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/adapters/oracle_go.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/adapters/oracle_python.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/adapters/oracle_typescript.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/adapters/runner_report.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/builtin_adapters.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/compat.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/contract.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/loader.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/oracle_executor.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/path_planner.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/profile.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/profiles/go.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/profiles/python.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/profiles/typescript.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/registry.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/verify_executor.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/verify_plan.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/approval.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/parser.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/mcp_server.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/measure.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/operations_derive.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/extractor_registry.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/iac.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/regex_strategies.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/planner.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/policy.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/project_types.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/propagate.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/propagation_common.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/propagator.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/reference_resolution.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/registry.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/auto_scope_guard.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/engine.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/history.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/loop.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/schema.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair_slice.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/require.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/require_plugins.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/require_propagate.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/requirements_meta.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/restoration_report.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/restore.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/routes_extractor.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/scanner.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/schema_refs.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/adapters/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/adapters/_base.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/adapters/nextjs.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/adapters/playwright.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/adapters/prisma.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/command_authenticity.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/command_override.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/command_plan.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/compose.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/loader.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/lock.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/obligations.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/profile.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/project.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/registry.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/replacement_proof.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/resolve.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/synth.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/test_detection.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/traceability.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/validator.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/vb_marker_authenticity.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/vb_rerun_scope.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/verifiable_behavior_audit.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/watch/__init__.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/watch/events.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/watch/watcher.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/wiring.py +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/docs/requirements/README.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/examples/README.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-3.2.0 → codd_dev-3.4.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: 3.
|
|
3
|
+
Version: 3.4.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
|
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
"""DAG check: resource flow coherence.
|
|
2
|
+
|
|
3
|
+
The data-field sibling of the enablement axis. The enablement axis asks "is a
|
|
4
|
+
*capability* that gets exercised also granted/enabled?"; this check asks the
|
|
5
|
+
same question for *data resources*: a required capability that CONSUMES a
|
|
6
|
+
contract resource cannot function unless some obligation PRODUCES that resource.
|
|
7
|
+
A resource that is read by a required capability but written by no obligation is
|
|
8
|
+
a "dangling required consumer" — a real incompleteness that must not pass green.
|
|
9
|
+
A resource that is written by an obligation but read by no declared consumer is
|
|
10
|
+
a "dead resource" — an amber-only ambiguity that must be surfaced without
|
|
11
|
+
blocking deploy.
|
|
12
|
+
|
|
13
|
+
Design notes (kept deliberately conservative to preserve generality and avoid
|
|
14
|
+
false reds):
|
|
15
|
+
|
|
16
|
+
* **Contract-declaration driven.** Producers/consumers come from declared
|
|
17
|
+
``capability_contracts`` / ``resource_contracts`` in design-doc frontmatter,
|
|
18
|
+
never from scanning implementation source for literals. The core therefore
|
|
19
|
+
knows no project/framework/language tokens; it only reasons over canonical
|
|
20
|
+
resource ids and produce/consume edges.
|
|
21
|
+
* **Dormant by default.** A project that declares no resource/capability
|
|
22
|
+
contracts gets ``skip`` (exit code unaffected) — existing projects keep
|
|
23
|
+
passing unchanged.
|
|
24
|
+
* **RED only when all hold:** (1) the consumer is required
|
|
25
|
+
(``required: true`` or ``on_missing: fail``), (2) the consuming capability is
|
|
26
|
+
a required capability of a ``critical``/``high`` user journey, and (3) no
|
|
27
|
+
producer / external provider exists for that resource. Anything weaker
|
|
28
|
+
(optional consumer, ``on_missing: skip|degrade``, capability not on a critical
|
|
29
|
+
journey, external/seed provider declared) is not gated.
|
|
30
|
+
|
|
31
|
+
This is intentionally separate from the enablement axis: ``enables/exercises``
|
|
32
|
+
is the *capability* supply relation, ``produces/consumes`` is the *resource*
|
|
33
|
+
supply relation. Mixing them muddies severity and diagnostics.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
from __future__ import annotations
|
|
37
|
+
|
|
38
|
+
from dataclasses import dataclass, field
|
|
39
|
+
from pathlib import Path
|
|
40
|
+
from typing import Any
|
|
41
|
+
|
|
42
|
+
from codd.dag.checks import DagCheck, register_dag_check
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
_CRITICAL_LEVELS = {"critical", "high"}
|
|
46
|
+
_OPTIONAL_ON_MISSING = {"skip", "degrade", "ignore", "optional", "tolerate"}
|
|
47
|
+
_TRUE_TOKENS = {"true", "yes", "1", "required", "must"}
|
|
48
|
+
_FALSE_TOKENS = {"false", "no", "0", "optional"}
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@dataclass
|
|
52
|
+
class ResourceUse:
|
|
53
|
+
resource: str
|
|
54
|
+
direction: str # "consume" | "produce"
|
|
55
|
+
owner_node_id: str
|
|
56
|
+
capability: str | None = None
|
|
57
|
+
obligation: str | None = None
|
|
58
|
+
required: bool | None = None
|
|
59
|
+
on_missing: str | None = None
|
|
60
|
+
external: bool = False
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
@dataclass
|
|
64
|
+
class ResourceFlowCoherenceResult:
|
|
65
|
+
check_name: str = "resource_flow_coherence"
|
|
66
|
+
severity: str = "info"
|
|
67
|
+
status: str = "pass"
|
|
68
|
+
message: str = ""
|
|
69
|
+
block_deploy: bool = False
|
|
70
|
+
violations: list[dict[str, Any]] = field(default_factory=list)
|
|
71
|
+
warnings: list[dict[str, Any]] = field(default_factory=list)
|
|
72
|
+
passed: bool = True
|
|
73
|
+
skipped: bool = False
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
@register_dag_check("resource_flow_coherence")
|
|
77
|
+
class ResourceFlowCoherenceCheck(DagCheck):
|
|
78
|
+
check_name = "resource_flow_coherence"
|
|
79
|
+
severity = "red"
|
|
80
|
+
block_deploy = True
|
|
81
|
+
|
|
82
|
+
def run(
|
|
83
|
+
self,
|
|
84
|
+
dag: Any | None = None,
|
|
85
|
+
project_root: str | Path | None = None,
|
|
86
|
+
settings: dict[str, Any] | None = None,
|
|
87
|
+
codd_config: dict[str, Any] | None = None,
|
|
88
|
+
) -> ResourceFlowCoherenceResult:
|
|
89
|
+
target = dag if dag is not None else self.dag
|
|
90
|
+
if target is None:
|
|
91
|
+
raise ValueError("dag is required for resource_flow_coherence check")
|
|
92
|
+
|
|
93
|
+
design_docs = [
|
|
94
|
+
node
|
|
95
|
+
for node in sorted(target.nodes.values(), key=lambda item: item.id)
|
|
96
|
+
if getattr(node, "kind", None) == "design_doc"
|
|
97
|
+
]
|
|
98
|
+
|
|
99
|
+
uses: list[ResourceUse] = []
|
|
100
|
+
alias_map: dict[str, str] = {}
|
|
101
|
+
for node in design_docs:
|
|
102
|
+
attrs = getattr(node, "attributes", None) or {}
|
|
103
|
+
uses.extend(self._capability_contract_uses(node.id, attrs))
|
|
104
|
+
node_uses, node_aliases = self._resource_contract_uses(node.id, attrs)
|
|
105
|
+
uses.extend(node_uses)
|
|
106
|
+
alias_map.update(node_aliases)
|
|
107
|
+
|
|
108
|
+
if not uses:
|
|
109
|
+
return ResourceFlowCoherenceResult(
|
|
110
|
+
severity="info",
|
|
111
|
+
status="skip",
|
|
112
|
+
skipped=True,
|
|
113
|
+
passed=True,
|
|
114
|
+
block_deploy=False,
|
|
115
|
+
message="resource_flow_coherence SKIP (no resource/capability contracts declared)",
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
critical_caps = self._critical_required_capabilities(design_docs)
|
|
119
|
+
|
|
120
|
+
producers: dict[str, list[ResourceUse]] = {}
|
|
121
|
+
consumers: list[ResourceUse] = []
|
|
122
|
+
for use in uses:
|
|
123
|
+
use.resource = self._canonical(use.resource, alias_map)
|
|
124
|
+
if use.direction == "produce":
|
|
125
|
+
producers.setdefault(use.resource, []).append(use)
|
|
126
|
+
else:
|
|
127
|
+
consumers.append(use)
|
|
128
|
+
|
|
129
|
+
violations: list[dict[str, Any]] = []
|
|
130
|
+
warnings: list[dict[str, Any]] = self._dead_resource_warnings(producers, consumers)
|
|
131
|
+
for consumer in sorted(consumers, key=lambda c: (c.resource, c.capability or "", c.owner_node_id)):
|
|
132
|
+
if not self._is_required(consumer):
|
|
133
|
+
continue
|
|
134
|
+
if consumer.capability is None or consumer.capability not in critical_caps:
|
|
135
|
+
# Required read, but not tied to a critical/high journey capability.
|
|
136
|
+
# Advisory only: avoids false reds on audit/admin/optional reads.
|
|
137
|
+
warnings.append(
|
|
138
|
+
{
|
|
139
|
+
"type": "unscoped_resource_consumer",
|
|
140
|
+
"severity": "amber",
|
|
141
|
+
"resource": consumer.resource,
|
|
142
|
+
"consumer_capability": consumer.capability,
|
|
143
|
+
"owner_node_id": consumer.owner_node_id,
|
|
144
|
+
"message": (
|
|
145
|
+
f"Required consumer reads {consumer.resource} but its capability "
|
|
146
|
+
"is not a required capability of any critical/high journey; not gated."
|
|
147
|
+
),
|
|
148
|
+
}
|
|
149
|
+
)
|
|
150
|
+
continue
|
|
151
|
+
if self._has_satisfying_producer(consumer.resource, producers):
|
|
152
|
+
continue
|
|
153
|
+
violations.append(
|
|
154
|
+
{
|
|
155
|
+
"type": "dangling_required_consumer",
|
|
156
|
+
"severity": "red",
|
|
157
|
+
"resource": consumer.resource,
|
|
158
|
+
"consumer_capability": consumer.capability,
|
|
159
|
+
"owner_node_id": consumer.owner_node_id,
|
|
160
|
+
"required_by": "user_journeys[].required_capabilities",
|
|
161
|
+
"missing": "producer",
|
|
162
|
+
"message": (
|
|
163
|
+
f"Required consumer reads {consumer.resource}, but no producer / "
|
|
164
|
+
"provided-by obligation exists in the contract graph."
|
|
165
|
+
),
|
|
166
|
+
}
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
if violations:
|
|
170
|
+
return ResourceFlowCoherenceResult(
|
|
171
|
+
severity="red",
|
|
172
|
+
status="fail",
|
|
173
|
+
passed=False,
|
|
174
|
+
block_deploy=True,
|
|
175
|
+
message=(
|
|
176
|
+
f"resource_flow_coherence found {len(violations)} dangling required "
|
|
177
|
+
"consumer(s) with no producer obligation"
|
|
178
|
+
),
|
|
179
|
+
violations=violations,
|
|
180
|
+
warnings=warnings,
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
return ResourceFlowCoherenceResult(
|
|
184
|
+
severity="info",
|
|
185
|
+
status="pass",
|
|
186
|
+
passed=True,
|
|
187
|
+
block_deploy=False,
|
|
188
|
+
message="resource_flow_coherence PASS",
|
|
189
|
+
warnings=warnings,
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
# ------------------------------------------------------------------ collect
|
|
193
|
+
def _capability_contract_uses(self, node_id: str, attrs: dict[str, Any]) -> list[ResourceUse]:
|
|
194
|
+
uses: list[ResourceUse] = []
|
|
195
|
+
for entry in self._entries(attrs, "capability_contracts"):
|
|
196
|
+
capability = self._str(entry.get("capability"))
|
|
197
|
+
for consume in self._dict_list(entry.get("consumes")):
|
|
198
|
+
resource = self._str(consume.get("resource"))
|
|
199
|
+
if not resource:
|
|
200
|
+
continue
|
|
201
|
+
uses.append(
|
|
202
|
+
ResourceUse(
|
|
203
|
+
resource=resource,
|
|
204
|
+
direction="consume",
|
|
205
|
+
owner_node_id=node_id,
|
|
206
|
+
capability=capability,
|
|
207
|
+
required=self._opt_bool(consume.get("required")),
|
|
208
|
+
on_missing=self._str(consume.get("on_missing")),
|
|
209
|
+
)
|
|
210
|
+
)
|
|
211
|
+
for produce in self._dict_list(entry.get("produces")):
|
|
212
|
+
resource = self._str(produce.get("resource"))
|
|
213
|
+
if not resource:
|
|
214
|
+
continue
|
|
215
|
+
uses.append(
|
|
216
|
+
ResourceUse(
|
|
217
|
+
resource=resource,
|
|
218
|
+
direction="produce",
|
|
219
|
+
owner_node_id=node_id,
|
|
220
|
+
capability=capability,
|
|
221
|
+
)
|
|
222
|
+
)
|
|
223
|
+
return uses
|
|
224
|
+
|
|
225
|
+
def _resource_contract_uses(
|
|
226
|
+
self, node_id: str, attrs: dict[str, Any]
|
|
227
|
+
) -> tuple[list[ResourceUse], dict[str, str]]:
|
|
228
|
+
uses: list[ResourceUse] = []
|
|
229
|
+
aliases: dict[str, str] = {}
|
|
230
|
+
for entry in self._entries(attrs, "resource_contracts"):
|
|
231
|
+
resource = self._str(entry.get("resource"))
|
|
232
|
+
if not resource:
|
|
233
|
+
continue
|
|
234
|
+
for alias in self._as_list(entry.get("aliases")):
|
|
235
|
+
alias_s = self._str(alias)
|
|
236
|
+
if alias_s:
|
|
237
|
+
aliases[alias_s] = resource
|
|
238
|
+
for consumer in self._dict_list(entry.get("consumers")):
|
|
239
|
+
uses.append(
|
|
240
|
+
ResourceUse(
|
|
241
|
+
resource=resource,
|
|
242
|
+
direction="consume",
|
|
243
|
+
owner_node_id=node_id,
|
|
244
|
+
capability=self._str(consumer.get("capability")),
|
|
245
|
+
required=self._opt_bool(consumer.get("required")),
|
|
246
|
+
on_missing=self._str(consumer.get("on_missing")),
|
|
247
|
+
)
|
|
248
|
+
)
|
|
249
|
+
for producer in self._dict_list(entry.get("producers")):
|
|
250
|
+
uses.append(
|
|
251
|
+
ResourceUse(
|
|
252
|
+
resource=resource,
|
|
253
|
+
direction="produce",
|
|
254
|
+
owner_node_id=node_id,
|
|
255
|
+
obligation=self._str(producer.get("obligation") or producer.get("capability")),
|
|
256
|
+
)
|
|
257
|
+
)
|
|
258
|
+
for ext in self._as_list(entry.get("externally_provided_by")):
|
|
259
|
+
ext_d = ext if isinstance(ext, dict) else {"provider": ext}
|
|
260
|
+
uses.append(
|
|
261
|
+
ResourceUse(
|
|
262
|
+
resource=resource,
|
|
263
|
+
direction="produce",
|
|
264
|
+
owner_node_id=node_id,
|
|
265
|
+
obligation=self._str(ext_d.get("provider")),
|
|
266
|
+
external=True,
|
|
267
|
+
)
|
|
268
|
+
)
|
|
269
|
+
return uses, aliases
|
|
270
|
+
|
|
271
|
+
def _critical_required_capabilities(self, design_docs: list[Any]) -> set[str]:
|
|
272
|
+
caps: set[str] = set()
|
|
273
|
+
for node in design_docs:
|
|
274
|
+
attrs = getattr(node, "attributes", None) or {}
|
|
275
|
+
for journey in self._entries(attrs, "user_journeys"):
|
|
276
|
+
level = (self._str(journey.get("criticality")) or "").lower()
|
|
277
|
+
if level not in _CRITICAL_LEVELS:
|
|
278
|
+
continue
|
|
279
|
+
for cap in self._as_list(journey.get("required_capabilities")):
|
|
280
|
+
cap_s = self._str(cap)
|
|
281
|
+
if cap_s:
|
|
282
|
+
caps.add(cap_s)
|
|
283
|
+
return caps
|
|
284
|
+
|
|
285
|
+
# --------------------------------------------------------------- predicates
|
|
286
|
+
def _is_required(self, use: ResourceUse) -> bool:
|
|
287
|
+
on_missing = (use.on_missing or "").strip().lower()
|
|
288
|
+
if use.required is False or on_missing in _OPTIONAL_ON_MISSING:
|
|
289
|
+
return False
|
|
290
|
+
if use.required is True or on_missing == "fail":
|
|
291
|
+
return True
|
|
292
|
+
# Neither explicitly required nor fail-on-missing → not gated (conservative).
|
|
293
|
+
return False
|
|
294
|
+
|
|
295
|
+
def _has_satisfying_producer(self, resource: str, producers: dict[str, list[ResourceUse]]) -> bool:
|
|
296
|
+
# v1: existence-based. A declared producer / external provider / seed for
|
|
297
|
+
# the same canonical resource satisfies the consumer. Topological ordering
|
|
298
|
+
# is intentionally not enforced here to avoid false reds on graphs without
|
|
299
|
+
# explicit operation flow.
|
|
300
|
+
return bool(producers.get(resource))
|
|
301
|
+
|
|
302
|
+
def _dead_resource_warnings(
|
|
303
|
+
self, producers: dict[str, list[ResourceUse]], consumers: list[ResourceUse]
|
|
304
|
+
) -> list[dict[str, Any]]:
|
|
305
|
+
consumer_resources = {consumer.resource for consumer in consumers}
|
|
306
|
+
warnings: list[dict[str, Any]] = []
|
|
307
|
+
for resource, resource_producers in sorted(producers.items()):
|
|
308
|
+
if resource in consumer_resources:
|
|
309
|
+
continue
|
|
310
|
+
if any(producer.external for producer in resource_producers):
|
|
311
|
+
continue
|
|
312
|
+
producer_refs = sorted(
|
|
313
|
+
{
|
|
314
|
+
ref
|
|
315
|
+
for producer in resource_producers
|
|
316
|
+
for ref in [producer.obligation or producer.capability]
|
|
317
|
+
if ref
|
|
318
|
+
}
|
|
319
|
+
)
|
|
320
|
+
warnings.append(
|
|
321
|
+
{
|
|
322
|
+
"type": "dead_resource",
|
|
323
|
+
"severity": "amber",
|
|
324
|
+
"resource": resource,
|
|
325
|
+
"producer_refs": producer_refs,
|
|
326
|
+
"producer_owner_node_ids": sorted(
|
|
327
|
+
{producer.owner_node_id for producer in resource_producers}
|
|
328
|
+
),
|
|
329
|
+
"message": (
|
|
330
|
+
f"Resource {resource} has producer obligation(s) but no declared consumers."
|
|
331
|
+
),
|
|
332
|
+
}
|
|
333
|
+
)
|
|
334
|
+
return warnings
|
|
335
|
+
|
|
336
|
+
# ---------------------------------------------------------- canonical/parse
|
|
337
|
+
def _canonical(self, resource: str, alias_map: dict[str, str]) -> str:
|
|
338
|
+
value = (resource or "").strip()
|
|
339
|
+
return alias_map.get(value, value)
|
|
340
|
+
|
|
341
|
+
@staticmethod
|
|
342
|
+
def _entries(attrs: Any, key: str) -> list[dict[str, Any]]:
|
|
343
|
+
value = attrs.get(key, []) if isinstance(attrs, dict) else []
|
|
344
|
+
if not isinstance(value, list):
|
|
345
|
+
return []
|
|
346
|
+
return [entry for entry in value if isinstance(entry, dict)]
|
|
347
|
+
|
|
348
|
+
@staticmethod
|
|
349
|
+
def _dict_list(value: Any) -> list[dict[str, Any]]:
|
|
350
|
+
if not isinstance(value, list):
|
|
351
|
+
return []
|
|
352
|
+
return [entry for entry in value if isinstance(entry, dict)]
|
|
353
|
+
|
|
354
|
+
@staticmethod
|
|
355
|
+
def _as_list(value: Any) -> list[Any]:
|
|
356
|
+
if value is None:
|
|
357
|
+
return []
|
|
358
|
+
if isinstance(value, list):
|
|
359
|
+
return value
|
|
360
|
+
if isinstance(value, tuple):
|
|
361
|
+
return list(value)
|
|
362
|
+
return [value]
|
|
363
|
+
|
|
364
|
+
@staticmethod
|
|
365
|
+
def _str(value: Any) -> str | None:
|
|
366
|
+
if value is None:
|
|
367
|
+
return None
|
|
368
|
+
text = str(value).strip()
|
|
369
|
+
return text or None
|
|
370
|
+
|
|
371
|
+
@staticmethod
|
|
372
|
+
def _opt_bool(value: Any) -> bool | None:
|
|
373
|
+
if value is None:
|
|
374
|
+
return None
|
|
375
|
+
if isinstance(value, bool):
|
|
376
|
+
return value
|
|
377
|
+
token = str(value).strip().lower()
|
|
378
|
+
if token in _TRUE_TOKENS:
|
|
379
|
+
return True
|
|
380
|
+
if token in _FALSE_TOKENS:
|
|
381
|
+
return False
|
|
382
|
+
return None
|
|
@@ -36,6 +36,12 @@ PRESENTATION_SPEC_REQUIRED_FIELDS = ("field_id",)
|
|
|
36
36
|
PRESENTATION_SPEC_LIST_FIELDS = ("lexicon_refs", "evidence_signals", "expected_presentation_signals")
|
|
37
37
|
AGGREGATION_POLICY_REQUIRED_FIELDS = ("field_id",)
|
|
38
38
|
AGGREGATION_POLICY_LIST_FIELDS = ("evidence_signals", "expected_aggregation_signals", "allowed_policies")
|
|
39
|
+
# Resource-flow contracts: a capability that CONSUMES a contract resource needs an
|
|
40
|
+
# obligation that PRODUCES it (the data-field sibling of the enablement axis).
|
|
41
|
+
RESOURCE_CONTRACT_REQUIRED_FIELDS = ("resource",)
|
|
42
|
+
RESOURCE_CONTRACT_LIST_FIELDS = ("aliases", "consumers", "producers", "externally_provided_by")
|
|
43
|
+
CAPABILITY_CONTRACT_REQUIRED_FIELDS = ("capability",)
|
|
44
|
+
CAPABILITY_CONTRACT_LIST_FIELDS = ("consumes", "produces", "requires", "required_by_journeys")
|
|
39
45
|
DESIGN_DOC_ATTRIBUTE_SCHEMAS = {
|
|
40
46
|
"runtime_constraints": {
|
|
41
47
|
"required_fields": RUNTIME_CONSTRAINT_REQUIRED_FIELDS,
|
|
@@ -61,6 +67,14 @@ DESIGN_DOC_ATTRIBUTE_SCHEMAS = {
|
|
|
61
67
|
"required_fields": AGGREGATION_POLICY_REQUIRED_FIELDS,
|
|
62
68
|
"list_fields": AGGREGATION_POLICY_LIST_FIELDS,
|
|
63
69
|
},
|
|
70
|
+
"resource_contracts": {
|
|
71
|
+
"required_fields": RESOURCE_CONTRACT_REQUIRED_FIELDS,
|
|
72
|
+
"list_fields": RESOURCE_CONTRACT_LIST_FIELDS,
|
|
73
|
+
},
|
|
74
|
+
"capability_contracts": {
|
|
75
|
+
"required_fields": CAPABILITY_CONTRACT_REQUIRED_FIELDS,
|
|
76
|
+
"list_fields": CAPABILITY_CONTRACT_LIST_FIELDS,
|
|
77
|
+
},
|
|
64
78
|
}
|
|
65
79
|
DESIGN_DOC_ATTRIBUTE_KEYS = tuple(DESIGN_DOC_ATTRIBUTE_SCHEMAS)
|
|
66
80
|
LANGUAGE_SUFFIXES = {
|
|
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
|