codd-dev 2.7.0__tar.gz → 2.9.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.7.0 → codd_dev-2.9.0}/PKG-INFO +1 -1
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/cli.py +101 -2
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/coverage_auditor.py +3 -3
- codd_dev-2.9.0/codd/init/llm_lexicon_suggester.py +242 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/pyproject.toml +1 -1
- {codd_dev-2.7.0 → codd_dev-2.9.0}/.gitignore +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/LICENSE +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/README.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/__main__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/_git_helper.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/ask_user_question_adapter.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/assembler.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/bridge.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/brownfield/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/brownfield/pipeline.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/clustering.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/coherence_adapters.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/coherence_engine.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/config.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/contracts.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/coverage_metrics.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/builder.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/checks/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/checks/depends_on_consistency.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/checks/deployment_completeness.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/checks/edge_validity.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/checks/environment_coverage.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/checks/implementation_coverage.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/checks/node_completeness.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/checks/task_completion.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/checks/transitive_closure.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/checks/user_journey_coherence.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/coverage_axes.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/defaults/cli.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/defaults/csharp.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/defaults/elixir.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/defaults/generic.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/defaults/iot.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/defaults/java.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/defaults/kotlin.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/defaults/mobile.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/defaults/ruby.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/defaults/rust.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/defaults/scala.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/defaults/swift.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/defaults/web.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/extractor.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/dag/runner.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/defaults.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deploy_targets/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deploy_targets/app_service.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deploy_targets/base.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deploy_targets/docker_compose.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployer.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/checks/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/extractor.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/ai_command.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/llm_consideration.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/schema/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/schema/prisma.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/target/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/target/docker_compose.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/verification/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/verification/curl.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/verification/playwright.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/design_md.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/diff/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/diff/apply.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/diff/engine.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/diff/persistence.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/diff/templates/diff_prompt.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/drift.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/e2e_extractor.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/e2e_generator.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/e2e_runner.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/elicit/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/elicit/apply.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/elicit/engine.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/elicit/finding.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/elicit/formatters/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/elicit/formatters/base.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/elicit/formatters/interactive.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/elicit/formatters/json_fmt.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/elicit/formatters/md.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/elicit/lexicon_loader.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/elicit/persistence.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/env_refs.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/extract_ai.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/extractor.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/fixer.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/fixup_drift.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/fixup_drift_strategies/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/generator.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/graph.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/hitl_session.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/hooks/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/hooks/pre-commit +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/hooks/recipes/codex_hook.sh +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/implementer/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/implementer/chunked_runner.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/implementer/typecheck_loop.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/implementer.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/inheritance.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/init/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/init/lexicon_suggest.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/init/stack_detector.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/knowledge_fetcher.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/lexicon.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/lexicon_cli/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/lexicon_cli/formatters/html.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/lexicon_cli/formatters/md.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/lexicon_cli/inspector.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/lexicon_cli/manager.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/lexicon_cli/reporter.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/lexicon_cli/threshold.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/approval.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/best_practice_augmenter.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/criteria_expander.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/design_doc_extractor.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/impl_step_deriver.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/means_catalog_loader.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/parser.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/plan_deriver.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/prompt_builder.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/strategy_validator.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/templates/meta_instruction.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/templates/plan_derive_meta.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/mcp_server.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/measure.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/parsing.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/planner.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/policy.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/preflight/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/preflight/defaults/cli.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/preflight/defaults/iot.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/preflight/defaults/mobile.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/preflight/defaults/web.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/propagate.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/propagator.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/registry.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair/approval_repair.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair/engine.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair/git_patcher.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair/history.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair/llm_repair_engine.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair/loop.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair/primary_picker.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair/proof_breaks.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair/repair_result.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair/repairability_classifier.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair/schema.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair/templates/analyze_meta.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair/templates/propose_meta.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair/templates/repairability_meta.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair/verify_runner.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/repair_slice.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/require.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/require_plugins.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/require_propagate.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/required_artifacts/defaults/web.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/required_artifacts_deriver.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/requirement_completeness_auditor.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/restore.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/routes_extractor.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/scanner.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/schema_refs.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/screen_flow_validator.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/screen_transition_extractor.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/screen_transitions/defaults.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/synth.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/templates/codd.yaml.tmpl +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/templates/conventions.yaml.tmpl +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/templates/doc_links.yaml.tmpl +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/templates/extracted/system-context.md.j2 +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/templates/gitignore.tmpl +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/templates/lexicon_questions.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/templates/lexicon_schema.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/templates/overrides.yaml.tmpl +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/traceability.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/validator.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/watch/__init__.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/watch/events.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/watch/propagation_log.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/watch/propagation_pipeline.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/watch/test_runner.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/watch/watcher.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd/wiring.py +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/codd_plugins/stack_map.yaml +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/docs/cookbook/cdp_browser/README.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.0}/docs/requirements/README.md +0 -0
- {codd_dev-2.7.0 → codd_dev-2.9.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.9.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
|
|
@@ -463,6 +463,18 @@ def _format_preflight_ntfy(result: Any) -> str:
|
|
|
463
463
|
default=True,
|
|
464
464
|
help="Detect project manifests and offer lexicon plug-in suggestions.",
|
|
465
465
|
)
|
|
466
|
+
@click.option(
|
|
467
|
+
"--llm-enhanced",
|
|
468
|
+
is_flag=True,
|
|
469
|
+
default=False,
|
|
470
|
+
help="Use AI to recommend lexicons from requirements and design context.",
|
|
471
|
+
)
|
|
472
|
+
@click.option(
|
|
473
|
+
"--auto-approve",
|
|
474
|
+
is_flag=True,
|
|
475
|
+
default=False,
|
|
476
|
+
help="Apply high and medium confidence AI lexicon recommendations without prompting.",
|
|
477
|
+
)
|
|
466
478
|
def init(
|
|
467
479
|
project_name: str,
|
|
468
480
|
language: str,
|
|
@@ -470,6 +482,8 @@ def init(
|
|
|
470
482
|
requirements: str | None,
|
|
471
483
|
config_dir: str,
|
|
472
484
|
suggest_lexicons: bool,
|
|
485
|
+
llm_enhanced: bool,
|
|
486
|
+
auto_approve: bool,
|
|
473
487
|
):
|
|
474
488
|
"""Initialize CoDD in a project directory."""
|
|
475
489
|
dest_path = Path(dest).resolve()
|
|
@@ -521,10 +535,15 @@ def init(
|
|
|
521
535
|
click.echo(f" or: codd generate --wave 2 (auto-generates everything)")
|
|
522
536
|
|
|
523
537
|
if suggest_lexicons:
|
|
524
|
-
_offer_lexicon_suggestions(dest_path)
|
|
538
|
+
_offer_lexicon_suggestions(dest_path, llm_enhanced=llm_enhanced, auto_approve=auto_approve)
|
|
525
539
|
|
|
526
540
|
|
|
527
|
-
def _offer_lexicon_suggestions(
|
|
541
|
+
def _offer_lexicon_suggestions(
|
|
542
|
+
project_root: Path,
|
|
543
|
+
*,
|
|
544
|
+
llm_enhanced: bool = False,
|
|
545
|
+
auto_approve: bool = False,
|
|
546
|
+
) -> None:
|
|
528
547
|
from codd.init.lexicon_suggest import (
|
|
529
548
|
append_suggested_lexicons,
|
|
530
549
|
describe_lexicons,
|
|
@@ -533,6 +552,41 @@ def _offer_lexicon_suggestions(project_root: Path) -> None:
|
|
|
533
552
|
)
|
|
534
553
|
from codd.init.stack_detector import StackDetector
|
|
535
554
|
|
|
555
|
+
if llm_enhanced:
|
|
556
|
+
from codd.init.llm_lexicon_suggester import llm_recommend_lexicons
|
|
557
|
+
|
|
558
|
+
llm_result = llm_recommend_lexicons(project_root)
|
|
559
|
+
if llm_result.recommendations:
|
|
560
|
+
descriptions = describe_lexicons(rec.lexicon_id for rec in llm_result.recommendations)
|
|
561
|
+
click.echo("")
|
|
562
|
+
click.echo("[LLM-enhanced] Analyzing project ...")
|
|
563
|
+
click.echo("[LLM-enhanced] Detected:")
|
|
564
|
+
click.echo(f" - Data types: {_format_detected_items(llm_result.detected_data_types)}")
|
|
565
|
+
click.echo(f" - Function traits: {_format_detected_items(llm_result.detected_function_traits)}")
|
|
566
|
+
click.echo(f" - Tech stack: {_format_detected_items(llm_result.detected_tech_stack)}")
|
|
567
|
+
click.echo("")
|
|
568
|
+
click.echo("[LLM-enhanced] Recommended lexicons:")
|
|
569
|
+
for index, recommendation in enumerate(llm_result.recommendations, start=1):
|
|
570
|
+
description = descriptions.get(recommendation.lexicon_id, "")
|
|
571
|
+
suffix = f" ({description})" if description else ""
|
|
572
|
+
click.echo(
|
|
573
|
+
f" {index}. {_confidence_icon(recommendation.confidence)} "
|
|
574
|
+
f"{recommendation.lexicon_id}{suffix} [{recommendation.confidence}]"
|
|
575
|
+
)
|
|
576
|
+
if recommendation.reason:
|
|
577
|
+
click.echo(f" {recommendation.reason}")
|
|
578
|
+
|
|
579
|
+
selected = _select_llm_recommendations(llm_result, auto_approve=auto_approve)
|
|
580
|
+
if not selected:
|
|
581
|
+
click.echo("LLM-enhanced lexicons not added.")
|
|
582
|
+
return
|
|
583
|
+
path = append_suggested_lexicons(project_root, selected)
|
|
584
|
+
rel_path = path.relative_to(project_root).as_posix()
|
|
585
|
+
click.echo(f"{rel_path} updated ({len(selected)} suggested lexicons)")
|
|
586
|
+
return
|
|
587
|
+
click.echo("")
|
|
588
|
+
click.echo("[LLM-enhanced] No usable recommendation; falling back to stack-based suggestions.")
|
|
589
|
+
|
|
536
590
|
detection = StackDetector().detect(project_root)
|
|
537
591
|
if not detection.stack_hints:
|
|
538
592
|
return
|
|
@@ -559,6 +613,51 @@ def _offer_lexicon_suggestions(project_root: Path) -> None:
|
|
|
559
613
|
click.echo(f"{rel_path} updated ({len(suggestions)} suggested lexicons)")
|
|
560
614
|
|
|
561
615
|
|
|
616
|
+
def _format_detected_items(items: list[str]) -> str:
|
|
617
|
+
return ", ".join(items) if items else "none"
|
|
618
|
+
|
|
619
|
+
|
|
620
|
+
def _confidence_icon(confidence: str) -> str:
|
|
621
|
+
return {"high": "✅", "medium": "⚠️", "low": "△"}.get(confidence, "△")
|
|
622
|
+
|
|
623
|
+
|
|
624
|
+
def _select_llm_recommendations(llm_result: Any, *, auto_approve: bool) -> list[str]:
|
|
625
|
+
if auto_approve:
|
|
626
|
+
return [
|
|
627
|
+
recommendation.lexicon_id
|
|
628
|
+
for recommendation in llm_result.recommendations
|
|
629
|
+
if recommendation.confidence in {"high", "medium"}
|
|
630
|
+
]
|
|
631
|
+
|
|
632
|
+
choice = click.prompt("Apply all recommended? [Y/n/select]", default="Y", show_default=False).strip().lower()
|
|
633
|
+
if choice in {"y", "yes", ""}:
|
|
634
|
+
return [
|
|
635
|
+
recommendation.lexicon_id
|
|
636
|
+
for recommendation in llm_result.recommendations
|
|
637
|
+
if recommendation.confidence in {"high", "medium"}
|
|
638
|
+
]
|
|
639
|
+
if choice in {"n", "no"}:
|
|
640
|
+
return []
|
|
641
|
+
if choice != "select":
|
|
642
|
+
click.echo("Invalid selection; suggested lexicons not added.")
|
|
643
|
+
return []
|
|
644
|
+
|
|
645
|
+
raw_numbers = click.prompt("Select recommendation numbers", default="", show_default=False).strip()
|
|
646
|
+
selected: list[str] = []
|
|
647
|
+
for token in re.split(r"[\s,]+", raw_numbers):
|
|
648
|
+
if not token:
|
|
649
|
+
continue
|
|
650
|
+
try:
|
|
651
|
+
index = int(token)
|
|
652
|
+
except ValueError:
|
|
653
|
+
continue
|
|
654
|
+
if 1 <= index <= len(llm_result.recommendations):
|
|
655
|
+
lexicon_id = llm_result.recommendations[index - 1].lexicon_id
|
|
656
|
+
if lexicon_id not in selected:
|
|
657
|
+
selected.append(lexicon_id)
|
|
658
|
+
return selected
|
|
659
|
+
|
|
660
|
+
|
|
562
661
|
@main.group("lexicon")
|
|
563
662
|
def lexicon_cmd() -> None:
|
|
564
663
|
"""Manage bundled lexicon plug-ins."""
|
|
@@ -109,7 +109,7 @@ class CoverageAuditor:
|
|
|
109
109
|
lowered = text.lower()
|
|
110
110
|
text_terms = _terms(lowered)
|
|
111
111
|
if (
|
|
112
|
-
{"
|
|
112
|
+
{"e-learning", "elearning"} & text_terms
|
|
113
113
|
or "learning management" in lowered
|
|
114
114
|
or len(
|
|
115
115
|
{
|
|
@@ -244,7 +244,7 @@ class CoverageAuditor:
|
|
|
244
244
|
},
|
|
245
245
|
]
|
|
246
246
|
|
|
247
|
-
|
|
247
|
+
learning_platform = [
|
|
248
248
|
*base_web,
|
|
249
249
|
*self._build_auth_ui_surface_checklist(),
|
|
250
250
|
{
|
|
@@ -362,7 +362,7 @@ class CoverageAuditor:
|
|
|
362
362
|
]
|
|
363
363
|
|
|
364
364
|
checklists = {
|
|
365
|
-
"LMS/EdTech":
|
|
365
|
+
"LMS/EdTech": learning_platform,
|
|
366
366
|
"FinTech": [
|
|
367
367
|
*base_web,
|
|
368
368
|
{
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
"""LLM-backed lexicon recommendation from project context."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
import json
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import Any, Literal, Protocol
|
|
9
|
+
|
|
10
|
+
import yaml
|
|
11
|
+
|
|
12
|
+
from codd.deployment.providers.ai_command import AiCommandError, SubprocessAiCommand
|
|
13
|
+
from codd.init.lexicon_suggest import default_lexicon_root
|
|
14
|
+
from codd.init.stack_detector import StackDetector
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
Confidence = Literal["high", "medium", "low"]
|
|
18
|
+
_CONFIDENCES: set[str] = {"high", "medium", "low"}
|
|
19
|
+
_MAX_DOC_CHARS = 24_000
|
|
20
|
+
_MAX_FILE_CHARS = 4_000
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class AiCommand(Protocol):
|
|
24
|
+
def invoke(self, prompt: str, model: str | None = None) -> str:
|
|
25
|
+
"""Return an AI response for the supplied prompt."""
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@dataclass(frozen=True)
|
|
29
|
+
class LlmLexiconRecommendation:
|
|
30
|
+
lexicon_id: str
|
|
31
|
+
confidence: Confidence
|
|
32
|
+
reason: str
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@dataclass(frozen=True)
|
|
36
|
+
class LlmLexiconResult:
|
|
37
|
+
detected_data_types: list[str]
|
|
38
|
+
detected_function_traits: list[str]
|
|
39
|
+
detected_tech_stack: list[str]
|
|
40
|
+
recommendations: list[LlmLexiconRecommendation]
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def llm_recommend_lexicons(
|
|
44
|
+
project_root: Path,
|
|
45
|
+
*,
|
|
46
|
+
ai_command: AiCommand | None = None,
|
|
47
|
+
) -> LlmLexiconResult:
|
|
48
|
+
"""Recommend lexicons via AI, returning an empty result on unusable input."""
|
|
49
|
+
|
|
50
|
+
root = Path(project_root)
|
|
51
|
+
context = _collect_project_context(root)
|
|
52
|
+
if not context["requirements"]:
|
|
53
|
+
return _empty_result()
|
|
54
|
+
|
|
55
|
+
available = _available_lexicons()
|
|
56
|
+
if not available:
|
|
57
|
+
return _empty_result()
|
|
58
|
+
|
|
59
|
+
command = ai_command or SubprocessAiCommand(project_root=root)
|
|
60
|
+
prompt = _build_prompt(context, available)
|
|
61
|
+
try:
|
|
62
|
+
raw_output = command.invoke(prompt)
|
|
63
|
+
payload = json.loads(_extract_json_object(raw_output))
|
|
64
|
+
except (AiCommandError, OSError, TypeError, ValueError, json.JSONDecodeError):
|
|
65
|
+
return _empty_result()
|
|
66
|
+
return _result_from_payload(payload, set(available))
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _collect_project_context(project_root: Path) -> dict[str, Any]:
|
|
70
|
+
requirements = _read_matching_files(
|
|
71
|
+
project_root,
|
|
72
|
+
[
|
|
73
|
+
"requirements.md",
|
|
74
|
+
".codd/requirements.md",
|
|
75
|
+
"codd/requirements.md",
|
|
76
|
+
"docs/requirements.md",
|
|
77
|
+
"docs/requirements*.md",
|
|
78
|
+
"docs/requirements/**/*.md",
|
|
79
|
+
],
|
|
80
|
+
)
|
|
81
|
+
designs = _read_matching_files(
|
|
82
|
+
project_root,
|
|
83
|
+
[
|
|
84
|
+
"design/*.md",
|
|
85
|
+
".codd/design/*.md",
|
|
86
|
+
"codd/design/*.md",
|
|
87
|
+
"docs/design/*.md",
|
|
88
|
+
],
|
|
89
|
+
)
|
|
90
|
+
detection = StackDetector().detect(project_root)
|
|
91
|
+
return {
|
|
92
|
+
"requirements": requirements,
|
|
93
|
+
"designs": designs,
|
|
94
|
+
"tech_stack_hints": detection.stack_hints,
|
|
95
|
+
"detected_signals": detection.detected_signals,
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def _read_matching_files(project_root: Path, patterns: list[str]) -> list[dict[str, str]]:
|
|
100
|
+
seen: set[Path] = set()
|
|
101
|
+
files: list[dict[str, str]] = []
|
|
102
|
+
budget = _MAX_DOC_CHARS
|
|
103
|
+
for pattern in patterns:
|
|
104
|
+
for path in sorted(project_root.glob(pattern)):
|
|
105
|
+
if path in seen or not path.is_file():
|
|
106
|
+
continue
|
|
107
|
+
seen.add(path)
|
|
108
|
+
if budget <= 0:
|
|
109
|
+
return files
|
|
110
|
+
text = path.read_text(encoding="utf-8", errors="replace")[: min(_MAX_FILE_CHARS, budget)]
|
|
111
|
+
budget -= len(text)
|
|
112
|
+
files.append({"path": path.relative_to(project_root).as_posix(), "content": text})
|
|
113
|
+
return files
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def _available_lexicons() -> dict[str, str]:
|
|
117
|
+
root = default_lexicon_root()
|
|
118
|
+
available: dict[str, str] = {}
|
|
119
|
+
if not root.is_dir():
|
|
120
|
+
return available
|
|
121
|
+
for manifest in sorted(root.glob("*/manifest.yaml")):
|
|
122
|
+
try:
|
|
123
|
+
payload = yaml.safe_load(manifest.read_text(encoding="utf-8")) or {}
|
|
124
|
+
except (OSError, yaml.YAMLError):
|
|
125
|
+
continue
|
|
126
|
+
if not isinstance(payload, dict):
|
|
127
|
+
continue
|
|
128
|
+
lexicon_id = manifest.parent.name
|
|
129
|
+
if not lexicon_id:
|
|
130
|
+
continue
|
|
131
|
+
available[lexicon_id] = str(payload.get("description") or "").strip()
|
|
132
|
+
return available
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _build_prompt(context: dict[str, Any], available_lexicons: dict[str, str]) -> str:
|
|
136
|
+
payload = {
|
|
137
|
+
"available_lexicons": available_lexicons,
|
|
138
|
+
"project_context": context,
|
|
139
|
+
"required_output_schema": {
|
|
140
|
+
"detected_data_types": ["string"],
|
|
141
|
+
"detected_function_traits": ["string"],
|
|
142
|
+
"detected_tech_stack": ["string"],
|
|
143
|
+
"recommendations": [
|
|
144
|
+
{
|
|
145
|
+
"lexicon_id": "string from available_lexicons keys",
|
|
146
|
+
"confidence": "high | medium | low",
|
|
147
|
+
"reason": "short explanation referencing a data type or function trait",
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
},
|
|
151
|
+
}
|
|
152
|
+
return (
|
|
153
|
+
"You are a requirements engineer. Analyze this project's documentation and tech stack.\n"
|
|
154
|
+
"Identify:\n"
|
|
155
|
+
"- Data types handled (personal information / credit card data / medical records / "
|
|
156
|
+
"video content / etc.)\n"
|
|
157
|
+
"- Function traits present (authentication flow / payment processing / public API / "
|
|
158
|
+
"video streaming / etc.)\n"
|
|
159
|
+
"- Tech stack (frameworks, databases, cloud platforms)\n\n"
|
|
160
|
+
"Reasoning rules (apply dynamically):\n"
|
|
161
|
+
"- personal information present -> recommend data_governance_appi_gdpr (or GDPR equivalent)\n"
|
|
162
|
+
"- credit card data present -> recommend compliance_pci_dss_4\n"
|
|
163
|
+
"- medical data present -> recommend compliance_hipaa\n"
|
|
164
|
+
"- authentication flow present -> consider web_authn_webauthn\n"
|
|
165
|
+
"- public REST API present -> recommend api_rest_openapi\n"
|
|
166
|
+
"- etc.\n\n"
|
|
167
|
+
"From the available lexicons, recommend the most relevant ones with lexicon_id, "
|
|
168
|
+
"confidence (high/medium/low), and reason referencing the data type or function trait. "
|
|
169
|
+
"Return JSON only. Do not include Markdown fences or prose.\n\n"
|
|
170
|
+
f"{json.dumps(payload, ensure_ascii=False, indent=2)}"
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def _extract_json_object(raw_output: str) -> str:
|
|
175
|
+
text = raw_output.strip()
|
|
176
|
+
if text.startswith("```"):
|
|
177
|
+
lines = text.splitlines()
|
|
178
|
+
if lines and lines[0].startswith("```"):
|
|
179
|
+
lines = lines[1:]
|
|
180
|
+
if lines and lines[-1].strip() == "```":
|
|
181
|
+
lines = lines[:-1]
|
|
182
|
+
text = "\n".join(lines).strip()
|
|
183
|
+
start = text.find("{")
|
|
184
|
+
end = text.rfind("}")
|
|
185
|
+
if start == -1 or end == -1 or end < start:
|
|
186
|
+
raise ValueError("LLM output did not contain a JSON object")
|
|
187
|
+
return text[start : end + 1]
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
def _result_from_payload(payload: Any, available_ids: set[str]) -> LlmLexiconResult:
|
|
191
|
+
if not isinstance(payload, dict):
|
|
192
|
+
return _empty_result()
|
|
193
|
+
|
|
194
|
+
recommendations: list[LlmLexiconRecommendation] = []
|
|
195
|
+
seen: set[str] = set()
|
|
196
|
+
rows = payload.get("recommendations", [])
|
|
197
|
+
if isinstance(rows, list):
|
|
198
|
+
for row in rows:
|
|
199
|
+
if not isinstance(row, dict):
|
|
200
|
+
continue
|
|
201
|
+
lexicon_id = str(row.get("lexicon_id") or "").strip()
|
|
202
|
+
confidence = str(row.get("confidence") or "").strip().lower()
|
|
203
|
+
if lexicon_id not in available_ids or confidence not in _CONFIDENCES or lexicon_id in seen:
|
|
204
|
+
continue
|
|
205
|
+
seen.add(lexicon_id)
|
|
206
|
+
recommendations.append(
|
|
207
|
+
LlmLexiconRecommendation(
|
|
208
|
+
lexicon_id=lexicon_id,
|
|
209
|
+
confidence=confidence, # type: ignore[arg-type]
|
|
210
|
+
reason=str(row.get("reason") or "").strip(),
|
|
211
|
+
)
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
return LlmLexiconResult(
|
|
215
|
+
detected_data_types=_string_list(payload.get("detected_data_types")),
|
|
216
|
+
detected_function_traits=_string_list(payload.get("detected_function_traits")),
|
|
217
|
+
detected_tech_stack=_string_list(payload.get("detected_tech_stack")),
|
|
218
|
+
recommendations=recommendations,
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
def _string_list(value: Any) -> list[str]:
|
|
223
|
+
if not isinstance(value, list):
|
|
224
|
+
return []
|
|
225
|
+
return [str(item).strip() for item in value if str(item).strip()]
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
def _empty_result() -> LlmLexiconResult:
|
|
229
|
+
return LlmLexiconResult(
|
|
230
|
+
detected_data_types=[],
|
|
231
|
+
detected_function_traits=[],
|
|
232
|
+
detected_tech_stack=[],
|
|
233
|
+
recommendations=[],
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
__all__ = [
|
|
238
|
+
"AiCommand",
|
|
239
|
+
"LlmLexiconRecommendation",
|
|
240
|
+
"LlmLexiconResult",
|
|
241
|
+
"llm_recommend_lexicons",
|
|
242
|
+
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/defaults/runtime_capability_inference.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codd_dev-2.7.0 → codd_dev-2.9.0}/codd/deployment/providers/verification/assertion_handlers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|