codd-dev 2.36.0__tar.gz → 2.38.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.36.0 → codd_dev-2.38.0}/PKG-INFO +1 -1
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/__init__.py +1 -1
- codd_dev-2.38.0/codd/contracts_registry/__init__.py +46 -0
- codd_dev-2.38.0/codd/contracts_registry/__main__.py +12 -0
- codd_dev-2.38.0/codd/contracts_registry/certify.py +267 -0
- codd_dev-2.38.0/codd/contracts_registry/generate_matrix.py +146 -0
- codd_dev-2.38.0/codd/contracts_registry/registry.py +1189 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/coverage_execution_coherence.py +34 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/defaults.yaml +46 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/greenfield/pipeline.py +220 -19
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/implement_oracle.py +520 -6
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/implement_oracle_scope.py +575 -15
- {codd_dev-2.36.0 → codd_dev-2.38.0}/pyproject.toml +1 -1
- {codd_dev-2.36.0 → codd_dev-2.38.0}/.gitignore +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/LICENSE +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/README.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/__main__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/assembler.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/bridge.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/cli.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/clustering.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/confidence.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/config.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/config_schema.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/contracts.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/defaults.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployer.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/design_md.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/discovery.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/drift.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/env_refs.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/extractor.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fixer.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/generator.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/graph.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/implementer.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/inheritance.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/lexicon.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/measure.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/parsing/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/planner.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/policy.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/project_types.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/propagate.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/propagator.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/reference_resolution.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/registry.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/auto_scope_guard.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/history.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/require.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/restore.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/scanner.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/synth.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/test_detection.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/traceability.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/validator.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/vb_marker_authenticity.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/vb_rerun_scope.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/verifiable_behavior_audit.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/watch/events.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd/wiring.py +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/dogfood/README.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/examples/README.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.36.0 → codd_dev-2.38.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.38.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,46 @@
|
|
|
1
|
+
"""ACG Contract Registry — the coherence-contract coverage layer for CoDD.
|
|
2
|
+
|
|
3
|
+
This package is an **audit / visualization layer**. It does NOT change any
|
|
4
|
+
existing CoDD gate behaviour. It DECLARES the coherence contracts CoDD enforces
|
|
5
|
+
(or has predicted but not yet enforced) and REPORTS their coverage, turning the
|
|
6
|
+
dogfood ledger from a "failure history" into a "contract coverage table"
|
|
7
|
+
(the minimal first step of GPT-5.5 Pro's ACG Contract Registry design, §5).
|
|
8
|
+
|
|
9
|
+
A *coherence contract* is a typed edge between two CoDD coherence nodes
|
|
10
|
+
(Requirement, DesignDoc, Plan/ImplementTask, GeneratedArtifact, Symbol,
|
|
11
|
+
TestClaim, Toolchain, RepairState, SessionState, SUTChannel, AIInvocation) with
|
|
12
|
+
one or more contract *dimensions* (existence, identity, uniqueness, ownership,
|
|
13
|
+
freshness, observability, authenticity, execution, repairability, budget,
|
|
14
|
+
termination). Each contract is either:
|
|
15
|
+
|
|
16
|
+
* ``covered`` — enforced by a named authority symbol AND pinned by a
|
|
17
|
+
regression test (``certification_fixtures``);
|
|
18
|
+
* ``uncertified`` — enforced by a named authority symbol but with no
|
|
19
|
+
regression-test pointer recorded here (CI should surface
|
|
20
|
+
these so a pointer gets added — but NOT block);
|
|
21
|
+
* ``uncovered`` — a predicted-but-unenforced cell (GPT §2 "空セル"): a latent
|
|
22
|
+
issue with a proposed gate, no authority yet.
|
|
23
|
+
|
|
24
|
+
Public surface (kept small and stable):
|
|
25
|
+
|
|
26
|
+
* :class:`Contract` — the frozen contract record.
|
|
27
|
+
* :data:`REGISTRY` — the tuple of all declared contracts.
|
|
28
|
+
* :func:`contracts_by_status` — group the registry by status.
|
|
29
|
+
* :func:`coverage_summary` — counts by status.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
from __future__ import annotations
|
|
33
|
+
|
|
34
|
+
from codd.contracts_registry.registry import (
|
|
35
|
+
REGISTRY,
|
|
36
|
+
Contract,
|
|
37
|
+
contracts_by_status,
|
|
38
|
+
coverage_summary,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
__all__ = [
|
|
42
|
+
"Contract",
|
|
43
|
+
"REGISTRY",
|
|
44
|
+
"contracts_by_status",
|
|
45
|
+
"coverage_summary",
|
|
46
|
+
]
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""Entry point for ``python -m codd.contracts_registry`` (delegates to certify).
|
|
2
|
+
|
|
3
|
+
``python -m codd.contracts_registry`` -> the certification report.
|
|
4
|
+
``python -m codd.contracts_registry.certify`` -> the same (certify has its own __main__).
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from codd.contracts_registry.certify import main
|
|
10
|
+
|
|
11
|
+
if __name__ == "__main__":
|
|
12
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
"""``python -m codd.contracts_registry.certify`` — report coherence-contract coverage.
|
|
2
|
+
|
|
3
|
+
This CLI is the "visualize first, don't fail" surface of the ACG Contract
|
|
4
|
+
Registry (GPT §5, "最小第一歩": *pointer が無い contract は CI で uncertified と
|
|
5
|
+
表示する。最初から fail にせず、まず可視化する*).
|
|
6
|
+
|
|
7
|
+
Behaviour:
|
|
8
|
+
|
|
9
|
+
* loads :data:`codd.contracts_registry.REGISTRY`;
|
|
10
|
+
* optionally cross-checks ``dogfood/contract_matrix.yaml`` (``--matrix PATH``)
|
|
11
|
+
for drift between the registry and the human-readable table;
|
|
12
|
+
* for ``covered`` / ``uncertified`` contracts that name regression-test ids,
|
|
13
|
+
optionally checks those test *files* exist under the tests/ tree
|
|
14
|
+
(``--check-fixtures``; existence-only, never runs them);
|
|
15
|
+
* prints a summary table (total / covered / uncertified / uncovered) plus the
|
|
16
|
+
uncovered list (the proactive backlog);
|
|
17
|
+
* **default exit 0** even with uncovered / uncertified contracts (report-only);
|
|
18
|
+
* ``--strict`` exits non-zero iff ANY contract is ``uncertified``
|
|
19
|
+
(covered-but-no-test-pointer). ``uncovered`` cells are KNOWN backlog and do
|
|
20
|
+
NOT trip ``--strict``.
|
|
21
|
+
|
|
22
|
+
It deliberately does NOT execute any test or any CoDD gate.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from __future__ import annotations
|
|
26
|
+
|
|
27
|
+
import argparse
|
|
28
|
+
import re
|
|
29
|
+
import sys
|
|
30
|
+
from pathlib import Path
|
|
31
|
+
from typing import Sequence
|
|
32
|
+
|
|
33
|
+
from codd.contracts_registry.registry import (
|
|
34
|
+
REGISTRY,
|
|
35
|
+
Contract,
|
|
36
|
+
contracts_by_status,
|
|
37
|
+
coverage_summary,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
# Exit codes (kept small + documented; default path is always 0).
|
|
41
|
+
EXIT_OK = 0
|
|
42
|
+
EXIT_STRICT_UNCERTIFIED = 2
|
|
43
|
+
EXIT_MATRIX_DRIFT = 3
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _repo_root() -> Path:
|
|
47
|
+
"""The codd-dev (worktree) root — two levels up from this file.
|
|
48
|
+
|
|
49
|
+
``codd/contracts/certify.py`` -> repo root. Used to resolve the default
|
|
50
|
+
matrix path and the tests/ tree for fixture existence checks.
|
|
51
|
+
"""
|
|
52
|
+
return Path(__file__).resolve().parents[2]
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
# A certification-fixture string may be a precise ``path::test_name`` id or a
|
|
56
|
+
# free-text pointer like ``"tests/foo.py (several cases)"``. We extract any
|
|
57
|
+
# ``tests/...py`` token to do an existence check; free-text without a path is
|
|
58
|
+
# treated as a pointer we cannot file-check (reported, never failed).
|
|
59
|
+
_TEST_PATH_RE = re.compile(r"(tests/[\w./-]+?\.py|tests/[\w./-]+?\.ts)")
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def _fixture_test_files(fixture: str) -> list[str]:
|
|
63
|
+
"""Extract test file path(s) embedded in a certification-fixture string."""
|
|
64
|
+
return _TEST_PATH_RE.findall(fixture)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def _check_fixture_files(
|
|
68
|
+
contract: Contract, root: Path
|
|
69
|
+
) -> tuple[list[str], list[str]]:
|
|
70
|
+
"""Return (existing, missing) test files referenced by a contract.
|
|
71
|
+
|
|
72
|
+
Existence-only; never imports or runs anything.
|
|
73
|
+
"""
|
|
74
|
+
existing: list[str] = []
|
|
75
|
+
missing: list[str] = []
|
|
76
|
+
seen: set[str] = set()
|
|
77
|
+
for fixture in contract.certification_fixtures:
|
|
78
|
+
for rel in _fixture_test_files(fixture):
|
|
79
|
+
if rel in seen:
|
|
80
|
+
continue
|
|
81
|
+
seen.add(rel)
|
|
82
|
+
if (root / rel).is_file():
|
|
83
|
+
existing.append(rel)
|
|
84
|
+
else:
|
|
85
|
+
missing.append(rel)
|
|
86
|
+
return existing, missing
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def _load_matrix_ids(matrix_path: Path) -> set[str]:
|
|
90
|
+
"""Load contract ids from the human-readable matrix YAML (for drift check).
|
|
91
|
+
|
|
92
|
+
The matrix groups contracts under ``families: {<family>: [ {id: ...}, ...]}``.
|
|
93
|
+
Returns the set of all contract ids found.
|
|
94
|
+
"""
|
|
95
|
+
import yaml # local import: only needed when --matrix is given
|
|
96
|
+
|
|
97
|
+
data = yaml.safe_load(matrix_path.read_text(encoding="utf-8")) or {}
|
|
98
|
+
ids: set[str] = set()
|
|
99
|
+
families = data.get("families", {})
|
|
100
|
+
if isinstance(families, dict):
|
|
101
|
+
for entries in families.values():
|
|
102
|
+
for entry in entries or ():
|
|
103
|
+
if isinstance(entry, dict) and "id" in entry:
|
|
104
|
+
ids.add(str(entry["id"]))
|
|
105
|
+
return ids
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def _render_summary(
|
|
109
|
+
*,
|
|
110
|
+
check_fixtures: bool,
|
|
111
|
+
root: Path,
|
|
112
|
+
matrix_drift: tuple[set[str], set[str]] | None,
|
|
113
|
+
) -> tuple[str, bool]:
|
|
114
|
+
"""Build the report text. Returns (text, has_missing_fixture_files)."""
|
|
115
|
+
grouped = contracts_by_status()
|
|
116
|
+
summary = coverage_summary()
|
|
117
|
+
lines: list[str] = []
|
|
118
|
+
lines.append("ACG Contract Registry — coverage certification")
|
|
119
|
+
lines.append("=" * 60)
|
|
120
|
+
lines.append(
|
|
121
|
+
f"total={summary['total']} "
|
|
122
|
+
f"covered={summary['covered']} "
|
|
123
|
+
f"uncertified={summary['uncertified']} "
|
|
124
|
+
f"uncovered={summary['uncovered']}"
|
|
125
|
+
)
|
|
126
|
+
lines.append("")
|
|
127
|
+
|
|
128
|
+
has_missing_files = False
|
|
129
|
+
|
|
130
|
+
# covered + uncertified: list with authority + (optional) fixture-file check.
|
|
131
|
+
for status in ("covered", "uncertified"):
|
|
132
|
+
items = grouped[status]
|
|
133
|
+
if not items:
|
|
134
|
+
continue
|
|
135
|
+
lines.append(f"[{status}] ({len(items)})")
|
|
136
|
+
for c in sorted(items, key=lambda x: x.id):
|
|
137
|
+
line = f" {c.id} <- {c.authority}"
|
|
138
|
+
if check_fixtures:
|
|
139
|
+
existing, missing = _check_fixture_files(c, root)
|
|
140
|
+
if missing:
|
|
141
|
+
has_missing_files = True
|
|
142
|
+
line += f" [MISSING test file(s): {', '.join(missing)}]"
|
|
143
|
+
elif existing:
|
|
144
|
+
line += f" [{len(existing)} test file(s) present]"
|
|
145
|
+
lines.append(line)
|
|
146
|
+
lines.append("")
|
|
147
|
+
|
|
148
|
+
# uncovered: the proactive backlog (predicted_issue + proposed_gate).
|
|
149
|
+
uncovered = grouped["uncovered"]
|
|
150
|
+
if uncovered:
|
|
151
|
+
lines.append(f"[uncovered — proactive backlog] ({len(uncovered)})")
|
|
152
|
+
for c in sorted(uncovered, key=lambda x: x.id):
|
|
153
|
+
lines.append(f" {c.id}")
|
|
154
|
+
lines.append(f" issue: {c.predicted_issue}")
|
|
155
|
+
lines.append(f" gate : {c.proposed_gate}")
|
|
156
|
+
lines.append("")
|
|
157
|
+
|
|
158
|
+
if matrix_drift is not None:
|
|
159
|
+
only_registry, only_matrix = matrix_drift
|
|
160
|
+
if not only_registry and not only_matrix:
|
|
161
|
+
lines.append("matrix: in sync with registry (no drift).")
|
|
162
|
+
else:
|
|
163
|
+
lines.append("matrix: DRIFT detected")
|
|
164
|
+
if only_registry:
|
|
165
|
+
lines.append(
|
|
166
|
+
" in registry but NOT in matrix: "
|
|
167
|
+
+ ", ".join(sorted(only_registry))
|
|
168
|
+
)
|
|
169
|
+
if only_matrix:
|
|
170
|
+
lines.append(
|
|
171
|
+
" in matrix but NOT in registry: "
|
|
172
|
+
+ ", ".join(sorted(only_matrix))
|
|
173
|
+
)
|
|
174
|
+
lines.append("")
|
|
175
|
+
|
|
176
|
+
return "\n".join(lines), has_missing_files
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def build_parser() -> argparse.ArgumentParser:
|
|
180
|
+
parser = argparse.ArgumentParser(
|
|
181
|
+
prog="python -m codd.contracts_registry.certify",
|
|
182
|
+
description=(
|
|
183
|
+
"Report ACG coherence-contract coverage from the registry "
|
|
184
|
+
"(visualize-first; report-only by default)."
|
|
185
|
+
),
|
|
186
|
+
)
|
|
187
|
+
parser.add_argument(
|
|
188
|
+
"--matrix",
|
|
189
|
+
metavar="PATH",
|
|
190
|
+
default=None,
|
|
191
|
+
help=(
|
|
192
|
+
"cross-check this contract_matrix.yaml against the registry and "
|
|
193
|
+
"report id drift (default: do not cross-check)."
|
|
194
|
+
),
|
|
195
|
+
)
|
|
196
|
+
parser.add_argument(
|
|
197
|
+
"--check-fixtures",
|
|
198
|
+
action="store_true",
|
|
199
|
+
help=(
|
|
200
|
+
"existence-check the regression-test FILES named by covered/"
|
|
201
|
+
"uncertified contracts (never runs them)."
|
|
202
|
+
),
|
|
203
|
+
)
|
|
204
|
+
parser.add_argument(
|
|
205
|
+
"--strict",
|
|
206
|
+
action="store_true",
|
|
207
|
+
help=(
|
|
208
|
+
"exit non-zero iff any contract is 'uncertified' (covered but no "
|
|
209
|
+
"test pointer). 'uncovered' backlog cells do NOT trip strict mode."
|
|
210
|
+
),
|
|
211
|
+
)
|
|
212
|
+
return parser
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def main(argv: Sequence[str] | None = None) -> int:
|
|
216
|
+
args = build_parser().parse_args(argv)
|
|
217
|
+
root = _repo_root()
|
|
218
|
+
|
|
219
|
+
matrix_drift: tuple[set[str], set[str]] | None = None
|
|
220
|
+
if args.matrix:
|
|
221
|
+
matrix_path = Path(args.matrix)
|
|
222
|
+
if not matrix_path.is_absolute():
|
|
223
|
+
matrix_path = (Path.cwd() / matrix_path).resolve()
|
|
224
|
+
if not matrix_path.is_file():
|
|
225
|
+
print(f"error: matrix file not found: {matrix_path}", file=sys.stderr)
|
|
226
|
+
return EXIT_MATRIX_DRIFT
|
|
227
|
+
matrix_ids = _load_matrix_ids(matrix_path)
|
|
228
|
+
registry_ids = {c.id for c in REGISTRY}
|
|
229
|
+
matrix_drift = (registry_ids - matrix_ids, matrix_ids - registry_ids)
|
|
230
|
+
|
|
231
|
+
text, _has_missing_files = _render_summary(
|
|
232
|
+
check_fixtures=args.check_fixtures,
|
|
233
|
+
root=root,
|
|
234
|
+
matrix_drift=matrix_drift,
|
|
235
|
+
)
|
|
236
|
+
print(text)
|
|
237
|
+
|
|
238
|
+
summary = coverage_summary()
|
|
239
|
+
|
|
240
|
+
# Default: report-only, exit 0 (visualize first, don't fail).
|
|
241
|
+
exit_code = EXIT_OK
|
|
242
|
+
|
|
243
|
+
# --strict: fail ONLY on uncertified (covered-but-no-pointer). Never on
|
|
244
|
+
# uncovered (known backlog).
|
|
245
|
+
if args.strict and summary["uncertified"] > 0:
|
|
246
|
+
print(
|
|
247
|
+
f"strict: {summary['uncertified']} uncertified contract(s) "
|
|
248
|
+
"(covered but no regression-test pointer) — failing.",
|
|
249
|
+
file=sys.stderr,
|
|
250
|
+
)
|
|
251
|
+
exit_code = EXIT_STRICT_UNCERTIFIED
|
|
252
|
+
|
|
253
|
+
# Matrix drift is a hard error regardless of --strict: the committed matrix
|
|
254
|
+
# MUST mirror the registry (the no-drift invariant the meta-test pins).
|
|
255
|
+
if matrix_drift is not None and (matrix_drift[0] or matrix_drift[1]):
|
|
256
|
+
print(
|
|
257
|
+
"error: contract_matrix.yaml has drifted from the registry "
|
|
258
|
+
"(regenerate it).",
|
|
259
|
+
file=sys.stderr,
|
|
260
|
+
)
|
|
261
|
+
exit_code = EXIT_MATRIX_DRIFT if exit_code == EXIT_OK else exit_code
|
|
262
|
+
|
|
263
|
+
return exit_code
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
if __name__ == "__main__": # pragma: no cover - thin shim
|
|
267
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"""Generate ``dogfood/contract_matrix.yaml`` from the registry.
|
|
2
|
+
|
|
3
|
+
The committed matrix is the human-readable "ledger -> 契約カバレッジ表" artifact
|
|
4
|
+
(GPT §5). It is GENERATED from :data:`codd.contracts_registry.REGISTRY` so it can never
|
|
5
|
+
silently drift; ``tests/test_contracts_registry.py`` has a meta-test asserting
|
|
6
|
+
the committed file matches what this generator would produce.
|
|
7
|
+
|
|
8
|
+
Run: ``python -m codd.contracts_registry.generate_matrix`` (writes the file)
|
|
9
|
+
``python -m codd.contracts_registry.generate_matrix --check`` (diff only, exit!=0
|
|
10
|
+
on drift; used in tests/CI).
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import argparse
|
|
16
|
+
import sys
|
|
17
|
+
from collections import OrderedDict
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
|
|
20
|
+
from codd.contracts_registry.registry import REGISTRY, Contract, coverage_summary
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _contract_to_entry(c: Contract) -> "OrderedDict[str, object]":
|
|
24
|
+
"""Render one contract as an ordered mapping (covered vs uncovered shape)."""
|
|
25
|
+
entry: "OrderedDict[str, object]" = OrderedDict()
|
|
26
|
+
entry["id"] = c.id
|
|
27
|
+
entry["source_node"] = c.source_node
|
|
28
|
+
entry["target_node"] = c.target_node
|
|
29
|
+
entry["edge_type"] = c.edge_type
|
|
30
|
+
entry["dimensions"] = list(c.dimensions)
|
|
31
|
+
entry["status"] = c.status
|
|
32
|
+
entry["enforcement"] = c.enforcement
|
|
33
|
+
entry["fail_mode"] = c.fail_mode
|
|
34
|
+
if c.status == "uncovered":
|
|
35
|
+
entry["authority"] = None
|
|
36
|
+
entry["predicted_issue"] = c.predicted_issue
|
|
37
|
+
entry["proposed_gate"] = c.proposed_gate
|
|
38
|
+
else:
|
|
39
|
+
entry["authority"] = c.authority
|
|
40
|
+
if c.config_flag:
|
|
41
|
+
entry["config_flag"] = c.config_flag
|
|
42
|
+
entry["certification_fixtures"] = list(c.certification_fixtures)
|
|
43
|
+
if c.finding_ids:
|
|
44
|
+
entry["finding_ids"] = list(c.finding_ids)
|
|
45
|
+
return entry
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def build_document() -> "OrderedDict[str, object]":
|
|
49
|
+
"""Assemble the full matrix document (grouped by node family)."""
|
|
50
|
+
families: "OrderedDict[str, list]" = OrderedDict()
|
|
51
|
+
# Stable family order = first-seen order in the registry (covered first,
|
|
52
|
+
# then outer, then uncovered — matches registry assembly), which keeps the
|
|
53
|
+
# file readable and the diff stable.
|
|
54
|
+
for c in REGISTRY:
|
|
55
|
+
families.setdefault(c.node_family, []).append(_contract_to_entry(c))
|
|
56
|
+
|
|
57
|
+
doc: "OrderedDict[str, object]" = OrderedDict()
|
|
58
|
+
doc["generated_from"] = "codd/contracts/registry.py"
|
|
59
|
+
doc["coverage_summary"] = dict(coverage_summary())
|
|
60
|
+
doc["families"] = families
|
|
61
|
+
return doc
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def render_yaml() -> str:
|
|
65
|
+
"""Deterministic YAML text for the matrix (stable key order, block style)."""
|
|
66
|
+
import yaml
|
|
67
|
+
|
|
68
|
+
# Preserve insertion order (OrderedDict) in the dump.
|
|
69
|
+
class _OrderedDumper(yaml.SafeDumper):
|
|
70
|
+
pass
|
|
71
|
+
|
|
72
|
+
def _ordered_representer(dumper, data):
|
|
73
|
+
return dumper.represent_mapping(
|
|
74
|
+
"tag:yaml.org,2002:map", data.items()
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
_OrderedDumper.add_representer(OrderedDict, _ordered_representer)
|
|
78
|
+
|
|
79
|
+
body = yaml.dump(
|
|
80
|
+
build_document(),
|
|
81
|
+
Dumper=_OrderedDumper,
|
|
82
|
+
sort_keys=False,
|
|
83
|
+
default_flow_style=False,
|
|
84
|
+
allow_unicode=True,
|
|
85
|
+
width=100,
|
|
86
|
+
)
|
|
87
|
+
header = (
|
|
88
|
+
"# ═══════════════════════════════════════════════════════════════════\n"
|
|
89
|
+
"# ACG Contract Coverage Matrix (ledger -> 契約カバレッジ表)\n"
|
|
90
|
+
"# ═══════════════════════════════════════════════════════════════════\n"
|
|
91
|
+
"# AUTO-GENERATED from codd/contracts/registry.py.\n"
|
|
92
|
+
"# Regenerate with: python -m codd.contracts_registry.generate_matrix\n"
|
|
93
|
+
"# A meta-test (tests/test_contracts_registry.py) pins this file to the\n"
|
|
94
|
+
"# registry so they can never drift. Do NOT hand-edit.\n"
|
|
95
|
+
"#\n"
|
|
96
|
+
"# status: covered = enforced by `authority` AND pinned by a test\n"
|
|
97
|
+
"# uncertified = enforced by `authority` but no test pointer\n"
|
|
98
|
+
"# uncovered = predicted-but-unenforced (GPT §2 空セル backlog)\n"
|
|
99
|
+
"# ═══════════════════════════════════════════════════════════════════\n"
|
|
100
|
+
)
|
|
101
|
+
return header + body
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def matrix_path() -> Path:
|
|
105
|
+
"""``dogfood/contract_matrix.yaml`` at the repo root."""
|
|
106
|
+
return Path(__file__).resolve().parents[2] / "dogfood" / "contract_matrix.yaml"
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def main(argv: list[str] | None = None) -> int:
|
|
110
|
+
parser = argparse.ArgumentParser(
|
|
111
|
+
prog="python -m codd.contracts_registry.generate_matrix",
|
|
112
|
+
description="Generate dogfood/contract_matrix.yaml from the registry.",
|
|
113
|
+
)
|
|
114
|
+
parser.add_argument(
|
|
115
|
+
"--check",
|
|
116
|
+
action="store_true",
|
|
117
|
+
help="do not write; exit non-zero if the committed file is stale.",
|
|
118
|
+
)
|
|
119
|
+
args = parser.parse_args(argv)
|
|
120
|
+
|
|
121
|
+
path = matrix_path()
|
|
122
|
+
expected = render_yaml()
|
|
123
|
+
|
|
124
|
+
if args.check:
|
|
125
|
+
if not path.is_file():
|
|
126
|
+
print(f"missing: {path}", file=sys.stderr)
|
|
127
|
+
return 1
|
|
128
|
+
actual = path.read_text(encoding="utf-8")
|
|
129
|
+
if actual != expected:
|
|
130
|
+
print(
|
|
131
|
+
"contract_matrix.yaml is STALE — run "
|
|
132
|
+
"`python -m codd.contracts_registry.generate_matrix`.",
|
|
133
|
+
file=sys.stderr,
|
|
134
|
+
)
|
|
135
|
+
return 1
|
|
136
|
+
print("contract_matrix.yaml is up to date.")
|
|
137
|
+
return 0
|
|
138
|
+
|
|
139
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
140
|
+
path.write_text(expected, encoding="utf-8")
|
|
141
|
+
print(f"wrote {path} ({len(REGISTRY)} contracts).")
|
|
142
|
+
return 0
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
if __name__ == "__main__":
|
|
146
|
+
raise SystemExit(main())
|