codd-dev 2.86.0__tar.gz → 2.87.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.86.0 → codd_dev-2.87.0}/PKG-INFO +1 -1
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/__init__.py +1 -1
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/extractor.py +75 -235
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/__init__.py +10 -22
- codd_dev-2.87.0/codd/parsing/extractor_registry.py +120 -0
- codd_dev-2.87.0/codd/parsing/regex_strategies.py +544 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/scanner.py +15 -40
- {codd_dev-2.86.0 → codd_dev-2.87.0}/pyproject.toml +1 -1
- {codd_dev-2.86.0 → codd_dev-2.87.0}/.gitignore +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/LICENSE +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/README.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/bench_fixture/README.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/__main__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/action_outcome.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/ai_invoke.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/ai_patch.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/artifact_contract.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/artifact_ids.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/artifacts/catalog.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/assembler.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/bridge.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/capability_completeness.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/claude_cli.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/cli.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/clustering.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/confidence.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/config.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/config_schema.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/contracts.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/contracts_registry/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/contracts_registry/__main__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/contracts_registry/certify.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/contracts_registry/generate_matrix.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/contracts_registry/registry.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/coverage_auditor.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/coverage_execution_coherence.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/auto_repair.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/artifact_contract_check.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/ci_health.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/dependency_freshness.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/opt_out.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/ui_coherence.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/impact.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/defaults.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/defaults.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dependency_lock_coherence.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployer.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/ai_command_factory.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/codex_app_server.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/vitest.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/design_md.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/discovery.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/drift.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/e2e_contract_coherence.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/e2e_harness.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/env_refs.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/extract_paths.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/candidate_selector.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/design_updater.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/impl_propagation.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/interactive_prompt.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/phenomenon_fixer.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/phenomenon_parser.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/risk_classifier.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/templates/clarification_question.txt +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/templates/design_update.txt +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/templates/impl_update.txt +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/templates/risk_assessment.txt +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/templates_loader.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fixer.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/frontmatter.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/generator.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/git_evidence.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/graph.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/greenfield/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/greenfield/pipeline.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/iac_nfr.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/implement_oracle.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/implement_oracle_scope.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/implement_oracle_types.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/implementer.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/import_coherence.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/inheritance.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/init/llm_lexicon_suggester.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/adapters/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/adapters/implement_oracle.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/adapters/oracle_go.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/adapters/oracle_python.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/adapters/oracle_typescript.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/adapters/runner_report.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/builtin_adapters.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/compat.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/contract.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/loader.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/oracle_executor.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/path_planner.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/profile.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/profiles/go.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/profiles/python.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/profiles/typescript.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/registry.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/verify_executor.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/verify_plan.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/measure.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/operational_e2e_audit.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/operations_derive.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/_shared.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/api_specs.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/filesystem_routes.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/iac.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/python_ast.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/schemas.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/tests_builddeps.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/treesitter.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/planner.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/policy.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/preflight/defaults/generic.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/project_types.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/propagate.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/propagation_common.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/propagator.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/reconciliation_ledger.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/reference_resolution.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/registry.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/auto_scope_guard.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/history.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/test_failure_attribution.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/require.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/requirement_reconciliation.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/requirements_meta.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/restoration_report.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/restore.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/runtime_smoke/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/runtime_smoke/checks.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/runtime_smoke/config.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/runtime_smoke/report.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/runtime_smoke/runner.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/skills_cli/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/skills_cli/discovery.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/skills_cli/manager.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/skills_cli/paths.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/adapters/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/adapters/_base.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/adapters/nextjs.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/adapters/playwright.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/compose.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/loader.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/lock.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/obligations.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/profile.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/project.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/registry.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/resolve.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/surface_reconciliation.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/synth.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/test_detection.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/test_import_coherence.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/traceability.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/validator.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/vb_marker_authenticity.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/vb_rerun_scope.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/verifiable_behavior_audit.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/watch/events.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/wiring.py +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/dogfood/README.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/examples/README.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-assemble/SKILL.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-evolve/SKILL.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-generate/SKILL.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-greenfield/SKILL.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-impact/SKILL.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-init/SKILL.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-propagate/SKILL.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-restore/SKILL.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-scan/SKILL.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-validate/SKILL.md +0 -0
- {codd_dev-2.86.0 → codd_dev-2.87.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.87.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
|
|
@@ -365,13 +365,14 @@ def _detect_test_dirs(project_root: Path) -> list[str]:
|
|
|
365
365
|
|
|
366
366
|
|
|
367
367
|
def _language_extensions(language: str) -> set[str]:
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
368
|
+
"""Source-file extensions for ``language`` (registry-data lookup).
|
|
369
|
+
|
|
370
|
+
Contract Kernel Cut Condition A: no language-name keyed dict in core — the
|
|
371
|
+
extension table lives in the registry-DATA strategy. Byte-identical.
|
|
372
|
+
"""
|
|
373
|
+
from codd.parsing.regex_strategies import language_extensions
|
|
374
|
+
|
|
375
|
+
return language_extensions(language)
|
|
375
376
|
|
|
376
377
|
|
|
377
378
|
def _discover_modules(facts: ProjectFacts, project_root: Path, src_dir: Path,
|
|
@@ -473,92 +474,36 @@ def _schema_has_data(schema_info: Any) -> bool:
|
|
|
473
474
|
|
|
474
475
|
def _file_to_module(rel_path: str, project_root: Path, src_dir: Path,
|
|
475
476
|
language: str) -> str:
|
|
476
|
-
"""Map a file path to its module name.
|
|
477
|
-
rel_to_src = Path(rel_path).relative_to(src_dir.relative_to(project_root))
|
|
477
|
+
"""Map a file path to its module name.
|
|
478
478
|
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
if parts and parts[-1] == "__init__":
|
|
486
|
-
parts.pop()
|
|
487
|
-
# Top-level module name
|
|
488
|
-
if parts:
|
|
489
|
-
return parts[0]
|
|
490
|
-
return rel_to_src.parent.name or "root"
|
|
491
|
-
|
|
492
|
-
elif language in ("typescript", "javascript"):
|
|
493
|
-
parts = list(rel_to_src.parts)
|
|
494
|
-
if parts:
|
|
495
|
-
return parts[0]
|
|
496
|
-
return "root"
|
|
497
|
-
|
|
498
|
-
elif language == "java":
|
|
499
|
-
# Use top-level directory under src
|
|
500
|
-
parts = list(rel_to_src.parts)
|
|
501
|
-
# Skip standard layout dirs (main/java, main/kotlin)
|
|
502
|
-
skip = {"main", "java", "kotlin", "scala"}
|
|
503
|
-
parts = [p for p in parts if p not in skip]
|
|
504
|
-
if parts:
|
|
505
|
-
return parts[0]
|
|
506
|
-
return "root"
|
|
507
|
-
|
|
508
|
-
elif language == "go":
|
|
509
|
-
parts = list(rel_to_src.parts)
|
|
510
|
-
if parts:
|
|
511
|
-
return parts[0]
|
|
512
|
-
return "root"
|
|
479
|
+
Contract Kernel Cut Condition A: dispatches through the registry-DATA
|
|
480
|
+
strategy's ``file_to_module`` rule (no ``if language ==`` branch). The
|
|
481
|
+
generic strategy reproduces the former trailing ``return parts[0]``
|
|
482
|
+
default; behaviour is byte-identical.
|
|
483
|
+
"""
|
|
484
|
+
from codd.parsing.regex_strategies import strategy_for
|
|
513
485
|
|
|
486
|
+
rel_to_src = Path(rel_path).relative_to(src_dir.relative_to(project_root))
|
|
487
|
+
rule = strategy_for(language).file_to_module
|
|
488
|
+
if rule is not None:
|
|
489
|
+
result = rule(rel_to_src)
|
|
490
|
+
if result is not None:
|
|
491
|
+
return result
|
|
514
492
|
return rel_to_src.parts[0] if rel_to_src.parts else "root"
|
|
515
493
|
|
|
516
494
|
|
|
517
495
|
def _extract_symbols(content: str, rel_path: str, language: str) -> list[Symbol]:
|
|
518
|
-
"""Extract classes and functions from source code (regex-based MVP).
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
elif language in ("typescript", "javascript"):
|
|
531
|
-
for i, line in enumerate(content.splitlines(), 1):
|
|
532
|
-
m = re.match(r'^(?:export\s+)?class\s+(\w+)', line)
|
|
533
|
-
if m:
|
|
534
|
-
symbols.append(Symbol(m.group(1), "class", rel_path, i))
|
|
535
|
-
m = re.match(r'^(?:export\s+)?(?:async\s+)?function\s+(\w+)\s*\(([^)]*)\)', line)
|
|
536
|
-
if m:
|
|
537
|
-
symbols.append(Symbol(m.group(1), "function", rel_path, i, m.group(2).strip()))
|
|
538
|
-
# Arrow function exports
|
|
539
|
-
m = re.match(r'^export\s+const\s+(\w+)\s*=\s*(?:async\s+)?\(', line)
|
|
540
|
-
if m:
|
|
541
|
-
symbols.append(Symbol(m.group(1), "function", rel_path, i))
|
|
542
|
-
|
|
543
|
-
elif language == "java":
|
|
544
|
-
for i, line in enumerate(content.splitlines(), 1):
|
|
545
|
-
m = re.match(r'^\s*(?:public|protected|private)?\s*(?:static\s+)?(?:abstract\s+)?class\s+(\w+)', line)
|
|
546
|
-
if m:
|
|
547
|
-
symbols.append(Symbol(m.group(1), "class", rel_path, i))
|
|
548
|
-
m = re.match(r'^\s*(?:public|protected)\s+(?:static\s+)?[\w<>\[\],\s]+\s+(\w+)\s*\(([^)]*)\)', line)
|
|
549
|
-
if m and m.group(1)[0].islower():
|
|
550
|
-
symbols.append(Symbol(m.group(1), "function", rel_path, i, m.group(2).strip()))
|
|
551
|
-
|
|
552
|
-
elif language == "go":
|
|
553
|
-
for i, line in enumerate(content.splitlines(), 1):
|
|
554
|
-
m = re.match(r'^type\s+(\w+)\s+struct\s*\{', line)
|
|
555
|
-
if m:
|
|
556
|
-
symbols.append(Symbol(m.group(1), "class", rel_path, i))
|
|
557
|
-
m = re.match(r'^func\s+(?:\(\w+\s+\*?\w+\)\s+)?(\w+)\s*\(([^)]*)\)', line)
|
|
558
|
-
if m and m.group(1)[0].isupper():
|
|
559
|
-
symbols.append(Symbol(m.group(1), "function", rel_path, i, m.group(2).strip()))
|
|
560
|
-
|
|
561
|
-
return symbols
|
|
496
|
+
"""Extract classes and functions from source code (regex-based MVP).
|
|
497
|
+
|
|
498
|
+
Contract Kernel Cut Condition A: this core function no longer branches on a
|
|
499
|
+
language name — it dispatches through the registry-DATA strategy for
|
|
500
|
+
``language`` (see :mod:`codd.parsing.regex_strategies`). The per-language
|
|
501
|
+
regex bodies live in that strategy table (the allowed extractor-impl zone);
|
|
502
|
+
behaviour is byte-identical to the former inline ladder.
|
|
503
|
+
"""
|
|
504
|
+
from codd.parsing.regex_strategies import strategy_for
|
|
505
|
+
|
|
506
|
+
return strategy_for(language).symbols(content, rel_path)
|
|
562
507
|
|
|
563
508
|
|
|
564
509
|
def _extract_imports(content: str, language: str, project_root: Path,
|
|
@@ -566,105 +511,26 @@ def _extract_imports(content: str, language: str, project_root: Path,
|
|
|
566
511
|
"""Extract imports, classified as internal or external.
|
|
567
512
|
|
|
568
513
|
Returns (internal_imports: {module_name: [import_lines]}, external_imports: set)
|
|
569
|
-
"""
|
|
570
|
-
internal: dict[str, list[str]] = {}
|
|
571
|
-
external: set[str] = set()
|
|
572
|
-
|
|
573
|
-
if language == "python":
|
|
574
|
-
# Determine package name of the source dir itself
|
|
575
|
-
src_pkg_name = src_dir.name if (src_dir / "__init__.py").exists() else None
|
|
576
|
-
|
|
577
|
-
for line in content.splitlines():
|
|
578
|
-
m = re.match(r'^(?:from|import)\s+([\w.]+)', line.strip())
|
|
579
|
-
if not m:
|
|
580
|
-
continue
|
|
581
|
-
module = m.group(1)
|
|
582
|
-
parts = module.split(".")
|
|
583
|
-
top_level = parts[0]
|
|
584
|
-
|
|
585
|
-
# Check if it's an internal module
|
|
586
|
-
is_internal = False
|
|
587
|
-
internal_key = top_level
|
|
588
|
-
|
|
589
|
-
# Case 1: import references the source package itself (e.g., from codd.graph)
|
|
590
|
-
if src_pkg_name and top_level == src_pkg_name and len(parts) >= 2:
|
|
591
|
-
is_internal = True
|
|
592
|
-
internal_key = parts[1] # Use sub-module as the key
|
|
593
|
-
else:
|
|
594
|
-
# Case 2: import references a sibling directory/file
|
|
595
|
-
for sd in [src_dir] + [project_root / d for d in ("src", "lib", "app") if (project_root / d).is_dir()]:
|
|
596
|
-
if (sd / top_level).is_dir() or (sd / f"{top_level}.py").is_file():
|
|
597
|
-
is_internal = True
|
|
598
|
-
break
|
|
599
|
-
|
|
600
|
-
if is_internal:
|
|
601
|
-
internal.setdefault(internal_key, []).append(line.strip())
|
|
602
|
-
else:
|
|
603
|
-
external.add(top_level)
|
|
604
514
|
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
if import_path.startswith("."):
|
|
612
|
-
# Relative import → internal
|
|
613
|
-
resolved = (file_path.parent / import_path).resolve()
|
|
614
|
-
try:
|
|
615
|
-
rel = resolved.relative_to(src_dir)
|
|
616
|
-
top_level = rel.parts[0] if rel.parts else "root"
|
|
617
|
-
internal.setdefault(top_level, []).append(line.strip())
|
|
618
|
-
except ValueError:
|
|
619
|
-
external.add(import_path)
|
|
620
|
-
elif import_path.startswith("@"):
|
|
621
|
-
# Scoped package
|
|
622
|
-
parts = import_path.split("/")
|
|
623
|
-
pkg = "/".join(parts[:2]) if len(parts) >= 2 else import_path
|
|
624
|
-
external.add(pkg)
|
|
625
|
-
else:
|
|
626
|
-
external.add(import_path.split("/")[0])
|
|
515
|
+
Contract Kernel Cut Condition A: dispatches through the registry-DATA
|
|
516
|
+
strategy for ``language`` (no ``if language ==`` branch here). The strategy
|
|
517
|
+
also applies the per-language stdlib subtraction, byte-identical to the
|
|
518
|
+
former inline ``external -= _common_stdlib(language)`` tail.
|
|
519
|
+
"""
|
|
520
|
+
from codd.parsing.regex_strategies import strategy_for
|
|
627
521
|
|
|
628
|
-
|
|
629
|
-
in_import = False
|
|
630
|
-
for line in content.splitlines():
|
|
631
|
-
if re.match(r'^import\s*\(', line):
|
|
632
|
-
in_import = True
|
|
633
|
-
continue
|
|
634
|
-
if in_import and line.strip() == ")":
|
|
635
|
-
in_import = False
|
|
636
|
-
continue
|
|
637
|
-
if in_import or re.match(r'^import\s+"', line):
|
|
638
|
-
m = re.search(r'"([^"]+)"', line)
|
|
639
|
-
if m:
|
|
640
|
-
pkg = m.group(1)
|
|
641
|
-
external.add(pkg.split("/")[-1])
|
|
522
|
+
return strategy_for(language).imports(content, project_root, src_dir, file_path)
|
|
642
523
|
|
|
643
|
-
# Remove stdlib-like imports from external
|
|
644
|
-
external -= _common_stdlib(language)
|
|
645
524
|
|
|
646
|
-
|
|
525
|
+
def _common_stdlib(language: str) -> set[str]:
|
|
526
|
+
"""Return common stdlib modules to exclude from external imports.
|
|
647
527
|
|
|
528
|
+
Registry-data lookup (no language-name branch); empty for languages with no
|
|
529
|
+
declared stdlib set, byte-identical to the former python-only ladder.
|
|
530
|
+
"""
|
|
531
|
+
from codd.parsing.regex_strategies import common_stdlib
|
|
648
532
|
|
|
649
|
-
|
|
650
|
-
"""Return common stdlib modules to exclude from external imports."""
|
|
651
|
-
if language == "python":
|
|
652
|
-
return {
|
|
653
|
-
"os", "sys", "re", "json", "math", "time", "datetime", "pathlib",
|
|
654
|
-
"typing", "collections", "itertools", "functools", "copy", "io",
|
|
655
|
-
"subprocess", "shutil", "tempfile", "hashlib", "uuid", "logging",
|
|
656
|
-
"unittest", "dataclasses", "enum", "abc", "contextlib", "textwrap",
|
|
657
|
-
"argparse", "configparser", "csv", "sqlite3", "http", "urllib",
|
|
658
|
-
"threading", "multiprocessing", "socket", "email", "html", "xml",
|
|
659
|
-
"importlib", "inspect", "ast", "dis", "warnings", "traceback",
|
|
660
|
-
"pprint", "string", "struct", "array", "queue", "heapq", "bisect",
|
|
661
|
-
"statistics", "random", "secrets", "base64", "binascii", "codecs",
|
|
662
|
-
"locale", "gettext", "calendar", "zlib", "gzip", "tarfile", "zipfile",
|
|
663
|
-
"__future__", "builtins", "types", "operator", "fnmatch", "glob",
|
|
664
|
-
"signal", "mmap", "ctypes", "platform", "sysconfig", "site",
|
|
665
|
-
"concurrent", "asyncio", "selectors", "ssl", "ftplib", "smtplib",
|
|
666
|
-
}
|
|
667
|
-
return set()
|
|
533
|
+
return common_stdlib(language)
|
|
668
534
|
|
|
669
535
|
|
|
670
536
|
def _map_tests_to_modules(facts: ProjectFacts, project_root: Path,
|
|
@@ -706,19 +572,19 @@ def _map_tests_to_modules(facts: ProjectFacts, project_root: Path,
|
|
|
706
572
|
|
|
707
573
|
|
|
708
574
|
def _guess_test_target(test_filename: str, language: str) -> str | None:
|
|
709
|
-
"""Guess which module a test file targets from its name.
|
|
710
|
-
name = Path(test_filename).stem
|
|
575
|
+
"""Guess which module a test file targets from its name.
|
|
711
576
|
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
for suffix in (".test", ".spec"):
|
|
719
|
-
if name.endswith(suffix):
|
|
720
|
-
return name[: -len(suffix)]
|
|
577
|
+
Contract Kernel Cut Condition A: dispatches through the registry-DATA
|
|
578
|
+
strategy's ``guess_test_target`` rule (no ``if language ==`` branch);
|
|
579
|
+
languages without a rule return ``None``, byte-identical to the former
|
|
580
|
+
ladder.
|
|
581
|
+
"""
|
|
582
|
+
from codd.parsing.regex_strategies import strategy_for
|
|
721
583
|
|
|
584
|
+
name = Path(test_filename).stem
|
|
585
|
+
rule = strategy_for(language).guess_test_target
|
|
586
|
+
if rule is not None:
|
|
587
|
+
return rule(name)
|
|
722
588
|
return None
|
|
723
589
|
|
|
724
590
|
|
|
@@ -818,54 +684,28 @@ def _detect_go_patterns(facts: ProjectFacts, content: str):
|
|
|
818
684
|
|
|
819
685
|
|
|
820
686
|
def _detect_code_patterns(mod: ModuleInfo, content: str, language: str):
|
|
821
|
-
"""Detect API routes, DB models, page routes, auth redirects from source code.
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
if re.search(r'@login_required|@permission_required|LoginRequiredMixin', content):
|
|
832
|
-
mod.patterns["auth_guards"] = "Authentication guards"
|
|
833
|
-
|
|
834
|
-
elif language in ("typescript", "javascript"):
|
|
835
|
-
if re.search(r'(?:app|router)\.(get|post|put|delete|patch)\s*\(', content):
|
|
836
|
-
mod.patterns["api_routes"] = "HTTP route handlers"
|
|
837
|
-
if re.search(r'@(?:Controller|Get|Post|Put|Delete|Patch)\s*\(', content):
|
|
838
|
-
mod.patterns["api_routes"] = "NestJS controller"
|
|
839
|
-
if re.search(r'(?:schema|model)\s*\(', content, re.IGNORECASE):
|
|
840
|
-
mod.patterns["db_models"] = "Database models"
|
|
841
|
-
# Page routes: Next.js/Remix/SvelteKit page components with server-side logic
|
|
842
|
-
if re.search(r'export\s+default\s+(?:async\s+)?function\s+\w*Page', content):
|
|
843
|
-
mod.patterns["page_routes"] = "Page route components"
|
|
844
|
-
# Auth redirects: server-side redirect after auth checks
|
|
845
|
-
if re.search(r'(?:redirect|NextResponse\.redirect|Response\.redirect)\s*\(', content):
|
|
846
|
-
mod.patterns["auth_redirects"] = "Server-side redirects"
|
|
847
|
-
# Middleware with auth/redirect logic
|
|
848
|
-
if re.search(r'export\s+(?:async\s+)?function\s+middleware', content):
|
|
849
|
-
mod.patterns["middleware"] = "Request middleware"
|
|
850
|
-
# Client-side navigation: programmatic redirects after form submission
|
|
851
|
-
if re.search(r'(?:router\.push|router\.replace|window\.location\.assign|window\.location\.href\s*=)', content):
|
|
852
|
-
mod.patterns["client_redirects"] = "Client-side navigation"
|
|
853
|
-
# Auth provider configuration (NextAuth, Auth.js, etc.)
|
|
854
|
-
if re.search(r'(?:NextAuth|CredentialsProvider|signIn|signOut|useSession|getServerSession)', content):
|
|
855
|
-
mod.patterns["auth_provider"] = "Authentication provider"
|
|
687
|
+
"""Detect API routes, DB models, page routes, auth redirects from source code.
|
|
688
|
+
|
|
689
|
+
Contract Kernel Cut Condition A: dispatches through the registry-DATA
|
|
690
|
+
strategy for ``language`` (no ``if language ==`` branch here). The
|
|
691
|
+
per-language detection bodies live in the strategy table; behaviour is
|
|
692
|
+
byte-identical to the former inline ladder.
|
|
693
|
+
"""
|
|
694
|
+
from codd.parsing.regex_strategies import strategy_for
|
|
695
|
+
|
|
696
|
+
strategy_for(language).code_patterns(mod, content)
|
|
856
697
|
|
|
857
698
|
|
|
858
699
|
def _detect_entry_points(facts: ProjectFacts, project_root: Path, language: str):
|
|
859
|
-
"""Find likely entry points (main files).
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
}
|
|
700
|
+
"""Find likely entry points (main files).
|
|
701
|
+
|
|
702
|
+
Contract Kernel Cut Condition A: the per-language candidate list comes from
|
|
703
|
+
the registry-DATA strategy (no language-name keyed dict in core).
|
|
704
|
+
Byte-identical.
|
|
705
|
+
"""
|
|
706
|
+
from codd.parsing.regex_strategies import entry_point_candidates
|
|
867
707
|
|
|
868
|
-
for candidate in
|
|
708
|
+
for candidate in entry_point_candidates(language):
|
|
869
709
|
for src_dir in facts.source_dirs:
|
|
870
710
|
path = project_root / src_dir / candidate
|
|
871
711
|
if path.exists():
|
|
@@ -166,30 +166,18 @@ from codd.parsing.filesystem_routes import (
|
|
|
166
166
|
|
|
167
167
|
|
|
168
168
|
def get_extractor(language: str, category: str = "source") -> LanguageExtractor:
|
|
169
|
-
"""Select the best available extractor for a language/category pair.
|
|
170
|
-
normalized_language = language.lower()
|
|
171
|
-
normalized_category = category.lower()
|
|
169
|
+
"""Select the best available extractor for a language/category pair.
|
|
172
170
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
171
|
+
Contract Kernel Cut Condition A: selection is REGISTRY-DATA-driven (see
|
|
172
|
+
:mod:`codd.parsing.extractor_registry`) — the language NAMES live in a data
|
|
173
|
+
table, the core dispatches by a table lookup, NOT a ``if language ==``
|
|
174
|
+
ladder. Falls through to :class:`RegexExtractor` (best-effort analysis) for
|
|
175
|
+
any unknown/unsupported language. Behaviour is byte-identical to the former
|
|
176
|
+
inline ladder.
|
|
177
|
+
"""
|
|
178
|
+
from codd.parsing.extractor_registry import select_extractor
|
|
181
179
|
|
|
182
|
-
|
|
183
|
-
return PythonAstExtractor(normalized_language, normalized_category)
|
|
184
|
-
|
|
185
|
-
if (
|
|
186
|
-
normalized_category == "source"
|
|
187
|
-
and normalized_language in _TREE_SITTER_LANGUAGE_PACKAGES
|
|
188
|
-
and TreeSitterExtractor.is_available(normalized_language)
|
|
189
|
-
):
|
|
190
|
-
return TreeSitterExtractor(normalized_language, normalized_category)
|
|
191
|
-
|
|
192
|
-
return RegexExtractor(normalized_language, normalized_category)
|
|
180
|
+
return select_extractor(language, category)
|
|
193
181
|
|
|
194
182
|
|
|
195
183
|
__all__ = [
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"""Registry-DATA-driven extractor SELECTION for ``get_extractor``.
|
|
2
|
+
|
|
3
|
+
Contract Kernel Cut Condition A (PARSING/EXTRACTION zone). ``get_extractor``
|
|
4
|
+
used to select a backend with a ``if normalized_language == "python"`` /
|
|
5
|
+
``in _TREE_SITTER_LANGUAGE_PACKAGES`` ladder. This module replaces that with a
|
|
6
|
+
DATA table of :class:`ExtractorSpec` entries: the core ``get_extractor`` iterates
|
|
7
|
+
the table and picks the first spec whose ``(category, language)`` matches AND
|
|
8
|
+
whose capability probe (``available``) is satisfied — NO ``if language ==``
|
|
9
|
+
branch in the selection function.
|
|
10
|
+
|
|
11
|
+
This registry is deliberately BROADER than the greenfield ``default_registry``
|
|
12
|
+
(go/python/typescript): the extraction engine analyses many languages (python,
|
|
13
|
+
ts, js, go, java, sql, prisma, …), so it must NOT be coupled to the 3 greenfield
|
|
14
|
+
profiles. The language NAMES live here in the DATA table, which is the allowed
|
|
15
|
+
"registry data" zone (v2.76: "project detection uses registry data").
|
|
16
|
+
|
|
17
|
+
Capability probes keep graceful degradation intact: a tree-sitter / sql backend
|
|
18
|
+
whose optional dependency is missing simply does not match, and selection falls
|
|
19
|
+
through to the next spec and finally to :class:`RegexExtractor` (legitimate
|
|
20
|
+
best-effort analysis — extraction is NOT a green/red gate).
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
from __future__ import annotations
|
|
24
|
+
|
|
25
|
+
from dataclasses import dataclass
|
|
26
|
+
from typing import Callable
|
|
27
|
+
|
|
28
|
+
from codd.parsing._shared import LanguageExtractor, RegexExtractor
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@dataclass(frozen=True)
|
|
32
|
+
class ExtractorSpec:
|
|
33
|
+
"""One selectable extractor backend (registry DATA, not name dispatch).
|
|
34
|
+
|
|
35
|
+
* ``categories`` / ``languages`` — the ``(category, language)`` pairs this
|
|
36
|
+
spec serves (the NAMES that legitimately live in registry data).
|
|
37
|
+
* ``available`` — capability probe (e.g. tree-sitter binding importable);
|
|
38
|
+
``None`` means always available.
|
|
39
|
+
* ``factory`` — builds the extractor for a ``(language, category)`` pair.
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
categories: frozenset[str]
|
|
43
|
+
languages: frozenset[str]
|
|
44
|
+
factory: Callable[[str, str], LanguageExtractor]
|
|
45
|
+
available: Callable[[str], bool] | None = None
|
|
46
|
+
|
|
47
|
+
def matches(self, language: str, category: str) -> bool:
|
|
48
|
+
if category not in self.categories or language not in self.languages:
|
|
49
|
+
return False
|
|
50
|
+
if self.available is not None and not self.available(language):
|
|
51
|
+
return False
|
|
52
|
+
return True
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _build_specs() -> tuple[ExtractorSpec, ...]:
|
|
56
|
+
# Imported lazily inside the builder to avoid import cycles at package load
|
|
57
|
+
# (these backends import from ``_shared`` / each other).
|
|
58
|
+
from codd.parsing.python_ast import PythonAstExtractor
|
|
59
|
+
from codd.parsing.schemas import PrismaSchemaExtractor, SqlDdlExtractor
|
|
60
|
+
from codd.parsing.treesitter import (
|
|
61
|
+
_TREE_SITTER_LANGUAGE_PACKAGES,
|
|
62
|
+
TreeSitterExtractor,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
return (
|
|
66
|
+
# ── schema category ──────────────────────────────────────────────
|
|
67
|
+
ExtractorSpec(
|
|
68
|
+
categories=frozenset({"schema"}),
|
|
69
|
+
languages=frozenset({"sql"}),
|
|
70
|
+
factory=lambda language, category: SqlDdlExtractor(),
|
|
71
|
+
available=lambda language: SqlDdlExtractor.is_available(),
|
|
72
|
+
),
|
|
73
|
+
ExtractorSpec(
|
|
74
|
+
categories=frozenset({"schema"}),
|
|
75
|
+
languages=frozenset({"prisma"}),
|
|
76
|
+
factory=lambda language, category: PrismaSchemaExtractor(),
|
|
77
|
+
),
|
|
78
|
+
# ── source category ──────────────────────────────────────────────
|
|
79
|
+
ExtractorSpec(
|
|
80
|
+
categories=frozenset({"source"}),
|
|
81
|
+
languages=frozenset({"python"}),
|
|
82
|
+
factory=lambda language, category: PythonAstExtractor(language, category),
|
|
83
|
+
),
|
|
84
|
+
# Tree-sitter source backend: serves exactly the languages with a
|
|
85
|
+
# registered binding, gated by the per-language availability probe.
|
|
86
|
+
# NOTE: this mirrors the pre-refactor ladder EXACTLY, including that
|
|
87
|
+
# ``sql`` is a tree-sitter package (so ``get_extractor("sql","source")``
|
|
88
|
+
# selects tree-sitter when available) — byte-identical selection.
|
|
89
|
+
ExtractorSpec(
|
|
90
|
+
categories=frozenset({"source"}),
|
|
91
|
+
languages=frozenset(_TREE_SITTER_LANGUAGE_PACKAGES),
|
|
92
|
+
factory=lambda language, category: TreeSitterExtractor(language, category),
|
|
93
|
+
available=lambda language: TreeSitterExtractor.is_available(language),
|
|
94
|
+
),
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
_SPECS: tuple[ExtractorSpec, ...] | None = None
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def _specs() -> tuple[ExtractorSpec, ...]:
|
|
102
|
+
global _SPECS
|
|
103
|
+
if _SPECS is None:
|
|
104
|
+
_SPECS = _build_specs()
|
|
105
|
+
return _SPECS
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def select_extractor(language: str, category: str = "source") -> LanguageExtractor:
|
|
109
|
+
"""Select the best available extractor via the registry-data table.
|
|
110
|
+
|
|
111
|
+
Iterates the DATA specs in priority order and returns the first match;
|
|
112
|
+
falls through to :class:`RegexExtractor` (best-effort analysis) when no
|
|
113
|
+
spec serves the ``(language, category)`` pair or the capability is missing.
|
|
114
|
+
"""
|
|
115
|
+
normalized_language = (language or "").lower()
|
|
116
|
+
normalized_category = (category or "").lower()
|
|
117
|
+
for spec in _specs():
|
|
118
|
+
if spec.matches(normalized_language, normalized_category):
|
|
119
|
+
return spec.factory(normalized_language, normalized_category)
|
|
120
|
+
return RegexExtractor(normalized_language, normalized_category)
|