drift-analyzer 2.1.2__tar.gz → 2.2.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.
- drift_analyzer-2.2.0/.github/AGENTS.md +81 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/DISCUSSION_TEMPLATE/ideas.yml +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/DISCUSSION_TEMPLATE/questions.yml +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/config.yml +4 -4
- drift_analyzer-2.2.0/.github/prompts/PR-Orchestrator.prompt.md +200 -0
- drift_analyzer-2.2.0/.github/prompts/README.md +82 -0
- drift_analyzer-2.2.0/.github/prompts/_partials/bewertungs-taxonomie.md +73 -0
- drift_analyzer-2.2.0/.github/prompts/_partials/issue-filing-external.md +121 -0
- drift_analyzer-2.2.0/.github/prompts/_partials/issue-filing.md +96 -0
- drift_analyzer-2.2.0/.github/prompts/_partials/konventionen.md +75 -0
- drift_analyzer-2.2.0/.github/prompts/drift-agent-ux.prompt.md +262 -0
- drift_analyzer-2.2.0/.github/prompts/drift-agent-workflow-test.prompt.md +354 -0
- drift_analyzer-2.2.0/.github/prompts/drift-ai-integration.prompt.md +282 -0
- drift_analyzer-2.2.0/.github/prompts/drift-ci-gate.prompt.md +266 -0
- drift_analyzer-2.2.0/.github/prompts/drift-onboarding.prompt.md +193 -0
- drift_analyzer-2.2.0/.github/prompts/drift-signal-quality.prompt.md +258 -0
- drift_analyzer-2.2.0/.github/prompts/field-tests/README.md +64 -0
- drift_analyzer-2.2.0/.github/prompts/field-tests/drift-context-eval.prompt.md +269 -0
- drift_analyzer-2.2.0/.github/prompts/field-tests/drift-field-test.prompt.md +257 -0
- drift_analyzer-2.2.0/.github/prompts/field-tests/drift-finding-audit.prompt.md +290 -0
- drift_analyzer-2.2.0/.github/prompts/release.prompt.md +157 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/repo-root-allowlist +1 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/ci.yml +74 -21
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/codeql.yml +2 -2
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/dependency-review.yml +2 -2
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/docs.yml +4 -6
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/labeler.yml +2 -3
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/package-kpis.yml +2 -3
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/publish.yml +9 -12
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/release.yml +11 -12
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/repo-guard.yml +2 -3
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/security-hygiene.yml +2 -3
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/stale.yml +2 -3
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/validate-release.yml +5 -7
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/welcome.yml +3 -3
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/workflow-sanity.yml +2 -3
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/CHANGELOG.md +44 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/CITATION.cff +1 -1
- drift_analyzer-2.2.0/CLAUDE.md +1 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/CONTRIBUTING.md +15 -15
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/DEVELOPER.md +3 -3
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/PKG-INFO +26 -24
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/README.md +22 -20
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/ROADMAP.md +5 -5
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/SECURITY.md +2 -2
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/SUPPORT.md +5 -5
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/action.yml +1 -1
- drift_analyzer-2.2.0/benchmarks/corpus/README.md +17 -0
- drift_analyzer-2.2.0/benchmarks/corpus/manifest.json +24 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/connectors/db.py +77 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/handler_v1.py +17 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/handler_v2.py +17 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/handlers/auth.py +21 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/handlers/orders.py +19 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/handlers/payments.py +17 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/handlers/shipping.py +9 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/models/core.py +43 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/models/enriched.py +16 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/outlier_module.py +28 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/processors/pricing.py +52 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/processors/transform.py +63 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/processors/validator.py +28 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/service_a.py +20 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/service_b.py +20 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/utils/formatting.py +15 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/utils/helpers.py +14 -0
- drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/utils/naming.py +17 -0
- drift_analyzer-2.2.0/benchmarks/corpus/tests/test_api.py +37 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/conda.recipe/meta.yaml +2 -2
- drift_analyzer-2.2.0/decisions/ADR-010-finding-context-triage-policy.md +51 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/LAUNCH_CHECKLIST.md +2 -2
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/OUTREACH.md +19 -19
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/STUDY.md +137 -4
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/distribution/awesome-submissions.md +4 -4
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/distribution/devto-hashnode-5-repos.md +2 -2
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/migration.md +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/algorithms/scoring.md +7 -7
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/algorithms/signals.md +3 -3
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/benchmarking.md +1 -1
- drift_analyzer-2.2.0/docs-site/changelog.md +3 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/comparisons/index.md +2 -2
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/contributing.md +6 -6
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/faq.md +2 -2
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/getting-started/configuration.md +41 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/getting-started/installation.md +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/getting-started/quickstart.md +2 -2
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/getting-started/team-rollout.md +2 -2
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/getting-started/troubleshooting.md +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/index.md +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/integrations.md +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/product/press-brand.md +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/reference/api-outputs.md +5 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/start-here.md +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/study.md +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/trust-evidence.md +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/use-cases/ci-architecture-checks-sarif.md +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/use-cases/index.md +2 -2
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/drift.example.yaml +24 -2
- drift_analyzer-2.2.0/examples/demo-project/api/__init__.py +0 -0
- drift_analyzer-2.2.0/examples/demo-project/db/__init__.py +0 -0
- drift_analyzer-2.2.0/examples/demo-project/services/__init__.py +0 -0
- drift_analyzer-2.2.0/examples/demo-project/utils/__init__.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/drift-check.yml +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/vibe-coding/drift-gate.yml +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/llms.txt +4 -4
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/mkdocs.yml +2 -2
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/overrides/main.html +2 -2
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/pyproject.toml +5 -4
- drift_analyzer-2.2.0/src/drift/analyzers/typescript/_path_utils.py +13 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/analyzers/typescript/alias_resolver.py +5 -4
- drift_analyzer-2.2.0/src/drift/analyzers/typescript/shared.py +34 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/analyzers/typescript/workspace_boundaries.py +7 -9
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/api.py +159 -8
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/api_helpers.py +28 -4
- drift_analyzer-2.2.0/src/drift/commands/_io.py +18 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/analyze.py +56 -9
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/badge.py +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/check.py +5 -4
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/copilot_context.py +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/diff_cmd.py +1 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/explain.py +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/export_context.py +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/fix_plan.py +9 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/init_cmd.py +9 -2
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/mcp.py +19 -4
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/patterns.py +1 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/scan.py +50 -3
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/self_analyze.py +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/config.py +41 -4
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/copilot_context.py +15 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/errors.py +1 -1
- drift_analyzer-2.2.0/src/drift/finding_context.py +164 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/mcp_server.py +288 -48
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/negative_context.py +160 -27
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/negative_context_export.py +13 -5
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/output/json_output.py +28 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/output/rich_output.py +15 -3
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/pipeline.py +11 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/profiles.py +3 -3
- drift_analyzer-2.2.0/src/drift/py.typed +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/recommendations.py +28 -8
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/_utils.py +42 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/architecture_violation.py +35 -3
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/dead_code_accumulation.py +9 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/doc_impl_drift.py +22 -3
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/naming_contract_violation.py +5 -0
- drift_analyzer-2.2.0/tests/__init__.py +0 -0
- drift_analyzer-2.2.0/tests/fixtures/__init__.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_agent_native_cli.py +16 -2
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_avs_mutations.py +30 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_cli_runtime.py +41 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_compat.py +4 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_config.py +4 -2
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_dead_code_accumulation.py +23 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_dia_enhanced.py +25 -0
- drift_analyzer-2.2.0/tests/test_finding_context.py +130 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_init_cmd.py +1 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_json_output.py +6 -2
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_mcp_copilot.py +80 -0
- drift_analyzer-2.2.0/tests/test_mcp_hardening.py +84 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_naming_contract_violation.py +21 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_negative_context.py +50 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_negative_context_export.py +75 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_output_golden.py +13 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_recommendations_edge_cases.py +17 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_scan_diversity.py +125 -1
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_telemetry.py +1 -0
- drift_analyzer-2.2.0/tests/test_workspace_value.py +214 -0
- drift_analyzer-2.1.2/.github/AGENTS.md +0 -53
- drift_analyzer-2.1.2/.github/prompts/PR-Orchestrator.prompt.md +0 -235
- drift_analyzer-2.1.2/.github/prompts/drift-agent-ux.prompt.md +0 -306
- drift_analyzer-2.1.2/.github/prompts/drift-agent-workflow-test.prompt.md +0 -619
- drift_analyzer-2.1.2/.github/prompts/drift-ai-integration.prompt.md +0 -313
- drift_analyzer-2.1.2/.github/prompts/drift-ci-gate.prompt.md +0 -301
- drift_analyzer-2.1.2/.github/prompts/drift-onboarding.prompt.md +0 -208
- drift_analyzer-2.1.2/.github/prompts/drift-signal-quality.prompt.md +0 -306
- drift_analyzer-2.1.2/.github/prompts/release.prompt.md +0 -211
- drift_analyzer-2.1.2/CLAUDE.md +0 -1
- drift_analyzer-2.1.2/docs-site/changelog.md +0 -3
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.detect-secrets.cfg +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.devcontainer/devcontainer.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.githooks/commit-msg +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.githooks/pre-commit +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.githooks/pre-push +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/CODEOWNERS +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/FUNDING.yml +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/contribution_proposal.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/false_positive.yml +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/good_first_issue.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/study_finding_rating.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/study_repo_benchmark.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/study_self_analysis.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/copilot-instructions.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/dependabot.yml +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/instructions/drift-policy.instructions.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/instructions/drift-push-gates.instructions.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/instructions/drift-release-automation.instructions.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/instructions/drift-release-mandatory.instructions.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/labeler.yml +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/labels.yml +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/repo-guard.blocklist +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/skills/drift-pr-review/SKILL.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/skills/drift-release/SKILL.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/skills/drift-security-triage/SKILL.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/README.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/install-smoke.yml +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.gitignore +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.markdownlint-cli2.jsonc +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.pre-commit-config.yaml +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.pre-commit-hooks.yaml +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.secrets.baseline +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.shellcheckrc +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.vscode/mcp.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.vscode/settings.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.vscode/tasks.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/CODE_OF_CONDUCT.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/LICENSE +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/Makefile +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/POLICY.md +0 -0
- {drift_analyzer-2.1.2/examples/demo-project/api → drift_analyzer-2.2.0/benchmarks/corpus/src/myapp}/__init__.py +0 -0
- {drift_analyzer-2.1.2/examples/demo-project/db → drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/connectors}/__init__.py +0 -0
- {drift_analyzer-2.1.2/examples/demo-project/services → drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/handlers}/__init__.py +0 -0
- {drift_analyzer-2.1.2/examples/demo-project/utils → drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/models}/__init__.py +0 -0
- {drift_analyzer-2.1.2/tests → drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/processors}/__init__.py +0 -0
- {drift_analyzer-2.1.2/tests/fixtures → drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/utils}/__init__.py +0 -0
- /drift_analyzer-2.1.2/src/drift/py.typed → /drift_analyzer-2.2.0/benchmarks/corpus/tests/__init__.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/decisions/templates/README.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/decisions/templates/adr-template.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/decisions/templates/signal-design-template.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/EPISTEMICS.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/PRODUCT_STRATEGY.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/ROOT_POLICY.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/adr/001-deterministic-analysis-pipeline.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/adr/002-ast-fingerprinting-for-patterns.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/adr/003-composite-scoring-model.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/adr/004-subprocess-git-parsing.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/adr/005-delta-first-score-interpretation.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/adr/006-context-tagging.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/adr/007-consistency-proxy-signals.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/adr/008-intention-contract-proxy-signals.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/distribution/README.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/distribution/ide-discovery-mvp-spec.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/distribution/week1-rollout-runbook.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/drift-architecture-erosion-analysis.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/go-mvp-scope.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/language-roadmap.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/language-support-matrix.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/python-baseline.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/python-rule-inventory.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/tsjs-mvp-scope.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/algorithms/deep-dive.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/assets/logo.svg +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/case-studies/django.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/case-studies/fastapi.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/case-studies/index.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/case-studies/pydantic.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/comparisons/drift-vs-architecture-conformance.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/comparisons/drift-vs-ruff.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/comparisons/drift-vs-semgrep-codeql.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/getting-started/finding-triage.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/glossary.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/product/example-findings.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/product-strategy.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/reference/negative-context.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/reference/performance.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/stability.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/use-cases/architectural-linter-ai-teams.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/use-cases/architecture-drift-python.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/use-cases/technical-debt-ai-codebases.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/demo-project/README.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/demo-project/api/routes.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/demo-project/db/models.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/demo-project/services/email_service.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/demo-project/services/order_service.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/demo-project/services/user_service.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/demo-project/utils/validators.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/demo_fastapi.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/package-kpis/README.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/package-kpis/defects.csv +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/package-kpis/kpi-thresholds.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/package-kpis/usage.csv +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/vibe-coding/README.md +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/vibe-coding/drift.yaml +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/vibe-coding/mcp.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/vibe-coding/pre-push +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/vibe-coding/setup-baseline.sh +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/vibe-coding/weekly-check.sh +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/overrides/home.html +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/__init__.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/__main__.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/analyzer.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/analyzers/typescript/__init__.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/analyzers/typescript/barrel_resolver.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/analyzers/typescript/import_graph.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/baseline.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/cache.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/cli.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/__init__.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/baseline.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/config_cmd.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/timeline.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/trend.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/validate_cmd.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/context_tags.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/embeddings.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/incremental.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/ingestion/__init__.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/ingestion/ast_parser.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/ingestion/file_discovery.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/ingestion/git_history.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/ingestion/ts_parser.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/models.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/output/__init__.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/output/agent_tasks.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/output/github_format.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/rules/tsjs/circular_module_detection.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/rules/tsjs/cross_package_import_ban.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/rules/tsjs/layer_leak_detection.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/rules/tsjs/ui_to_infra_import_ban.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/scoring/__init__.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/scoring/engine.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/__init__.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/base.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/broad_exception_monoculture.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/bypass_accumulation.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/circular_import.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/co_change_coupling.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/cognitive_complexity.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/cohesion_deficit.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/exception_contract_drift.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/explainability_deficit.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/fan_out_explosion.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/guard_clause_deficit.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/hardcoded_secret.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/insecure_default.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/missing_authorization.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/mutant_duplicates.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/pattern_fragmentation.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/system_misalignment.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/temporal_volatility.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/test_polarity_deficit.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/ts_architecture.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/suppression.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/telemetry.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/timeline.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/trend_history.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/conftest.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/ground_truth.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/study_samples/debt_correlation.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/study_samples/rater_matrix.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/study_samples/self_analysis_reports.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution/src/app.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution/src/core/logger.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution/src/shared/config.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution/tsconfig.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/src/app.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/src/base/logger.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/src/leaf/feature.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/src/mid/util.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/src/override/config.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/src/shared/config.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/tsconfig.base.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/tsconfig.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/tsconfig.mid.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_barrel_resolution/src/app.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_barrel_resolution/src/app_tsx.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_barrel_resolution/src/button.tsx +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_barrel_resolution/src/index.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_barrel_resolution/src/view/card.tsx +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_barrel_resolution/src/view/index.tsx +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_graph_relative/app.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_graph_relative/components/button.tsx +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_graph_relative/components/index.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_graph_relative/lib/util.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cross_package/negative/cross_package_import_ban.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cross_package/negative/package.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cross_package/negative/packages/app/src/main.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cross_package/negative/packages/ui/src/button.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cross_package/positive/cross_package_import_ban.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cross_package/positive/package.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cross_package/positive/packages/app/src/main.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cross_package/positive/packages/ui/src/button.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cycles/negative/src/a.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cycles/negative/src/b.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cycles/positive/src/a.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cycles/positive/src/b.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_layer_leak/negative/layer_leak_detection.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_layer_leak/negative/src/infra/storage.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_layer_leak/negative/src/ui/view.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_layer_leak/positive/layer_leak_detection.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_layer_leak/positive/src/infra/storage.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_layer_leak/positive/src/ui/view.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_ui_to_infra/negative/src/infra/storage.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_ui_to_infra/negative/src/ui/components/button.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_ui_to_infra/negative/src/ui/view.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_ui_to_infra/negative/ui_to_infra_import_ban.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_ui_to_infra/positive/src/infra/storage.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_ui_to_infra/positive/src/ui/view.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_ui_to_infra/positive/ui_to_infra_import_ban.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_workspace_boundaries/package.json +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_workspace_boundaries/packages/app/src/main.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_workspace_boundaries/packages/ui/src/button.tsx +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_workspace_boundaries/vite.config.ts +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_ablation.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_agent_tasks.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_ai_tool_indicators.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_analysis_degradation.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_architecture_violation.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_ast_parser.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_avs_enhanced.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_avs_missing_patterns_evidence.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_badge_command.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_baseline.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_benchmark_label_keys.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_benchmark_structure.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_bypass_accumulation.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_cache_resilience.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_ci_reality.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_circular_import.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_co_change_coupling.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_cognitive_complexity.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_cohesion_deficit.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_config_validate.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_consistency_proxies.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_console_scripts.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_context_tags.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_copilot_context_coverage.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_delta_first.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_dx_features.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_embeddings.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_enterprise_governance_assets.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_exception_contract_drift.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_fan_out_explosion.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_fetch_github_usage.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_fetch_pypistats.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_file_discovery.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_fix_actionability.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_git_history_edge_cases.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_git_history_safety.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_guard_clause_deficit.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_hardcoded_secret.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_incremental.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_insecure_default.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_integration.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_mirofish_signal_improvements.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_missing_authorization.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_model_consistency.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_module_entrypoint.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_mutant_duplicates_edge_cases.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_nudge.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_output_minimal_and_signal_labels.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_package_kpis.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_path_overrides.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_pattern_fragmentation.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_pipeline_components.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_precision_recall.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_property_based.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_recommendations.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_release_automation.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_release_discipline.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_repo_hygiene.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_rule_ids.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_sarif_contract.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_scoring.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_scoring_edge_cases.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_self_command.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_signal_contract.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_signal_utils.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_smoke_real_repos.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_study_infrastructure.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_suppression.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_test_polarity_deficit.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_timeline.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_trend_chart.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_trend_command_history.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_ts_signals_phase2.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_ts_signals_phase3.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_tsjs_alias_resolution.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_tsjs_barrel_resolution.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_tsjs_import_graph_relative.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_tsjs_rule_circular_module_detection.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_tsjs_rule_cross_package_import_ban.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_tsjs_rule_layer_leak_detection.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_tsjs_rule_ui_to_infra_import_ban.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_tsjs_workspace_boundaries.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_typescript_parser.py +0 -0
- {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/uv.lock +0 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Agents, Skills und Evaluation-Prompts im Drift-Workspace
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Drift Agents & Prompts
|
|
6
|
+
|
|
7
|
+
## Release Agent
|
|
8
|
+
|
|
9
|
+
**Quick Release** — Nach Code-Änderungen an `src/drift/` den vollständigen Release-Workflow ausführen.
|
|
10
|
+
|
|
11
|
+
### Verwendung
|
|
12
|
+
|
|
13
|
+
Im Chat erwähnen: „Release version", „Create release", „Publish to PyPI".
|
|
14
|
+
|
|
15
|
+
Der Agent: Validiert → Version berechnet → CHANGELOG + pyproject.toml → Commit + Tag → Push → PyPI.
|
|
16
|
+
|
|
17
|
+
> **Hinweis:** Releases werden automatisch via python-semantic-release in CI verwaltet.
|
|
18
|
+
> Lokaler Fallback nur bei CI-Ausfall: `python scripts/release_automation.py --full-release`
|
|
19
|
+
|
|
20
|
+
### Wann verwenden
|
|
21
|
+
|
|
22
|
+
- Nach `feat:`, `fix:` oder `BREAKING:`-Commits auf `src/drift/`
|
|
23
|
+
- Wenn Tests bestehen und Code committed ist
|
|
24
|
+
- Nicht bei unfertiger Arbeit oder fehlschlagenden Tests
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Evaluation-Prompts
|
|
29
|
+
|
|
30
|
+
Prompts unter `.github/prompts/` evaluieren die Drift-CLI aus verschiedenen Perspektiven.
|
|
31
|
+
Navigations-Guide: `.github/prompts/README.md`
|
|
32
|
+
|
|
33
|
+
| Prompt | Zweck | Empfohlene Reihenfolge |
|
|
34
|
+
|--------|-------|------------------------|
|
|
35
|
+
| `drift-onboarding` | First-Use-Erfahrung (Zero-Knowledge) | 1 |
|
|
36
|
+
| `drift-agent-workflow-test` | Vollständiger CLI-Pfadtest | 2 |
|
|
37
|
+
| `drift-signal-quality` | Signal-Precision/Recall messen | 3 |
|
|
38
|
+
| `drift-ci-gate` | CI-Integration validieren | 4 |
|
|
39
|
+
| `drift-ai-integration` | LLM-Context-Qualität bewerten | 5 |
|
|
40
|
+
| `drift-agent-ux` | Agent-UX-Audit (Auffindbarkeit, Latenz, Fehler) | 6 |
|
|
41
|
+
| `PR-Orchestrator` | PR-Bewertung aus Agent-Perspektive | nach Bedarf |
|
|
42
|
+
| `release` | Release-Workflow validieren | nach Bedarf |
|
|
43
|
+
|
|
44
|
+
### Shared Components
|
|
45
|
+
|
|
46
|
+
| Datei | Zweck |
|
|
47
|
+
|-------|-------|
|
|
48
|
+
| `_partials/bewertungs-taxonomie.md` | Einheitliche Bewertungs-Labels |
|
|
49
|
+
| `_partials/konventionen.md` | Gemeinsame Konventionen (Policy Gate, Pfade, Sandbox) |
|
|
50
|
+
| `_partials/issue-filing.md` | Issue-Filing-Template (interne Prompts) |
|
|
51
|
+
| `_partials/issue-filing-external.md` | Issue-Filing-Template (Field-Tests, Cross-Repo) |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Field-Test-Prompts (externe Repos)
|
|
56
|
+
|
|
57
|
+
Prompts unter `.github/prompts/field-tests/` testen drift in **beliebigen Repositories**.
|
|
58
|
+
Issues gehen an `mick-gsk/drift`. Details: `.github/prompts/field-tests/README.md`
|
|
59
|
+
|
|
60
|
+
| Prompt | Zweck | Empfohlene Reihenfolge |
|
|
61
|
+
|--------|-------|------------------------|
|
|
62
|
+
| `drift-field-test` | Smoke-Test: Funktioniert drift? | 1 |
|
|
63
|
+
| `drift-finding-audit` | Tiefenprüfung: Findings korrekt? | 2 |
|
|
64
|
+
| `drift-context-eval` | Kontext-Qualität für AI-Workflows | 3 |
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Skills
|
|
69
|
+
|
|
70
|
+
- **`drift-release`** — Vollständiger Release-Workflow
|
|
71
|
+
- **`drift-pr-review`** — PR-Review gemäß Drift Policy
|
|
72
|
+
- **`drift-security-triage`** — Security-Report-Triage
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Dokumentation
|
|
77
|
+
|
|
78
|
+
- **Release Skill:** `.github/skills/drift-release/SKILL.md`
|
|
79
|
+
- **Release Instructions:** `.github/instructions/drift-release-automation.instructions.md`
|
|
80
|
+
- **Policy:** `.github/instructions/drift-policy.instructions.md`
|
|
81
|
+
- **Push Gates:** `.github/instructions/drift-push-gates.instructions.md`
|
|
@@ -5,7 +5,7 @@ body:
|
|
|
5
5
|
attributes:
|
|
6
6
|
value: |
|
|
7
7
|
Share an idea or brainstorm about drift's future direction.
|
|
8
|
-
For concrete feature requests, please use the [issue template](https://github.com/
|
|
8
|
+
For concrete feature requests, please use the [issue template](https://github.com/mick-gsk/drift/issues/new/choose) instead.
|
|
9
9
|
|
|
10
10
|
- type: textarea
|
|
11
11
|
id: idea
|
|
@@ -6,7 +6,7 @@ body:
|
|
|
6
6
|
value: |
|
|
7
7
|
**Before posting**, please check:
|
|
8
8
|
- [Documentation](https://sauremilk.github.io/drift/)
|
|
9
|
-
- [Existing discussions](https://github.com/
|
|
9
|
+
- [Existing discussions](https://github.com/mick-gsk/drift/discussions)
|
|
10
10
|
|
|
11
11
|
- type: textarea
|
|
12
12
|
id: question
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
blank_issues_enabled: false
|
|
2
2
|
contact_links:
|
|
3
3
|
- name: Community studies — participate in drift research
|
|
4
|
-
url: https://github.com/
|
|
4
|
+
url: https://github.com/mick-gsk/drift/blob/main/CONTRIBUTING.md#participate-in-community-studies
|
|
5
5
|
about: Help validate drift's signals by running analyses, rating findings, or benchmarking repos.
|
|
6
6
|
- name: Support and channel guide
|
|
7
|
-
url: https://github.com/
|
|
7
|
+
url: https://github.com/mick-gsk/drift/blob/main/SUPPORT.md
|
|
8
8
|
about: Use SUPPORT.md to pick the right channel for questions, bugs, ideas, and security.
|
|
9
9
|
- name: Questions and usage help
|
|
10
|
-
url: https://github.com/
|
|
10
|
+
url: https://github.com/mick-gsk/drift/discussions
|
|
11
11
|
about: Please ask and answer general questions in Discussions.
|
|
12
12
|
- name: Documentation
|
|
13
13
|
url: https://sauremilk.github.io/drift/
|
|
14
14
|
about: Check the docs site for setup, configuration, and examples.
|
|
15
15
|
- name: Security report
|
|
16
|
-
url: https://github.com/
|
|
16
|
+
url: https://github.com/mick-gsk/drift/security/policy
|
|
17
17
|
about: Please report security vulnerabilities via the Security Policy page.
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "PR Orchestrator"
|
|
3
|
+
description: "Bewertet Pull Requests risikobasiert und liefert eine klare Maintainer-Entscheidung (APPROVE/COMMENT/REQUEST_CHANGES/WAIT/MERGE) mit konkreten Next Actions."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# PR Orchestrator
|
|
7
|
+
|
|
8
|
+
Du bist mein PR-Merge-Orchestrator für mein GitHub-Repository.
|
|
9
|
+
|
|
10
|
+
> **Pflicht:** Vor Ausführung dieses Prompts das Drift Policy Gate durchlaufen
|
|
11
|
+
> (siehe `.github/prompts/_partials/konventionen.md` und `.github/instructions/drift-policy.instructions.md`).
|
|
12
|
+
|
|
13
|
+
## Relevante Referenzen
|
|
14
|
+
|
|
15
|
+
- **Skill:** `.github/skills/drift-pr-review/SKILL.md` (systematische PR-Review-Checklist)
|
|
16
|
+
- **Instruction:** `.github/instructions/drift-policy.instructions.md`
|
|
17
|
+
- **Bewertungssystem:** `.github/prompts/_partials/bewertungs-taxonomie.md`
|
|
18
|
+
- **Issue-Filing:** `.github/prompts/_partials/issue-filing.md`
|
|
19
|
+
|
|
20
|
+
## Kontext
|
|
21
|
+
|
|
22
|
+
- Ich bin Solo-Developer.
|
|
23
|
+
- Ich bevorzuge pragmatische, schnelle Entscheidungen statt bürokratischer Review-Prozesse.
|
|
24
|
+
- Externe Contributions sollen sauber geprüft werden, aber mit möglichst wenig Overhead.
|
|
25
|
+
- Ziel ist: Risiko minimieren, Contribution-Wahrscheinlichkeit erhöhen, Main-Branch stabil halten.
|
|
26
|
+
- Standard: keine unnötigen Diskussionen, keine generischen Floskeln, keine Halluzinationen.
|
|
27
|
+
- Wenn Informationen fehlen, markiere Annahmen explizit.
|
|
28
|
+
- Antworte auf Deutsch.
|
|
29
|
+
- Schreibe präzise, technisch, strukturiert und entscheidungsorientiert.
|
|
30
|
+
|
|
31
|
+
## Arbeitsmodus
|
|
32
|
+
|
|
33
|
+
- Trenne strikt zwischen beobachtetem Diff, belastbarer Schlussfolgerung und offener Annahme.
|
|
34
|
+
- Vergleiche mögliche Interpretationen, bevor du einen PR als riskant oder sicher einordnest.
|
|
35
|
+
- Verdichte große Diffs in entscheidungsrelevante Kernaussagen statt sie breit nachzuerzählen.
|
|
36
|
+
- Benenne immer die kleinste zusätzliche Evidenz, die eine unsichere Entscheidung absichern würde.
|
|
37
|
+
- Wenn mehrere Review-Pfade möglich sind, priorisiere den mit dem höchsten Risikonutzen zuerst.
|
|
38
|
+
|
|
39
|
+
## Primäre Ziele
|
|
40
|
+
|
|
41
|
+
1. Verstehen, was der PR fachlich und technisch ändert.
|
|
42
|
+
2. Risiko, Scope und Merge-Reife bewerten.
|
|
43
|
+
3. Test- und Validierungsbedarf bestimmen.
|
|
44
|
+
4. Konkretes Review-Feedback formulieren.
|
|
45
|
+
5. Am Ende genau eine Empfehlung geben: APPROVE / COMMENT / REQUEST_CHANGES / WAIT / MERGE
|
|
46
|
+
|
|
47
|
+
## Arbeitsprinzipien
|
|
48
|
+
|
|
49
|
+
- Draft-PRs sind standardmäßig nicht merge-bereit.
|
|
50
|
+
- Kleine, testgedeckte, klar begrenzte Änderungen bevorzugen.
|
|
51
|
+
- Business-Logik, Architektur, API-Verhalten und Regressionen höher gewichten als Stilfragen.
|
|
52
|
+
- Stil-/Nitpick-Themen nur nennen, wenn sie wirklich relevant sind.
|
|
53
|
+
- Niemals Code als korrekt annehmen, nur weil Tests existieren.
|
|
54
|
+
- Niemals Fehler behaupten, wenn du dafür keinen klaren Beleg hast.
|
|
55
|
+
- Wenn ein PR aus einem Fork kommt, prüfe besonders: Vertrauensniveau, Scope-Begrenzung, unerwartete Dateien, versteckte Seiteneffekte, Testabdeckung.
|
|
56
|
+
- Wenn Maintainer-Aktionen nötig sind, benenne sie explizit.
|
|
57
|
+
|
|
58
|
+
## Bewertungs-Labels
|
|
59
|
+
|
|
60
|
+
Verwende für Risikodimensionen die Labels aus `.github/prompts/_partials/bewertungs-taxonomie.md`:
|
|
61
|
+
|
|
62
|
+
| Level | Bedeutung |
|
|
63
|
+
|-------|-----------|
|
|
64
|
+
| `low` | Minimaler Einfluss, kein zusätzlicher Review nötig |
|
|
65
|
+
| `medium` | Spürbarer Einfluss, gezielte Prüfung empfohlen |
|
|
66
|
+
| `high` | Erheblicher Einfluss, Validierung vor Merge Pflicht |
|
|
67
|
+
| `critical` | Blocker — Merge nicht möglich ohne Korrektur |
|
|
68
|
+
|
|
69
|
+
## Arbeitsablauf
|
|
70
|
+
|
|
71
|
+
### PHASE 1 — Intake
|
|
72
|
+
|
|
73
|
+
Erfasse:
|
|
74
|
+
- PR-Nummer, Titel, Autor
|
|
75
|
+
- Draft oder Ready
|
|
76
|
+
- Base-Branch, Head-Branch/Fork
|
|
77
|
+
- Kurzbeschreibung des Ziels
|
|
78
|
+
- Betroffene Dateien
|
|
79
|
+
- Größe und Art der Änderung: docs / tests / bugfix / refactor / feature / infra
|
|
80
|
+
|
|
81
|
+
### PHASE 2 — Change-Verständnis
|
|
82
|
+
|
|
83
|
+
Lies Diff und PR-Beschreibung und beantworte:
|
|
84
|
+
- Welches Problem wird gelöst?
|
|
85
|
+
- Was ändert sich im Laufzeitverhalten?
|
|
86
|
+
- Was ändert sich nur an Tests oder Doku?
|
|
87
|
+
- Welche impliziten Annahmen stecken in der Änderung?
|
|
88
|
+
- Ist die Änderung eng geschnitten oder vermischt sie mehrere Themen?
|
|
89
|
+
|
|
90
|
+
### PHASE 3 — Risikobewertung
|
|
91
|
+
|
|
92
|
+
Bewerte in diesen Dimensionen:
|
|
93
|
+
|
|
94
|
+
| Dimension | Beschreibung |
|
|
95
|
+
|-----------|--------------|
|
|
96
|
+
| Korrektheit | Ist die Logik richtig? |
|
|
97
|
+
| Regression | Kann existierendes Verhalten brechen? |
|
|
98
|
+
| Architektur | Passt die Änderung zur bestehenden Struktur? |
|
|
99
|
+
| Sicherheit/Supply-Chain | Gibt es externe Dependencies, unsichere Inputs, oder verdächtige Patterns? |
|
|
100
|
+
| Wartbarkeit | Erhöht die Änderung technische Schulden? |
|
|
101
|
+
| Contributor | Vertrauen, Scope-Begrenzung, unerwartete Dateien |
|
|
102
|
+
|
|
103
|
+
Ordne je Dimension ein: `low` / `medium` / `high` / `critical`.
|
|
104
|
+
Nenne zu jeder Einstufung genau den Auslöser.
|
|
105
|
+
|
|
106
|
+
**Risiko-Aggregation:** Das Gesamturteil entspricht dem **höchsten Einzelrisiko** (Worst-Case-Prinzip). Bei mehreren `medium`-Werten ohne `high`/`critical` kann das Gesamtrisiko auf `medium` bleiben; bei ≥2 `high`-Werten ist das Gesamtrisiko obligatorisch `critical`.
|
|
107
|
+
|
|
108
|
+
### PHASE 4 — Validierung
|
|
109
|
+
|
|
110
|
+
Prüfe:
|
|
111
|
+
- Gibt es bestehende oder neue Tests?
|
|
112
|
+
- Decken die Tests den eigentlichen Verhaltensänderungsraum ab?
|
|
113
|
+
- Fehlen Gegenbeispiele, Randfälle oder Negativtests?
|
|
114
|
+
- Müssen Linting, Typchecks, Unit-Tests oder Integrationstests ausgeführt werden?
|
|
115
|
+
- Reicht die vorhandene Evidenz für Merge-Reife?
|
|
116
|
+
|
|
117
|
+
Wenn konkrete Testkommandos sinnvoll sind, gib sie als ausführbare Liste aus.
|
|
118
|
+
Wenn keine Ausführung möglich ist, formuliere klar: „empfohlene lokale Validierung".
|
|
119
|
+
|
|
120
|
+
### PHASE 5 — Review-Entscheidung
|
|
121
|
+
|
|
122
|
+
Entscheidungsregeln (**in Prioritätsreihenfolge** — erste zutreffende Regel gewinnt):
|
|
123
|
+
|
|
124
|
+
1. **WAIT** wenn: PR ist Draft ODER zentrale Informationen fehlen ODER CI/Teststatus unbekannt bei nicht-trivialem PR
|
|
125
|
+
2. **REQUEST_CHANGES** wenn: klarer fachlicher Fehler ODER unzureichende Testabdeckung bei relevantem Verhaltensrisiko ODER Scope unsauber/riskant
|
|
126
|
+
3. **COMMENT** wenn: frühe Fragen, kleinere Unsicherheiten oder Verbesserungsvorschläge ohne Blocker
|
|
127
|
+
4. **APPROVE** wenn: PR review-ready, Scope klar, Risiko ≤ medium, Evidenz ausreichend
|
|
128
|
+
5. **MERGE** wenn: review-ready, keine offenen Blocker, Validierung ausreichend, Risiko ≤ low, Maintainer-Sicht konsistent
|
|
129
|
+
|
|
130
|
+
### PHASE 6 — Ausgabestruktur
|
|
131
|
+
|
|
132
|
+
Liefere immer in genau diesem Format:
|
|
133
|
+
|
|
134
|
+
```markdown
|
|
135
|
+
# PR-Entscheidung
|
|
136
|
+
<eine von: APPROVE / COMMENT / REQUEST_CHANGES / WAIT / MERGE>
|
|
137
|
+
|
|
138
|
+
## Kurzurteil
|
|
139
|
+
2–4 Sätze mit der Kernaussage.
|
|
140
|
+
|
|
141
|
+
## Einordnung
|
|
142
|
+
- Typ:
|
|
143
|
+
- Scope:
|
|
144
|
+
- Reifegrad:
|
|
145
|
+
- Risiko gesamt:
|
|
146
|
+
- Merge-Bereitschaft:
|
|
147
|
+
|
|
148
|
+
## Was geändert wird
|
|
149
|
+
- ...
|
|
150
|
+
|
|
151
|
+
## Risiken
|
|
152
|
+
| Dimension | Level | Begründung |
|
|
153
|
+
|-----------|-------|------------|
|
|
154
|
+
| Korrektheit | ... | ... |
|
|
155
|
+
| Regression | ... | ... |
|
|
156
|
+
| Architektur | ... | ... |
|
|
157
|
+
| Sicherheit | ... | ... |
|
|
158
|
+
| Wartbarkeit | ... | ... |
|
|
159
|
+
| Contributor | ... | ... |
|
|
160
|
+
|
|
161
|
+
## Validierung
|
|
162
|
+
- Vorhandene Evidenz:
|
|
163
|
+
- Fehlende Evidenz:
|
|
164
|
+
- Empfohlene Checks:
|
|
165
|
+
- Merge ohne weitere Prüfung: ja/nein + Begründung
|
|
166
|
+
|
|
167
|
+
## Review-Kommentar
|
|
168
|
+
[GitHub-tauglicher Kommentar — respektvoll, knapp, konkret, contributor-freundlich.
|
|
169
|
+
Keine generischen Lobfloskeln. Bei Draft: klar sagen, dass nach Ready-for-Review final entschieden wird.]
|
|
170
|
+
|
|
171
|
+
## Maintainer-Aktion
|
|
172
|
+
[Genau eine Aktion: „jetzt kommentieren" / „lokal testen" / „auf Ready for review warten" / „approve und mergen" / „changes anfordern"]
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Zusatzregeln
|
|
176
|
+
|
|
177
|
+
- Wenn ein PR nur Tests ergänzt, prüfe trotzdem, ob die Tests die richtige Semantik absichern.
|
|
178
|
+
- Wenn Codepfade stillschweigend Ausnahmen/Findings unterdrücken, prüfe auf False-Negative-Risiko.
|
|
179
|
+
- Wenn Edge-Case-Handling hinzugefügt wird, verlange Klarheit darüber, warum die Grenze korrekt ist.
|
|
180
|
+
- Wenn README-/ADR-/Dokumentationsregeln abgeschwächt werden, prüfe, ob das Produktziel verwässert wird.
|
|
181
|
+
- Bei kleinen externen PRs: schneller, präziser Kommentar statt überformalisierter Prozess.
|
|
182
|
+
- Wenn die Änderung sinnvoll wirkt, aber der PR noch Draft ist, entscheide WAIT mit kurzem positivem Kommentar.
|
|
183
|
+
|
|
184
|
+
## GitHub-Issue-Erstellung
|
|
185
|
+
|
|
186
|
+
Am Ende des Workflows GitHub-Issues erstellen gemäß `.github/prompts/_partials/issue-filing.md`.
|
|
187
|
+
|
|
188
|
+
**Prompt-Kürzel für Titel:** `pr-review`
|
|
189
|
+
|
|
190
|
+
### Issues erstellen für
|
|
191
|
+
|
|
192
|
+
- Echte Produktfehler oder riskante Architekturprobleme, die über den konkreten PR hinausgehen
|
|
193
|
+
- Wiederkehrende Test-, CI-, Dokumentations- oder Release-Lücken
|
|
194
|
+
- Maintainer- oder Contributor-UX-Probleme, die in zukünftigen PRs erneut auftreten werden
|
|
195
|
+
|
|
196
|
+
### Keine Issues erstellen für
|
|
197
|
+
|
|
198
|
+
- Reine Einzelfall-Hinweise, die vollständig im PR-Kommentar gelöst sind
|
|
199
|
+
- Lokale Umgebungsprobleme ohne Repo-Bezug
|
|
200
|
+
- Duplikate bereits existierender Issues
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Drift Prompt-Bibliothek
|
|
2
|
+
|
|
3
|
+
> Übersicht aller Evaluierungs- und Workflow-Prompts im Drift-Workspace.
|
|
4
|
+
|
|
5
|
+
## Schnellübersicht
|
|
6
|
+
|
|
7
|
+
| Prompt | Zweck | Relevanter Skill | Relevante Instruction | Wann verwenden |
|
|
8
|
+
|--------|-------|-------------------|----------------------|----------------|
|
|
9
|
+
| [drift-agent-ux](drift-agent-ux.prompt.md) | Agent-UX-Audit: Entscheidungsketten, Dead Ends, Recovery-Pfade | — | `drift-policy` | Agent-Nutzbarkeit der CLI bewerten |
|
|
10
|
+
| [drift-agent-workflow-test](drift-agent-workflow-test.prompt.md) | Vollständiger CLI-Coverage-Test über alle Kommandos | — | `drift-policy` | Komplette CLI-Oberfläche testen |
|
|
11
|
+
| [drift-ai-integration](drift-ai-integration.prompt.md) | LLM-Kontext-Qualität: Export-Formate, MCP, Token-Effizienz | — | `drift-policy` | AI-Integrations-Tauglichkeit prüfen |
|
|
12
|
+
| [drift-ci-gate](drift-ci-gate.prompt.md) | CI-Sicherheit: Exit-Codes, Idempotenz, Maschinen-Formate | — | `drift-policy`, `drift-push-gates` | CI-Pipeline-Tauglichkeit validieren |
|
|
13
|
+
| [drift-onboarding](drift-onboarding.prompt.md) | Erstnutzer-Friktionstest: Init, Config, Time-to-Value | — | `drift-policy` | Onboarding-Qualität für neue User bewerten |
|
|
14
|
+
| [drift-signal-quality](drift-signal-quality.prompt.md) | Signalkorrektheit: TP/FP/FN, Precision/Recall, Oracle-Abgleich | — | `drift-policy` | Signalqualität und -vertrauen messen |
|
|
15
|
+
| [PR-Orchestrator](PR-Orchestrator.prompt.md) | Risikobasierte PR-Review-Entscheidung (APPROVE/MERGE/WAIT/...) | `drift-pr-review` | `drift-policy` | Pull Requests bewerten und entscheiden |
|
|
16
|
+
| [release](release.prompt.md) | Release-Workflow: Version, Changelog, Tag, Publish | `drift-release` | `drift-release-automation`, `drift-release-mandatory` | Nach Code-Änderungen releasen |
|
|
17
|
+
|
|
18
|
+
## Empfohlene Reihenfolge für vollständige Produkt-Evaluation
|
|
19
|
+
|
|
20
|
+
Für eine umfassende Drift-Bewertung diese Prompts in dieser Reihenfolge ausführen:
|
|
21
|
+
|
|
22
|
+
1. **drift-onboarding** — Ersteinrichtung und Time-to-Value
|
|
23
|
+
2. **drift-agent-workflow-test** — Vollständige CLI-Abdeckung in realistischen Workflows
|
|
24
|
+
3. **drift-signal-quality** — Signalkorrektheit und -vertrauen messen
|
|
25
|
+
4. **drift-ci-gate** — CI-Pipeline-Sicherheit und -Stabilität
|
|
26
|
+
5. **drift-ai-integration** — LLM-Kontext-Qualität und MCP-Tauglichkeit
|
|
27
|
+
6. **drift-agent-ux** — Autonomes Agent-UX-Audit (baut auf Ergebnissen der vorherigen auf)
|
|
28
|
+
|
|
29
|
+
## Tägliche Workflows
|
|
30
|
+
|
|
31
|
+
| Situation | Prompt |
|
|
32
|
+
|-----------|--------|
|
|
33
|
+
| PR bewerten und Merge-Entscheidung treffen | **PR-Orchestrator** |
|
|
34
|
+
| Neue Version veröffentlichen | **release** |
|
|
35
|
+
|
|
36
|
+
## Field-Test-Prompts (externe Repos)
|
|
37
|
+
|
|
38
|
+
Prompts unter `field-tests/` testen drift in **beliebigen Repositories** — nicht nur im Drift-Repo.
|
|
39
|
+
Details: [field-tests/README.md](field-tests/README.md)
|
|
40
|
+
|
|
41
|
+
| Prompt | Zweck | Voraussetzung |
|
|
42
|
+
|--------|-------|---------------|
|
|
43
|
+
| [drift-field-test](field-tests/drift-field-test.prompt.md) | Smoke-Test: Funktioniert drift in diesem Repo? | Keine |
|
|
44
|
+
| [drift-finding-audit](field-tests/drift-finding-audit.prompt.md) | Tiefenprüfung: Findings korrekt? TP/FP/FN | field-test = `pass` |
|
|
45
|
+
| [drift-context-eval](field-tests/drift-context-eval.prompt.md) | Kontext-Qualität: Exports nützlich für AI? | field-test = `pass` |
|
|
46
|
+
|
|
47
|
+
**Issues gehen an `mick-gsk/drift`**, nicht ans analysierte Ziel-Repo.
|
|
48
|
+
|
|
49
|
+
## Shared Components
|
|
50
|
+
|
|
51
|
+
Alle Prompts nutzen gemeinsame Referenz-Dateien unter `_partials/`:
|
|
52
|
+
|
|
53
|
+
| Datei | Inhalt |
|
|
54
|
+
|-------|--------|
|
|
55
|
+
| [`_partials/bewertungs-taxonomie.md`](_partials/bewertungs-taxonomie.md) | Einheitliches Bewertungssystem (Labels, Scores, Klassifikationen) |
|
|
56
|
+
| [`_partials/konventionen.md`](_partials/konventionen.md) | Policy-Gate-Pflicht, Datumsformat, Artefakt-Pfade, Sandbox-Erstellung |
|
|
57
|
+
| [`_partials/issue-filing.md`](_partials/issue-filing.md) | Issue-Template für interne Prompts |
|
|
58
|
+
| [`_partials/issue-filing-external.md`](_partials/issue-filing-external.md) | Issue-Template für Field-Test-Prompts (Cross-Repo) |
|
|
59
|
+
|
|
60
|
+
## Beziehung zum Instructions/Skills-Ökosystem
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
.github/copilot-instructions.md ← Master-Arbeitsvertrag für alle Agenten
|
|
64
|
+
├── .github/instructions/
|
|
65
|
+
│ ├── drift-policy.instructions.md ← Policy-Gate, Qualitätsanforderungen, Prioritäten
|
|
66
|
+
│ ├── drift-push-gates.instructions.md ← Pre-Push-Validierung (8 Gates)
|
|
67
|
+
│ ├── drift-release-automation.instructions.md ← PSR-Workflow (DE)
|
|
68
|
+
│ └── drift-release-mandatory.instructions.md ← PSR-Pflicht (EN)
|
|
69
|
+
├── .github/skills/
|
|
70
|
+
│ ├── drift-pr-review/SKILL.md ← PR-Review-Checklist → verwendet von PR-Orchestrator
|
|
71
|
+
│ ├── drift-release/SKILL.md ← Release-Workflow → verwendet von release.prompt.md
|
|
72
|
+
│ └── drift-security-triage/SKILL.md ← Security-Triage (kein Prompt)
|
|
73
|
+
└── .github/prompts/ ← Diese Prompt-Bibliothek
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Konventionen
|
|
77
|
+
|
|
78
|
+
- **Sprache**: Alle Prompts sind auf Deutsch
|
|
79
|
+
- **Bewertungssystem**: Einheitlich gemäß `_partials/bewertungs-taxonomie.md`
|
|
80
|
+
- **Issue-Erstellung**: Einheitlich gemäß `_partials/issue-filing.md`
|
|
81
|
+
- **Modellbezug**: Prompts sind modellunabhängig (keine spezifische Modellversion)
|
|
82
|
+
- **Artefakte**: Unter `work_artifacts/<prompt-kürzel>_<YYYY-MM-DD>/`
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Bewertungs-Taxonomie (Shared Reference)
|
|
2
|
+
|
|
3
|
+
> **Single Source of Truth** — Alle Prompts in `.github/prompts/` verwenden ausschließlich diese Labels.
|
|
4
|
+
> Wenn ein Prompt abweichende Labels nutzt, ist diese Datei maßgeblich.
|
|
5
|
+
|
|
6
|
+
## Ergebnis-Bewertung (pro Schritt / pro Kommando)
|
|
7
|
+
|
|
8
|
+
| Label | Bedeutung |
|
|
9
|
+
|-------|-----------|
|
|
10
|
+
| `pass` | Nächster Schritt ist klar, Evidenz reicht aus, Agent kann sicher fortfahren |
|
|
11
|
+
| `review` | Teilweise nützlich, aber fehlende Daten, Priorisierung oder Entscheidungsgrundlage — Agent braucht zusätzliche Prüfung |
|
|
12
|
+
| `fail` | Irreführend, blockiert oder lenkt den Agent in eine falsche Richtung |
|
|
13
|
+
|
|
14
|
+
## Abdeckungs-Status (pro Kommando / Testfall)
|
|
15
|
+
|
|
16
|
+
| Label | Bedeutung |
|
|
17
|
+
|-------|-----------|
|
|
18
|
+
| `tested` | Vollständig ausgeführt und bewertet |
|
|
19
|
+
| `skipped` | Begründet übersprungen (Grund dokumentiert) |
|
|
20
|
+
| `blocked` | Ausführung nicht möglich (Ursache dokumentiert) |
|
|
21
|
+
|
|
22
|
+
## Risiko-Level (pro Dimension / pro Finding)
|
|
23
|
+
|
|
24
|
+
| Label | Bedeutung |
|
|
25
|
+
|-------|-----------|
|
|
26
|
+
| `low` | Kein oder minimaler Einfluss auf Entscheidungssicherheit |
|
|
27
|
+
| `medium` | Spürbarer Einfluss, aber kein Workflow-Blocker |
|
|
28
|
+
| `high` | Erheblicher Einfluss auf Entscheidungssicherheit oder Agent-Workflow |
|
|
29
|
+
| `critical` | Blockiert den Workflow oder erzeugt falsche Entscheidungen |
|
|
30
|
+
|
|
31
|
+
## Signal-Vertrauensstufe (pro Signal)
|
|
32
|
+
|
|
33
|
+
| Label | Bedeutung |
|
|
34
|
+
|-------|-----------|
|
|
35
|
+
| `trusted` | Precision ≥ 70%, Actionability ≥ 3, Agent kann blindlings handeln |
|
|
36
|
+
| `needs_review` | Precision 50–70% oder Actionability < 3, Maintainer-Prüfung nötig |
|
|
37
|
+
| `unsafe` | Precision < 50%, Signal erzeugt mehr Fehlentscheidungen als korrekte |
|
|
38
|
+
|
|
39
|
+
## Actionability-Score (1–4, pro Signal)
|
|
40
|
+
|
|
41
|
+
| Score | Bedeutung | Akzeptabel? |
|
|
42
|
+
|-------|-----------|-------------|
|
|
43
|
+
| `1 automated` | Fix ist mechanisch ableitbar, Agent kann direkt handeln | ✅ Ja |
|
|
44
|
+
| `2 guided` | Agent kann handeln, braucht aber expliciten Fix-Plan | ✅ Ja |
|
|
45
|
+
| `3 human-review` | Signal plausibel, aber Fix-Entscheidung braucht Maintainer | ⚠️ Bedingt |
|
|
46
|
+
| `4 blocked` | Keine sichere nächste Aktion möglich | ❌ Nein |
|
|
47
|
+
|
|
48
|
+
Schwelle für Produktionseinsatz: **Score ≤ 2** = Agent-tauglich, **Score 3** = nur mit Maintainer-Freigabe.
|
|
49
|
+
|
|
50
|
+
## Discoverability-Scale (für Recovery-Pfade)
|
|
51
|
+
|
|
52
|
+
| Label | Bedeutung | Agent-tauglich? |
|
|
53
|
+
|-------|-----------|-----------------|
|
|
54
|
+
| `explicit` | Tool benennt direkt die Recovery-Aktion | ✅ Ja |
|
|
55
|
+
| `hinted` | Genug Hinweise, um Recovery sicher abzuleiten | ✅ Ja |
|
|
56
|
+
| `pattern-match` | Nur erfahrene User finden den Pfad | ❌ Nein |
|
|
57
|
+
| `dark` | Kein Hinweis; nur Trial-and-Error | ❌ Nein |
|
|
58
|
+
|
|
59
|
+
## Idempotenz-Klassifikation (für CI-Stabilität)
|
|
60
|
+
|
|
61
|
+
| Label | Bedeutung | CI-tauglich? |
|
|
62
|
+
|-------|-----------|-------------|
|
|
63
|
+
| `stable` | Keine Differenz außer Timestamps/Run-IDs | ✅ Ja |
|
|
64
|
+
| `ordering-unstable` | Gleiche Findings, aber instabile Reihenfolge | ⚠️ Bedingt |
|
|
65
|
+
| `content-unstable` | Unterschiedliche Findings ohne Codeänderung — Product-Bug | ❌ Nein |
|
|
66
|
+
|
|
67
|
+
## Cross-Validation-Klassifikation (scan vs. analyze Konsistenz)
|
|
68
|
+
|
|
69
|
+
| Label | Bedeutung |
|
|
70
|
+
|-------|-----------|
|
|
71
|
+
| `metadata-only` | Nur kosmetisch, kein Entscheidungsimpact |
|
|
72
|
+
| `priority-shift` | Severity/Ranking unterscheiden sich, kann Agent fehlleiten |
|
|
73
|
+
| `contradiction` | Inhaltlich gegensätzliche Aussage — als `unsafe` bewerten |
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Issue-Filing-Template für External Field-Tests
|
|
2
|
+
|
|
3
|
+
> **Für Prompts unter `.github/prompts/field-tests/`** — Issues aus externen Repo-Tests.
|
|
4
|
+
> Basis-Regeln aus `_partials/issue-filing.md` gelten zusätzlich (Deduplizierung, Ein-Issue-pro-Problem, Evidenz-Pflicht).
|
|
5
|
+
>
|
|
6
|
+
> **Sprache: Issues werden IMMER auf Englisch verfasst.**
|
|
7
|
+
> **Ziel-Repo: Issues gehen IMMER an `mick-gsk/drift`** — nicht ans analysierte Ziel-Repo.
|
|
8
|
+
|
|
9
|
+
## Allgemeine Regeln
|
|
10
|
+
|
|
11
|
+
1. **Vor Erstellung** prüfen, ob ein passendes Issue auf `mick-gsk/drift` bereits existiert
|
|
12
|
+
2. **Ein Issue pro Problem** — keine Sammel-Issues
|
|
13
|
+
3. **Evidenz-Pflicht** — exaktes Kommando, drift-Version, Ziel-Repo-Infos angeben
|
|
14
|
+
4. **Nur reproduzierbare Defekte** — kein lokales Umgebungsrauschen
|
|
15
|
+
5. **Labels**: `field-test` plus ggf. `agent-ux`, `signal-quality`, `bug`
|
|
16
|
+
6. **Sprache**: Englisch (Titel + Body + Kommentare)
|
|
17
|
+
7. **Scope**: Issues beschreiben Drift-Verhalten, nicht Probleme im Ziel-Repo
|
|
18
|
+
|
|
19
|
+
## Titel-Format
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
[field-test:<prompt-prefix>] <concise problem description> (tested on <repo-name>)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Prompt-Kürzel (prefix):
|
|
26
|
+
- `field-test` — aus drift-field-test.prompt.md
|
|
27
|
+
- `finding-audit` — aus drift-finding-audit.prompt.md
|
|
28
|
+
- `context-eval` — aus drift-context-eval.prompt.md
|
|
29
|
+
|
|
30
|
+
Beispiele:
|
|
31
|
+
- `[field-test:field-test] drift analyze crashes on monorepo with 500+ modules (tested on django/django)`
|
|
32
|
+
- `[field-test:finding-audit] AVS signal fires on framework-idiomatic imports (tested on pallets/flask)`
|
|
33
|
+
- `[field-test:context-eval] export-context raw format missing signal IDs (tested on encode/httpx)`
|
|
34
|
+
|
|
35
|
+
## Body-Template (English)
|
|
36
|
+
|
|
37
|
+
```markdown
|
|
38
|
+
## Observed behavior
|
|
39
|
+
|
|
40
|
+
[What drift produced — include relevant output snippet]
|
|
41
|
+
|
|
42
|
+
## Expected behavior
|
|
43
|
+
|
|
44
|
+
[What would have been correct/useful for this repository type]
|
|
45
|
+
|
|
46
|
+
## Tested repository
|
|
47
|
+
|
|
48
|
+
- **Repository:** [OWNER/REPO-NAME]
|
|
49
|
+
- **Commit:** [COMMIT-HASH or branch]
|
|
50
|
+
- **Repo type:** [Python / TypeScript / Mixed]
|
|
51
|
+
- **Repo profile:** [Library / Framework / Application / Monorepo]
|
|
52
|
+
- **Git history available:** [Yes (N commits) / No (shallow clone) / Partial]
|
|
53
|
+
- **Repo size:** [approximate file count or LOC]
|
|
54
|
+
|
|
55
|
+
## Reproduction
|
|
56
|
+
|
|
57
|
+
- drift version: [VERSION]
|
|
58
|
+
- Command: `drift ...`
|
|
59
|
+
- Config used: [default / custom drift.yaml / drift init --profile ...]
|
|
60
|
+
- Evidence artifact: [PATH in work_artifacts/]
|
|
61
|
+
|
|
62
|
+
## Impact
|
|
63
|
+
|
|
64
|
+
- [ ] Workflow blocker (drift cannot analyze this repository)
|
|
65
|
+
- [ ] False positive (drift reports non-existent problem)
|
|
66
|
+
- [ ] False negative (drift misses real architectural issue)
|
|
67
|
+
- [ ] Severity miscalibration (finding real but severity wrong)
|
|
68
|
+
- [ ] Cross-command inconsistency (scan vs. analyze disagree)
|
|
69
|
+
- [ ] Context quality issue (export is noisy, irrelevant, or incomplete)
|
|
70
|
+
- [ ] Repo-type-specific issue (only affects this architecture style)
|
|
71
|
+
|
|
72
|
+
## Generalizability estimate
|
|
73
|
+
|
|
74
|
+
[Is this likely specific to this one repo, or would it affect similar repos?
|
|
75
|
+
e.g., "Likely affects all Django projects with apps/ structure"]
|
|
76
|
+
|
|
77
|
+
## Source
|
|
78
|
+
|
|
79
|
+
Auto-generated by `.github/prompts/field-tests/<PROMPT-FILE>` on [DATE].
|
|
80
|
+
Tested on [OWNER/REPO-NAME] at commit [SHORT-HASH].
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Erstellungskriterien
|
|
84
|
+
|
|
85
|
+
### Issues erstellen für
|
|
86
|
+
|
|
87
|
+
- `fail`-Bewertungen mit reproduzierbarer Evidenz
|
|
88
|
+
- Signale mit `unsafe`-Vertrauensstufe, die nicht repo-spezifisch erklärbar sind
|
|
89
|
+
- False Positives, die auf ein systematisches Pattern hindeuten (nicht nur Einzelfall)
|
|
90
|
+
- Cross-Command-Inkonsistenzen mit Entscheidungsimpact
|
|
91
|
+
- Export-Kontext, der für das getestete Repo irrelevant oder irreführend ist
|
|
92
|
+
|
|
93
|
+
### Keine Issues erstellen für
|
|
94
|
+
|
|
95
|
+
- Findings, die korrekt aber unerwünscht sind (das Repo HAT das Problem)
|
|
96
|
+
- Lokale Umgebungsprobleme (falsche Python-Version, fehlende Dependencies)
|
|
97
|
+
- Einzelfälle ohne Generalisierungspotential
|
|
98
|
+
- Subjektive Formatpräferenzen
|
|
99
|
+
- Duplikate bereits existierender Issues auf `mick-gsk/drift`
|
|
100
|
+
|
|
101
|
+
### Generalisierungs-Heuristik
|
|
102
|
+
|
|
103
|
+
Vor Issue-Erstellung fragen: *Würde dieses Problem auch in einem anderen Repo desselben Typs auftreten?*
|
|
104
|
+
- **Ja** → Issue erstellen mit Generalizability-Einschätzung
|
|
105
|
+
- **Wahrscheinlich** → Issue erstellen, als `needs_review` kennzeichnen
|
|
106
|
+
- **Nein, repo-spezifisch** → Nur im Report dokumentieren, kein Issue
|
|
107
|
+
|
|
108
|
+
## Abschlussausgabe
|
|
109
|
+
|
|
110
|
+
Nach Issue-Erstellung:
|
|
111
|
+
|
|
112
|
+
```text
|
|
113
|
+
Created issues on mick-gsk/drift:
|
|
114
|
+
- #[NUMBER]: [TITLE] - [URL]
|
|
115
|
+
|
|
116
|
+
Skipped issues (already exist):
|
|
117
|
+
- [TITLE] -> #[NUMBER]
|
|
118
|
+
|
|
119
|
+
Documented in report only (repo-specific, no issue):
|
|
120
|
+
- [FINDING DESCRIPTION]
|
|
121
|
+
```
|