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.
Files changed (490) hide show
  1. drift_analyzer-2.2.0/.github/AGENTS.md +81 -0
  2. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/DISCUSSION_TEMPLATE/ideas.yml +1 -1
  3. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/DISCUSSION_TEMPLATE/questions.yml +1 -1
  4. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/config.yml +4 -4
  5. drift_analyzer-2.2.0/.github/prompts/PR-Orchestrator.prompt.md +200 -0
  6. drift_analyzer-2.2.0/.github/prompts/README.md +82 -0
  7. drift_analyzer-2.2.0/.github/prompts/_partials/bewertungs-taxonomie.md +73 -0
  8. drift_analyzer-2.2.0/.github/prompts/_partials/issue-filing-external.md +121 -0
  9. drift_analyzer-2.2.0/.github/prompts/_partials/issue-filing.md +96 -0
  10. drift_analyzer-2.2.0/.github/prompts/_partials/konventionen.md +75 -0
  11. drift_analyzer-2.2.0/.github/prompts/drift-agent-ux.prompt.md +262 -0
  12. drift_analyzer-2.2.0/.github/prompts/drift-agent-workflow-test.prompt.md +354 -0
  13. drift_analyzer-2.2.0/.github/prompts/drift-ai-integration.prompt.md +282 -0
  14. drift_analyzer-2.2.0/.github/prompts/drift-ci-gate.prompt.md +266 -0
  15. drift_analyzer-2.2.0/.github/prompts/drift-onboarding.prompt.md +193 -0
  16. drift_analyzer-2.2.0/.github/prompts/drift-signal-quality.prompt.md +258 -0
  17. drift_analyzer-2.2.0/.github/prompts/field-tests/README.md +64 -0
  18. drift_analyzer-2.2.0/.github/prompts/field-tests/drift-context-eval.prompt.md +269 -0
  19. drift_analyzer-2.2.0/.github/prompts/field-tests/drift-field-test.prompt.md +257 -0
  20. drift_analyzer-2.2.0/.github/prompts/field-tests/drift-finding-audit.prompt.md +290 -0
  21. drift_analyzer-2.2.0/.github/prompts/release.prompt.md +157 -0
  22. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/repo-root-allowlist +1 -0
  23. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/ci.yml +74 -21
  24. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/codeql.yml +2 -2
  25. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/dependency-review.yml +2 -2
  26. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/docs.yml +4 -6
  27. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/labeler.yml +2 -3
  28. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/package-kpis.yml +2 -3
  29. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/publish.yml +9 -12
  30. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/release.yml +11 -12
  31. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/repo-guard.yml +2 -3
  32. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/security-hygiene.yml +2 -3
  33. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/stale.yml +2 -3
  34. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/validate-release.yml +5 -7
  35. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/welcome.yml +3 -3
  36. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/workflow-sanity.yml +2 -3
  37. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/CHANGELOG.md +44 -0
  38. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/CITATION.cff +1 -1
  39. drift_analyzer-2.2.0/CLAUDE.md +1 -0
  40. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/CONTRIBUTING.md +15 -15
  41. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/DEVELOPER.md +3 -3
  42. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/PKG-INFO +26 -24
  43. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/README.md +22 -20
  44. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/ROADMAP.md +5 -5
  45. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/SECURITY.md +2 -2
  46. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/SUPPORT.md +5 -5
  47. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/action.yml +1 -1
  48. drift_analyzer-2.2.0/benchmarks/corpus/README.md +17 -0
  49. drift_analyzer-2.2.0/benchmarks/corpus/manifest.json +24 -0
  50. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/connectors/db.py +77 -0
  51. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/handler_v1.py +17 -0
  52. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/handler_v2.py +17 -0
  53. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/handlers/auth.py +21 -0
  54. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/handlers/orders.py +19 -0
  55. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/handlers/payments.py +17 -0
  56. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/handlers/shipping.py +9 -0
  57. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/models/core.py +43 -0
  58. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/models/enriched.py +16 -0
  59. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/outlier_module.py +28 -0
  60. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/processors/pricing.py +52 -0
  61. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/processors/transform.py +63 -0
  62. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/processors/validator.py +28 -0
  63. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/service_a.py +20 -0
  64. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/service_b.py +20 -0
  65. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/utils/formatting.py +15 -0
  66. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/utils/helpers.py +14 -0
  67. drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/utils/naming.py +17 -0
  68. drift_analyzer-2.2.0/benchmarks/corpus/tests/test_api.py +37 -0
  69. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/conda.recipe/meta.yaml +2 -2
  70. drift_analyzer-2.2.0/decisions/ADR-010-finding-context-triage-policy.md +51 -0
  71. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/LAUNCH_CHECKLIST.md +2 -2
  72. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/OUTREACH.md +19 -19
  73. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/STUDY.md +137 -4
  74. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/distribution/awesome-submissions.md +4 -4
  75. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/distribution/devto-hashnode-5-repos.md +2 -2
  76. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/migration.md +1 -1
  77. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/algorithms/scoring.md +7 -7
  78. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/algorithms/signals.md +3 -3
  79. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/benchmarking.md +1 -1
  80. drift_analyzer-2.2.0/docs-site/changelog.md +3 -0
  81. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/comparisons/index.md +2 -2
  82. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/contributing.md +6 -6
  83. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/faq.md +2 -2
  84. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/getting-started/configuration.md +41 -0
  85. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/getting-started/installation.md +1 -1
  86. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/getting-started/quickstart.md +2 -2
  87. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/getting-started/team-rollout.md +2 -2
  88. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/getting-started/troubleshooting.md +1 -1
  89. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/index.md +1 -1
  90. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/integrations.md +1 -1
  91. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/product/press-brand.md +1 -1
  92. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/reference/api-outputs.md +5 -0
  93. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/start-here.md +1 -1
  94. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/study.md +1 -1
  95. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/trust-evidence.md +1 -1
  96. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/use-cases/ci-architecture-checks-sarif.md +1 -1
  97. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/use-cases/index.md +2 -2
  98. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/drift.example.yaml +24 -2
  99. drift_analyzer-2.2.0/examples/demo-project/api/__init__.py +0 -0
  100. drift_analyzer-2.2.0/examples/demo-project/db/__init__.py +0 -0
  101. drift_analyzer-2.2.0/examples/demo-project/services/__init__.py +0 -0
  102. drift_analyzer-2.2.0/examples/demo-project/utils/__init__.py +0 -0
  103. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/drift-check.yml +1 -1
  104. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/vibe-coding/drift-gate.yml +1 -1
  105. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/llms.txt +4 -4
  106. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/mkdocs.yml +2 -2
  107. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/overrides/main.html +2 -2
  108. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/pyproject.toml +5 -4
  109. drift_analyzer-2.2.0/src/drift/analyzers/typescript/_path_utils.py +13 -0
  110. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/analyzers/typescript/alias_resolver.py +5 -4
  111. drift_analyzer-2.2.0/src/drift/analyzers/typescript/shared.py +34 -0
  112. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/analyzers/typescript/workspace_boundaries.py +7 -9
  113. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/api.py +159 -8
  114. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/api_helpers.py +28 -4
  115. drift_analyzer-2.2.0/src/drift/commands/_io.py +18 -0
  116. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/analyze.py +56 -9
  117. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/badge.py +1 -1
  118. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/check.py +5 -4
  119. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/copilot_context.py +1 -1
  120. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/diff_cmd.py +1 -0
  121. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/explain.py +1 -1
  122. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/export_context.py +1 -1
  123. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/fix_plan.py +9 -0
  124. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/init_cmd.py +9 -2
  125. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/mcp.py +19 -4
  126. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/patterns.py +1 -0
  127. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/scan.py +50 -3
  128. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/self_analyze.py +1 -1
  129. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/config.py +41 -4
  130. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/copilot_context.py +15 -1
  131. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/errors.py +1 -1
  132. drift_analyzer-2.2.0/src/drift/finding_context.py +164 -0
  133. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/mcp_server.py +288 -48
  134. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/negative_context.py +160 -27
  135. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/negative_context_export.py +13 -5
  136. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/output/json_output.py +28 -1
  137. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/output/rich_output.py +15 -3
  138. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/pipeline.py +11 -0
  139. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/profiles.py +3 -3
  140. drift_analyzer-2.2.0/src/drift/py.typed +0 -0
  141. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/recommendations.py +28 -8
  142. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/_utils.py +42 -0
  143. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/architecture_violation.py +35 -3
  144. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/dead_code_accumulation.py +9 -1
  145. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/doc_impl_drift.py +22 -3
  146. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/naming_contract_violation.py +5 -0
  147. drift_analyzer-2.2.0/tests/__init__.py +0 -0
  148. drift_analyzer-2.2.0/tests/fixtures/__init__.py +0 -0
  149. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_agent_native_cli.py +16 -2
  150. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_avs_mutations.py +30 -0
  151. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_cli_runtime.py +41 -0
  152. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_compat.py +4 -0
  153. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_config.py +4 -2
  154. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_dead_code_accumulation.py +23 -0
  155. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_dia_enhanced.py +25 -0
  156. drift_analyzer-2.2.0/tests/test_finding_context.py +130 -0
  157. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_init_cmd.py +1 -1
  158. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_json_output.py +6 -2
  159. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_mcp_copilot.py +80 -0
  160. drift_analyzer-2.2.0/tests/test_mcp_hardening.py +84 -0
  161. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_naming_contract_violation.py +21 -0
  162. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_negative_context.py +50 -1
  163. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_negative_context_export.py +75 -0
  164. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_output_golden.py +13 -0
  165. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_recommendations_edge_cases.py +17 -0
  166. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_scan_diversity.py +125 -1
  167. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_telemetry.py +1 -0
  168. drift_analyzer-2.2.0/tests/test_workspace_value.py +214 -0
  169. drift_analyzer-2.1.2/.github/AGENTS.md +0 -53
  170. drift_analyzer-2.1.2/.github/prompts/PR-Orchestrator.prompt.md +0 -235
  171. drift_analyzer-2.1.2/.github/prompts/drift-agent-ux.prompt.md +0 -306
  172. drift_analyzer-2.1.2/.github/prompts/drift-agent-workflow-test.prompt.md +0 -619
  173. drift_analyzer-2.1.2/.github/prompts/drift-ai-integration.prompt.md +0 -313
  174. drift_analyzer-2.1.2/.github/prompts/drift-ci-gate.prompt.md +0 -301
  175. drift_analyzer-2.1.2/.github/prompts/drift-onboarding.prompt.md +0 -208
  176. drift_analyzer-2.1.2/.github/prompts/drift-signal-quality.prompt.md +0 -306
  177. drift_analyzer-2.1.2/.github/prompts/release.prompt.md +0 -211
  178. drift_analyzer-2.1.2/CLAUDE.md +0 -1
  179. drift_analyzer-2.1.2/docs-site/changelog.md +0 -3
  180. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.detect-secrets.cfg +0 -0
  181. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.devcontainer/devcontainer.json +0 -0
  182. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.githooks/commit-msg +0 -0
  183. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.githooks/pre-commit +0 -0
  184. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.githooks/pre-push +0 -0
  185. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/CODEOWNERS +0 -0
  186. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/FUNDING.yml +0 -0
  187. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  188. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/contribution_proposal.md +0 -0
  189. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/false_positive.yml +0 -0
  190. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  191. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/good_first_issue.md +0 -0
  192. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/study_finding_rating.md +0 -0
  193. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/study_repo_benchmark.md +0 -0
  194. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/ISSUE_TEMPLATE/study_self_analysis.md +0 -0
  195. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  196. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/copilot-instructions.md +0 -0
  197. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/dependabot.yml +0 -0
  198. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/instructions/drift-policy.instructions.md +0 -0
  199. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/instructions/drift-push-gates.instructions.md +0 -0
  200. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/instructions/drift-release-automation.instructions.md +0 -0
  201. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/instructions/drift-release-mandatory.instructions.md +0 -0
  202. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/labeler.yml +0 -0
  203. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/labels.yml +0 -0
  204. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/repo-guard.blocklist +0 -0
  205. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/skills/drift-pr-review/SKILL.md +0 -0
  206. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/skills/drift-release/SKILL.md +0 -0
  207. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/skills/drift-security-triage/SKILL.md +0 -0
  208. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/README.md +0 -0
  209. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.github/workflows/install-smoke.yml +0 -0
  210. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.gitignore +0 -0
  211. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.markdownlint-cli2.jsonc +0 -0
  212. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.pre-commit-config.yaml +0 -0
  213. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.pre-commit-hooks.yaml +0 -0
  214. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.secrets.baseline +0 -0
  215. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.shellcheckrc +0 -0
  216. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.vscode/mcp.json +0 -0
  217. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.vscode/settings.json +0 -0
  218. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/.vscode/tasks.json +0 -0
  219. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/CODE_OF_CONDUCT.md +0 -0
  220. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/LICENSE +0 -0
  221. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/Makefile +0 -0
  222. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/POLICY.md +0 -0
  223. {drift_analyzer-2.1.2/examples/demo-project/api → drift_analyzer-2.2.0/benchmarks/corpus/src/myapp}/__init__.py +0 -0
  224. {drift_analyzer-2.1.2/examples/demo-project/db → drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/connectors}/__init__.py +0 -0
  225. {drift_analyzer-2.1.2/examples/demo-project/services → drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/handlers}/__init__.py +0 -0
  226. {drift_analyzer-2.1.2/examples/demo-project/utils → drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/models}/__init__.py +0 -0
  227. {drift_analyzer-2.1.2/tests → drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/processors}/__init__.py +0 -0
  228. {drift_analyzer-2.1.2/tests/fixtures → drift_analyzer-2.2.0/benchmarks/corpus/src/myapp/utils}/__init__.py +0 -0
  229. /drift_analyzer-2.1.2/src/drift/py.typed → /drift_analyzer-2.2.0/benchmarks/corpus/tests/__init__.py +0 -0
  230. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/decisions/templates/README.md +0 -0
  231. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/decisions/templates/adr-template.md +0 -0
  232. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/decisions/templates/signal-design-template.md +0 -0
  233. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/EPISTEMICS.md +0 -0
  234. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/PRODUCT_STRATEGY.md +0 -0
  235. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/ROOT_POLICY.md +0 -0
  236. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/adr/001-deterministic-analysis-pipeline.md +0 -0
  237. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/adr/002-ast-fingerprinting-for-patterns.md +0 -0
  238. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/adr/003-composite-scoring-model.md +0 -0
  239. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/adr/004-subprocess-git-parsing.md +0 -0
  240. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/adr/005-delta-first-score-interpretation.md +0 -0
  241. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/adr/006-context-tagging.md +0 -0
  242. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/adr/007-consistency-proxy-signals.md +0 -0
  243. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/adr/008-intention-contract-proxy-signals.md +0 -0
  244. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/distribution/README.md +0 -0
  245. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/distribution/ide-discovery-mvp-spec.md +0 -0
  246. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/distribution/week1-rollout-runbook.md +0 -0
  247. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/drift-architecture-erosion-analysis.md +0 -0
  248. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/go-mvp-scope.md +0 -0
  249. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/language-roadmap.md +0 -0
  250. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/language-support-matrix.md +0 -0
  251. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/python-baseline.md +0 -0
  252. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/python-rule-inventory.md +0 -0
  253. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs/tsjs-mvp-scope.md +0 -0
  254. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/algorithms/deep-dive.md +0 -0
  255. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/assets/logo.svg +0 -0
  256. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/case-studies/django.md +0 -0
  257. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/case-studies/fastapi.md +0 -0
  258. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/case-studies/index.md +0 -0
  259. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/case-studies/pydantic.md +0 -0
  260. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/comparisons/drift-vs-architecture-conformance.md +0 -0
  261. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/comparisons/drift-vs-ruff.md +0 -0
  262. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/comparisons/drift-vs-semgrep-codeql.md +0 -0
  263. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/getting-started/finding-triage.md +0 -0
  264. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/glossary.md +0 -0
  265. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/product/example-findings.md +0 -0
  266. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/product-strategy.md +0 -0
  267. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/reference/negative-context.md +0 -0
  268. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/reference/performance.md +0 -0
  269. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/stability.md +0 -0
  270. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/use-cases/architectural-linter-ai-teams.md +0 -0
  271. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/use-cases/architecture-drift-python.md +0 -0
  272. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/docs-site/use-cases/technical-debt-ai-codebases.md +0 -0
  273. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/demo-project/README.md +0 -0
  274. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/demo-project/api/routes.py +0 -0
  275. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/demo-project/db/models.py +0 -0
  276. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/demo-project/services/email_service.py +0 -0
  277. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/demo-project/services/order_service.py +0 -0
  278. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/demo-project/services/user_service.py +0 -0
  279. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/demo-project/utils/validators.py +0 -0
  280. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/demo_fastapi.md +0 -0
  281. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/package-kpis/README.md +0 -0
  282. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/package-kpis/defects.csv +0 -0
  283. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/package-kpis/kpi-thresholds.json +0 -0
  284. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/package-kpis/usage.csv +0 -0
  285. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/vibe-coding/README.md +0 -0
  286. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/vibe-coding/drift.yaml +0 -0
  287. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/vibe-coding/mcp.json +0 -0
  288. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/vibe-coding/pre-push +0 -0
  289. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/vibe-coding/setup-baseline.sh +0 -0
  290. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/examples/vibe-coding/weekly-check.sh +0 -0
  291. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/overrides/home.html +0 -0
  292. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/__init__.py +0 -0
  293. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/__main__.py +0 -0
  294. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/analyzer.py +0 -0
  295. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/analyzers/typescript/__init__.py +0 -0
  296. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/analyzers/typescript/barrel_resolver.py +0 -0
  297. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/analyzers/typescript/import_graph.py +0 -0
  298. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/baseline.py +0 -0
  299. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/cache.py +0 -0
  300. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/cli.py +0 -0
  301. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/__init__.py +0 -0
  302. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/baseline.py +0 -0
  303. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/config_cmd.py +0 -0
  304. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/timeline.py +0 -0
  305. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/trend.py +0 -0
  306. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/commands/validate_cmd.py +0 -0
  307. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/context_tags.py +0 -0
  308. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/embeddings.py +0 -0
  309. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/incremental.py +0 -0
  310. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/ingestion/__init__.py +0 -0
  311. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/ingestion/ast_parser.py +0 -0
  312. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/ingestion/file_discovery.py +0 -0
  313. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/ingestion/git_history.py +0 -0
  314. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/ingestion/ts_parser.py +0 -0
  315. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/models.py +0 -0
  316. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/output/__init__.py +0 -0
  317. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/output/agent_tasks.py +0 -0
  318. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/output/github_format.py +0 -0
  319. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/rules/tsjs/circular_module_detection.py +0 -0
  320. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/rules/tsjs/cross_package_import_ban.py +0 -0
  321. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/rules/tsjs/layer_leak_detection.py +0 -0
  322. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/rules/tsjs/ui_to_infra_import_ban.py +0 -0
  323. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/scoring/__init__.py +0 -0
  324. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/scoring/engine.py +0 -0
  325. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/__init__.py +0 -0
  326. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/base.py +0 -0
  327. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/broad_exception_monoculture.py +0 -0
  328. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/bypass_accumulation.py +0 -0
  329. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/circular_import.py +0 -0
  330. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/co_change_coupling.py +0 -0
  331. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/cognitive_complexity.py +0 -0
  332. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/cohesion_deficit.py +0 -0
  333. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/exception_contract_drift.py +0 -0
  334. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/explainability_deficit.py +0 -0
  335. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/fan_out_explosion.py +0 -0
  336. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/guard_clause_deficit.py +0 -0
  337. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/hardcoded_secret.py +0 -0
  338. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/insecure_default.py +0 -0
  339. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/missing_authorization.py +0 -0
  340. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/mutant_duplicates.py +0 -0
  341. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/pattern_fragmentation.py +0 -0
  342. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/system_misalignment.py +0 -0
  343. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/temporal_volatility.py +0 -0
  344. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/test_polarity_deficit.py +0 -0
  345. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/signals/ts_architecture.py +0 -0
  346. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/suppression.py +0 -0
  347. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/telemetry.py +0 -0
  348. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/timeline.py +0 -0
  349. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/src/drift/trend_history.py +0 -0
  350. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/conftest.py +0 -0
  351. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/ground_truth.py +0 -0
  352. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/study_samples/debt_correlation.json +0 -0
  353. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/study_samples/rater_matrix.json +0 -0
  354. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/study_samples/self_analysis_reports.json +0 -0
  355. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution/src/app.ts +0 -0
  356. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution/src/core/logger.ts +0 -0
  357. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution/src/shared/config.ts +0 -0
  358. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution/tsconfig.json +0 -0
  359. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/src/app.ts +0 -0
  360. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/src/base/logger.ts +0 -0
  361. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/src/leaf/feature.ts +0 -0
  362. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/src/mid/util.ts +0 -0
  363. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/src/override/config.ts +0 -0
  364. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/src/shared/config.ts +0 -0
  365. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/tsconfig.base.json +0 -0
  366. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/tsconfig.json +0 -0
  367. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_alias_resolution_extends/tsconfig.mid.json +0 -0
  368. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_barrel_resolution/src/app.ts +0 -0
  369. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_barrel_resolution/src/app_tsx.ts +0 -0
  370. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_barrel_resolution/src/button.tsx +0 -0
  371. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_barrel_resolution/src/index.ts +0 -0
  372. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_barrel_resolution/src/view/card.tsx +0 -0
  373. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_barrel_resolution/src/view/index.tsx +0 -0
  374. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_graph_relative/app.ts +0 -0
  375. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_graph_relative/components/button.tsx +0 -0
  376. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_graph_relative/components/index.ts +0 -0
  377. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_graph_relative/lib/util.ts +0 -0
  378. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cross_package/negative/cross_package_import_ban.json +0 -0
  379. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cross_package/negative/package.json +0 -0
  380. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cross_package/negative/packages/app/src/main.ts +0 -0
  381. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cross_package/negative/packages/ui/src/button.ts +0 -0
  382. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cross_package/positive/cross_package_import_ban.json +0 -0
  383. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cross_package/positive/package.json +0 -0
  384. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cross_package/positive/packages/app/src/main.ts +0 -0
  385. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cross_package/positive/packages/ui/src/button.ts +0 -0
  386. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cycles/negative/src/a.ts +0 -0
  387. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cycles/negative/src/b.ts +0 -0
  388. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cycles/positive/src/a.ts +0 -0
  389. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_cycles/positive/src/b.ts +0 -0
  390. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_layer_leak/negative/layer_leak_detection.json +0 -0
  391. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_layer_leak/negative/src/infra/storage.ts +0 -0
  392. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_layer_leak/negative/src/ui/view.ts +0 -0
  393. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_layer_leak/positive/layer_leak_detection.json +0 -0
  394. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_layer_leak/positive/src/infra/storage.ts +0 -0
  395. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_layer_leak/positive/src/ui/view.ts +0 -0
  396. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_ui_to_infra/negative/src/infra/storage.ts +0 -0
  397. {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
  398. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_ui_to_infra/negative/src/ui/view.ts +0 -0
  399. {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
  400. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_ui_to_infra/positive/src/infra/storage.ts +0 -0
  401. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_rule_ui_to_infra/positive/src/ui/view.ts +0 -0
  402. {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
  403. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_workspace_boundaries/package.json +0 -0
  404. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_workspace_boundaries/packages/app/src/main.ts +0 -0
  405. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_workspace_boundaries/packages/ui/src/button.tsx +0 -0
  406. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/fixtures/tsjs_workspace_boundaries/vite.config.ts +0 -0
  407. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_ablation.py +0 -0
  408. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_agent_tasks.py +0 -0
  409. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_ai_tool_indicators.py +0 -0
  410. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_analysis_degradation.py +0 -0
  411. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_architecture_violation.py +0 -0
  412. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_ast_parser.py +0 -0
  413. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_avs_enhanced.py +0 -0
  414. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_avs_missing_patterns_evidence.py +0 -0
  415. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_badge_command.py +0 -0
  416. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_baseline.py +0 -0
  417. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_benchmark_label_keys.py +0 -0
  418. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_benchmark_structure.py +0 -0
  419. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_bypass_accumulation.py +0 -0
  420. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_cache_resilience.py +0 -0
  421. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_ci_reality.py +0 -0
  422. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_circular_import.py +0 -0
  423. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_co_change_coupling.py +0 -0
  424. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_cognitive_complexity.py +0 -0
  425. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_cohesion_deficit.py +0 -0
  426. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_config_validate.py +0 -0
  427. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_consistency_proxies.py +0 -0
  428. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_console_scripts.py +0 -0
  429. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_context_tags.py +0 -0
  430. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_copilot_context_coverage.py +0 -0
  431. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_delta_first.py +0 -0
  432. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_dx_features.py +0 -0
  433. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_embeddings.py +0 -0
  434. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_enterprise_governance_assets.py +0 -0
  435. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_exception_contract_drift.py +0 -0
  436. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_fan_out_explosion.py +0 -0
  437. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_fetch_github_usage.py +0 -0
  438. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_fetch_pypistats.py +0 -0
  439. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_file_discovery.py +0 -0
  440. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_fix_actionability.py +0 -0
  441. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_git_history_edge_cases.py +0 -0
  442. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_git_history_safety.py +0 -0
  443. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_guard_clause_deficit.py +0 -0
  444. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_hardcoded_secret.py +0 -0
  445. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_incremental.py +0 -0
  446. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_insecure_default.py +0 -0
  447. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_integration.py +0 -0
  448. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_mirofish_signal_improvements.py +0 -0
  449. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_missing_authorization.py +0 -0
  450. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_model_consistency.py +0 -0
  451. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_module_entrypoint.py +0 -0
  452. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_mutant_duplicates_edge_cases.py +0 -0
  453. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_nudge.py +0 -0
  454. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_output_minimal_and_signal_labels.py +0 -0
  455. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_package_kpis.py +0 -0
  456. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_path_overrides.py +0 -0
  457. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_pattern_fragmentation.py +0 -0
  458. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_pipeline_components.py +0 -0
  459. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_precision_recall.py +0 -0
  460. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_property_based.py +0 -0
  461. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_recommendations.py +0 -0
  462. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_release_automation.py +0 -0
  463. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_release_discipline.py +0 -0
  464. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_repo_hygiene.py +0 -0
  465. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_rule_ids.py +0 -0
  466. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_sarif_contract.py +0 -0
  467. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_scoring.py +0 -0
  468. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_scoring_edge_cases.py +0 -0
  469. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_self_command.py +0 -0
  470. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_signal_contract.py +0 -0
  471. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_signal_utils.py +0 -0
  472. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_smoke_real_repos.py +0 -0
  473. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_study_infrastructure.py +0 -0
  474. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_suppression.py +0 -0
  475. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_test_polarity_deficit.py +0 -0
  476. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_timeline.py +0 -0
  477. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_trend_chart.py +0 -0
  478. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_trend_command_history.py +0 -0
  479. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_ts_signals_phase2.py +0 -0
  480. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_ts_signals_phase3.py +0 -0
  481. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_tsjs_alias_resolution.py +0 -0
  482. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_tsjs_barrel_resolution.py +0 -0
  483. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_tsjs_import_graph_relative.py +0 -0
  484. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_tsjs_rule_circular_module_detection.py +0 -0
  485. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_tsjs_rule_cross_package_import_ban.py +0 -0
  486. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_tsjs_rule_layer_leak_detection.py +0 -0
  487. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_tsjs_rule_ui_to_infra_import_ban.py +0 -0
  488. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_tsjs_workspace_boundaries.py +0 -0
  489. {drift_analyzer-2.1.2 → drift_analyzer-2.2.0}/tests/test_typescript_parser.py +0 -0
  490. {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/sauremilk/drift/issues/new/choose) instead.
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/sauremilk/drift/discussions)
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/sauremilk/drift/blob/main/CONTRIBUTING.md#participate-in-community-studies
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/sauremilk/drift/blob/main/SUPPORT.md
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/sauremilk/drift/discussions
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/sauremilk/drift/security/policy
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
+ ```