drift-analyzer 2.4.2__tar.gz → 2.4.4__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 (549) hide show
  1. drift_analyzer-2.4.4/.github/CODEOWNERS +30 -0
  2. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/DISCUSSION_TEMPLATE/questions.yml +1 -1
  3. drift_analyzer-2.4.4/.github/FUNDING.yml +1 -0
  4. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/ISSUE_TEMPLATE/config.yml +1 -1
  5. drift_analyzer-2.4.4/.github/ISSUE_TEMPLATE/doc_drift.yml +63 -0
  6. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/workflows/ci.yml +78 -0
  7. drift_analyzer-2.4.4/.github/workflows/doc-consistency.yml +67 -0
  8. drift_analyzer-2.4.4/.github/workflows/perf-regression-loop.yml +226 -0
  9. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.pre-commit-config.yaml +1 -1
  10. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/CHANGELOG.md +4 -2
  11. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/CITATION.cff +1 -1
  12. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/PKG-INFO +4 -4
  13. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/README.md +1 -1
  14. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/SECURITY.md +1 -1
  15. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/SUPPORT.md +1 -1
  16. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/history.json +1 -1
  17. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/conda.recipe/meta.yaml +2 -2
  18. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/OUTREACH.md +2 -2
  19. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/adr/001-deterministic-analysis-pipeline.md +1 -1
  20. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/adr/002-ast-fingerprinting-for-patterns.md +1 -1
  21. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/adr/003-composite-scoring-model.md +1 -1
  22. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/adr/004-subprocess-git-parsing.md +1 -1
  23. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/adr/005-delta-first-score-interpretation.md +1 -1
  24. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/llms.txt +10 -10
  25. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/mkdocs.yml +1 -1
  26. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/overrides/main.html +1 -1
  27. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/pyproject.toml +3 -3
  28. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/self_analyze.py +1 -1
  29. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/mcp_server.py +14 -16
  30. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_brief.py +16 -0
  31. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_golden_snapshot.py +8 -2
  32. drift_analyzer-2.4.2/.github/CODEOWNERS +0 -30
  33. drift_analyzer-2.4.2/.github/FUNDING.yml +0 -1
  34. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.detect-secrets.cfg +0 -0
  35. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.devcontainer/devcontainer.json +0 -0
  36. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.githooks/commit-msg +0 -0
  37. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.githooks/pre-commit +0 -0
  38. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.githooks/pre-push +0 -0
  39. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/AGENTS.md +0 -0
  40. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
  41. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  42. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/ISSUE_TEMPLATE/contribution_proposal.md +0 -0
  43. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/ISSUE_TEMPLATE/false_positive.yml +0 -0
  44. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  45. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/ISSUE_TEMPLATE/good_first_issue.md +0 -0
  46. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/ISSUE_TEMPLATE/study_finding_rating.md +0 -0
  47. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/ISSUE_TEMPLATE/study_repo_benchmark.md +0 -0
  48. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/ISSUE_TEMPLATE/study_self_analysis.md +0 -0
  49. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  50. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/copilot-instructions.md +0 -0
  51. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/dependabot.yml +0 -0
  52. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/instructions/drift-policy.instructions.md +0 -0
  53. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/instructions/drift-push-gates.instructions.md +0 -0
  54. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/instructions/drift-release-automation.instructions.md +0 -0
  55. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/instructions/drift-release-mandatory.instructions.md +0 -0
  56. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/labeler.yml +0 -0
  57. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/labels.yml +0 -0
  58. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/prompts/PR-Orchestrator.prompt.md +0 -0
  59. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/prompts/README.md +0 -0
  60. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/prompts/_partials/bewertungs-taxonomie.md +0 -0
  61. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/prompts/_partials/issue-filing-external.md +0 -0
  62. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/prompts/_partials/issue-filing.md +0 -0
  63. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/prompts/_partials/konventionen.md +0 -0
  64. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/prompts/drift-agent-ux.prompt.md +0 -0
  65. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/prompts/drift-agent-workflow-test.prompt.md +0 -0
  66. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/prompts/drift-ai-integration.prompt.md +0 -0
  67. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/prompts/drift-ci-gate.prompt.md +0 -0
  68. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/prompts/drift-onboarding.prompt.md +0 -0
  69. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/prompts/drift-signal-quality.prompt.md +0 -0
  70. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/prompts/field-tests/README.md +0 -0
  71. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/prompts/field-tests/drift-context-eval.prompt.md +0 -0
  72. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/prompts/field-tests/drift-field-test.prompt.md +0 -0
  73. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/prompts/field-tests/drift-finding-audit.prompt.md +0 -0
  74. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/prompts/release.prompt.md +0 -0
  75. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/repo-guard.blocklist +0 -0
  76. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/repo-root-allowlist +0 -0
  77. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/skills/drift-effective-usage/SKILL.md +0 -0
  78. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/skills/drift-pr-review/SKILL.md +0 -0
  79. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/skills/drift-release/SKILL.md +0 -0
  80. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/skills/drift-security-triage/SKILL.md +0 -0
  81. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/workflows/README.md +0 -0
  82. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/workflows/codeql.yml +0 -0
  83. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/workflows/dependency-review.yml +0 -0
  84. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/workflows/docs.yml +0 -0
  85. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/workflows/fp-oracle-audit.yml +0 -0
  86. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/workflows/install-smoke.yml +0 -0
  87. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/workflows/labeler.yml +0 -0
  88. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/workflows/package-kpis.yml +0 -0
  89. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/workflows/publish.yml +0 -0
  90. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/workflows/release.yml +0 -0
  91. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/workflows/repo-guard.yml +0 -0
  92. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/workflows/security-hygiene.yml +0 -0
  93. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/workflows/stale.yml +0 -0
  94. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/workflows/validate-release.yml +0 -0
  95. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/workflows/welcome.yml +0 -0
  96. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.github/workflows/workflow-sanity.yml +0 -0
  97. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.gitignore +0 -0
  98. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.markdownlint-cli2.jsonc +0 -0
  99. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.pre-commit-hooks.yaml +0 -0
  100. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.secrets.baseline +0 -0
  101. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.shellcheckrc +0 -0
  102. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.vscode/mcp.json +0 -0
  103. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.vscode/settings.json +0 -0
  104. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/.vscode/tasks.json +0 -0
  105. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/CLAUDE.md +0 -0
  106. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/CODE_OF_CONDUCT.md +0 -0
  107. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/CONTRIBUTING.md +0 -0
  108. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/DEVELOPER.md +0 -0
  109. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/LICENSE +0 -0
  110. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/Makefile +0 -0
  111. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/POLICY.md +0 -0
  112. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/ROADMAP.md +0 -0
  113. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/action.yml +0 -0
  114. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/01611cd8233f2aa70c571f9e8c4ebdc2.json +0 -0
  115. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/1e7cd9a98b3290c41e5e10dec26e35ea.json +0 -0
  116. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/1f2d1a22e9791d9b2f3078612aa0f786.json +0 -0
  117. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/226ac9d816e43df5ddc2a1f105ddc628.json +0 -0
  118. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/2a5d4c9a80c6ea7a6d71ccf7c05c4ad2.json +0 -0
  119. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/2baf118e8a0d13742b95d19cfcfa2e02.json +0 -0
  120. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/3ea99d008b13c9720d79eb1aa60ee1ee.json +0 -0
  121. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/4a8a215b34caf38fa4855682a7e35be5.json +0 -0
  122. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/59d0360c97970456beb61a677362a68a.json +0 -0
  123. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/5e610090f38b99b552831f348dfbdfff.json +0 -0
  124. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/6186fe9a4dbfaeaef44654495863e533.json +0 -0
  125. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/78756d46421bd849ad69b53db46cd81b.json +0 -0
  126. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/cb6867a7470df13c2227fef55eb91904.json +0 -0
  127. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/ce1b0ac9777a398ce99594f664bcd978.json +0 -0
  128. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/d784163017a2693256dad9b1540716ae.json +0 -0
  129. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/e174dbe14bbe023518432fa603b5f4b1.json +0 -0
  130. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/e3b0c44298fc1c149afbf4c8996fb924.json +0 -0
  131. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/e6c7265a3e1a5c08fcae73860b077763.json +0 -0
  132. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/e914253ffba0b698dc7b3ca2da261100.json +0 -0
  133. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/parse/ec975ed99470aaa822b6caf0fa31ffc6.json +0 -0
  134. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/architecture_violation_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  135. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/broad_exception_monoculture_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  136. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/bypass_accumulation_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  137. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/circular_import_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  138. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/co_change_coupling_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  139. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/cognitive_complexity_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  140. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/cohesion_deficit_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  141. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/dead_code_accumulation_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  142. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/doc_impl_drift_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  143. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/exception_contract_drift_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  144. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/explainability_deficit_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  145. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/fan_out_explosion_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  146. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/guard_clause_deficit_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  147. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/hardcoded_secret_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  148. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/insecure_default_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  149. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/missing_authorization_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  150. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/mutant_duplicate_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  151. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/naming_contract_violation_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  152. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/pattern_fragmentation_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  153. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/system_misalignment_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  154. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/temporal_volatility_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  155. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/test_polarity_deficit_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  156. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/.drift-cache-golden/signals/ts_architecture_c23495de147fbcf1_e2453b10bd54639f593783c294ce3751.json +0 -0
  157. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/README.md +0 -0
  158. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/manifest.json +0 -0
  159. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/__init__.py +0 -0
  160. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/connectors/__init__.py +0 -0
  161. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/connectors/db.py +0 -0
  162. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/handler_v1.py +0 -0
  163. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/handler_v2.py +0 -0
  164. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/handlers/__init__.py +0 -0
  165. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/handlers/auth.py +0 -0
  166. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/handlers/orders.py +0 -0
  167. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/handlers/payments.py +0 -0
  168. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/handlers/shipping.py +0 -0
  169. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/models/__init__.py +0 -0
  170. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/models/core.py +0 -0
  171. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/models/enriched.py +0 -0
  172. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/outlier_module.py +0 -0
  173. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/processors/__init__.py +0 -0
  174. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/processors/pricing.py +0 -0
  175. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/processors/transform.py +0 -0
  176. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/processors/validator.py +0 -0
  177. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/service_a.py +0 -0
  178. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/service_b.py +0 -0
  179. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/utils/__init__.py +0 -0
  180. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/utils/formatting.py +0 -0
  181. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/utils/helpers.py +0 -0
  182. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/src/myapp/utils/naming.py +0 -0
  183. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/tests/__init__.py +0 -0
  184. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/corpus/tests/test_api.py +0 -0
  185. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/benchmarks/oracle_repos.json +0 -0
  186. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/decisions/ADR-010-finding-context-triage-policy.md +0 -0
  187. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/decisions/ADR-011-csv-output-format.md +0 -0
  188. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/decisions/ADR-012-copilot-context-actionability-pfs-nbv.md +0 -0
  189. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/decisions/templates/README.md +0 -0
  190. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/decisions/templates/adr-template.md +0 -0
  191. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/decisions/templates/signal-design-template.md +0 -0
  192. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/EPISTEMICS.md +0 -0
  193. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/LAUNCH_CHECKLIST.md +0 -0
  194. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/PRODUCT_STRATEGY.md +0 -0
  195. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/ROOT_POLICY.md +0 -0
  196. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/STUDY.md +0 -0
  197. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/adr/006-context-tagging.md +0 -0
  198. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/adr/007-consistency-proxy-signals.md +0 -0
  199. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/adr/008-intention-contract-proxy-signals.md +0 -0
  200. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/distribution/README.md +0 -0
  201. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/distribution/awesome-submissions.md +0 -0
  202. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/distribution/devto-hashnode-5-repos.md +0 -0
  203. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/distribution/ide-discovery-mvp-spec.md +0 -0
  204. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/distribution/week1-rollout-runbook.md +0 -0
  205. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/drift-architecture-erosion-analysis.md +0 -0
  206. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/go-mvp-scope.md +0 -0
  207. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/language-roadmap.md +0 -0
  208. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/language-support-matrix.md +0 -0
  209. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/migration.md +0 -0
  210. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/python-baseline.md +0 -0
  211. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/python-rule-inventory.md +0 -0
  212. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs/tsjs-mvp-scope.md +0 -0
  213. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/algorithms/deep-dive.md +0 -0
  214. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/algorithms/scoring.md +0 -0
  215. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/algorithms/signals.md +0 -0
  216. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/assets/logo.svg +0 -0
  217. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/benchmarking.md +0 -0
  218. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/case-studies/django.md +0 -0
  219. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/case-studies/fastapi.md +0 -0
  220. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/case-studies/index.md +0 -0
  221. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/case-studies/pydantic.md +0 -0
  222. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/changelog.md +0 -0
  223. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/comparisons/drift-vs-architecture-conformance.md +0 -0
  224. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/comparisons/drift-vs-ruff.md +0 -0
  225. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/comparisons/drift-vs-semgrep-codeql.md +0 -0
  226. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/comparisons/index.md +0 -0
  227. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/contributing.md +0 -0
  228. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/faq.md +0 -0
  229. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/getting-started/configuration.md +0 -0
  230. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/getting-started/finding-triage.md +0 -0
  231. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/getting-started/installation.md +0 -0
  232. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/getting-started/quickstart.md +0 -0
  233. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/getting-started/team-rollout.md +0 -0
  234. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/getting-started/troubleshooting.md +0 -0
  235. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/glossary.md +0 -0
  236. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/index.md +0 -0
  237. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/integrations.md +0 -0
  238. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/product/example-findings.md +0 -0
  239. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/product/press-brand.md +0 -0
  240. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/product-strategy.md +0 -0
  241. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/reference/api-outputs.md +0 -0
  242. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/reference/negative-context.md +0 -0
  243. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/reference/performance.md +0 -0
  244. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/reference/signals/pfs.md +0 -0
  245. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/stability.md +0 -0
  246. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/start-here.md +0 -0
  247. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/study.md +0 -0
  248. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/trust-evidence.md +0 -0
  249. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/use-cases/architectural-linter-ai-teams.md +0 -0
  250. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/use-cases/architecture-drift-python.md +0 -0
  251. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/use-cases/ci-architecture-checks-sarif.md +0 -0
  252. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/use-cases/index.md +0 -0
  253. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/docs-site/use-cases/technical-debt-ai-codebases.md +0 -0
  254. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/drift.example.yaml +0 -0
  255. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/demo-project/README.md +0 -0
  256. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/demo-project/api/__init__.py +0 -0
  257. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/demo-project/api/routes.py +0 -0
  258. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/demo-project/db/__init__.py +0 -0
  259. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/demo-project/db/models.py +0 -0
  260. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/demo-project/services/__init__.py +0 -0
  261. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/demo-project/services/email_service.py +0 -0
  262. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/demo-project/services/order_service.py +0 -0
  263. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/demo-project/services/user_service.py +0 -0
  264. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/demo-project/utils/__init__.py +0 -0
  265. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/demo-project/utils/validators.py +0 -0
  266. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/demo_fastapi.md +0 -0
  267. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/drift-check.yml +0 -0
  268. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/package-kpis/README.md +0 -0
  269. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/package-kpis/defects.csv +0 -0
  270. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/package-kpis/kpi-thresholds.json +0 -0
  271. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/package-kpis/usage.csv +0 -0
  272. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/vibe-coding/README.md +0 -0
  273. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/vibe-coding/drift-gate.yml +0 -0
  274. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/vibe-coding/drift.yaml +0 -0
  275. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/vibe-coding/mcp.json +0 -0
  276. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/vibe-coding/pre-push +0 -0
  277. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/vibe-coding/setup-baseline.sh +0 -0
  278. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/examples/vibe-coding/weekly-check.sh +0 -0
  279. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/overrides/home.html +0 -0
  280. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/__init__.py +0 -0
  281. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/__main__.py +0 -0
  282. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/analyzer.py +0 -0
  283. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/analyzers/typescript/__init__.py +0 -0
  284. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/analyzers/typescript/_path_utils.py +0 -0
  285. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/analyzers/typescript/alias_resolver.py +0 -0
  286. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/analyzers/typescript/barrel_resolver.py +0 -0
  287. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/analyzers/typescript/import_graph.py +0 -0
  288. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/analyzers/typescript/shared.py +0 -0
  289. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/analyzers/typescript/workspace_boundaries.py +0 -0
  290. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/api.py +0 -0
  291. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/api_helpers.py +0 -0
  292. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/baseline.py +0 -0
  293. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/cache.py +0 -0
  294. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/cli.py +0 -0
  295. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/__init__.py +0 -0
  296. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/_io.py +0 -0
  297. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/analyze.py +0 -0
  298. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/badge.py +0 -0
  299. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/baseline.py +0 -0
  300. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/brief.py +0 -0
  301. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/check.py +0 -0
  302. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/config_cmd.py +0 -0
  303. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/copilot_context.py +0 -0
  304. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/diff_cmd.py +0 -0
  305. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/explain.py +0 -0
  306. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/export_context.py +0 -0
  307. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/fix_plan.py +0 -0
  308. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/init_cmd.py +0 -0
  309. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/mcp.py +0 -0
  310. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/patterns.py +0 -0
  311. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/scan.py +0 -0
  312. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/timeline.py +0 -0
  313. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/trend.py +0 -0
  314. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/commands/validate_cmd.py +0 -0
  315. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/config.py +0 -0
  316. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/context_tags.py +0 -0
  317. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/copilot_context.py +0 -0
  318. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/embeddings.py +0 -0
  319. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/errors.py +0 -0
  320. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/finding_context.py +0 -0
  321. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/guardrails.py +0 -0
  322. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/incremental.py +0 -0
  323. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/ingestion/__init__.py +0 -0
  324. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/ingestion/ast_parser.py +0 -0
  325. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/ingestion/file_discovery.py +0 -0
  326. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/ingestion/git_history.py +0 -0
  327. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/ingestion/ts_parser.py +0 -0
  328. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/models.py +0 -0
  329. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/negative_context.py +0 -0
  330. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/negative_context_export.py +0 -0
  331. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/output/__init__.py +0 -0
  332. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/output/agent_tasks.py +0 -0
  333. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/output/csv_output.py +0 -0
  334. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/output/github_format.py +0 -0
  335. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/output/json_output.py +0 -0
  336. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/output/rich_output.py +0 -0
  337. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/pipeline.py +0 -0
  338. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/profiles.py +0 -0
  339. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/py.typed +0 -0
  340. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/recommendations.py +0 -0
  341. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/rules/tsjs/circular_module_detection.py +0 -0
  342. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/rules/tsjs/cross_package_import_ban.py +0 -0
  343. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/rules/tsjs/layer_leak_detection.py +0 -0
  344. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/rules/tsjs/ui_to_infra_import_ban.py +0 -0
  345. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/scope_resolver.py +0 -0
  346. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/scoring/__init__.py +0 -0
  347. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/scoring/engine.py +0 -0
  348. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/__init__.py +0 -0
  349. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/_utils.py +0 -0
  350. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/architecture_violation.py +0 -0
  351. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/base.py +0 -0
  352. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/broad_exception_monoculture.py +0 -0
  353. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/bypass_accumulation.py +0 -0
  354. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/circular_import.py +0 -0
  355. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/co_change_coupling.py +0 -0
  356. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/cognitive_complexity.py +0 -0
  357. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/cohesion_deficit.py +0 -0
  358. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/dead_code_accumulation.py +0 -0
  359. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/doc_impl_drift.py +0 -0
  360. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/exception_contract_drift.py +0 -0
  361. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/explainability_deficit.py +0 -0
  362. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/fan_out_explosion.py +0 -0
  363. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/guard_clause_deficit.py +0 -0
  364. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/hardcoded_secret.py +0 -0
  365. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/insecure_default.py +0 -0
  366. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/missing_authorization.py +0 -0
  367. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/mutant_duplicates.py +0 -0
  368. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/naming_contract_violation.py +0 -0
  369. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/pattern_fragmentation.py +0 -0
  370. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/system_misalignment.py +0 -0
  371. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/temporal_volatility.py +0 -0
  372. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/test_polarity_deficit.py +0 -0
  373. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/signals/ts_architecture.py +0 -0
  374. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/suppression.py +0 -0
  375. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/telemetry.py +0 -0
  376. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/timeline.py +0 -0
  377. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/src/drift/trend_history.py +0 -0
  378. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/__init__.py +0 -0
  379. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/conftest.py +0 -0
  380. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/__init__.py +0 -0
  381. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/ground_truth.py +0 -0
  382. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/study_samples/debt_correlation.json +0 -0
  383. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/study_samples/rater_matrix.json +0 -0
  384. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/study_samples/self_analysis_reports.json +0 -0
  385. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_alias_resolution/src/app.ts +0 -0
  386. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_alias_resolution/src/core/logger.ts +0 -0
  387. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_alias_resolution/src/shared/config.ts +0 -0
  388. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_alias_resolution/tsconfig.json +0 -0
  389. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_alias_resolution_extends/src/app.ts +0 -0
  390. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_alias_resolution_extends/src/base/logger.ts +0 -0
  391. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_alias_resolution_extends/src/leaf/feature.ts +0 -0
  392. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_alias_resolution_extends/src/mid/util.ts +0 -0
  393. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_alias_resolution_extends/src/override/config.ts +0 -0
  394. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_alias_resolution_extends/src/shared/config.ts +0 -0
  395. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_alias_resolution_extends/tsconfig.base.json +0 -0
  396. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_alias_resolution_extends/tsconfig.json +0 -0
  397. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_alias_resolution_extends/tsconfig.mid.json +0 -0
  398. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_barrel_resolution/src/app.ts +0 -0
  399. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_barrel_resolution/src/app_tsx.ts +0 -0
  400. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_barrel_resolution/src/button.tsx +0 -0
  401. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_barrel_resolution/src/index.ts +0 -0
  402. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_barrel_resolution/src/view/card.tsx +0 -0
  403. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_barrel_resolution/src/view/index.tsx +0 -0
  404. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_graph_relative/app.ts +0 -0
  405. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_graph_relative/components/button.tsx +0 -0
  406. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_graph_relative/components/index.ts +0 -0
  407. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_graph_relative/lib/util.ts +0 -0
  408. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_cross_package/negative/cross_package_import_ban.json +0 -0
  409. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_cross_package/negative/package.json +0 -0
  410. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_cross_package/negative/packages/app/src/main.ts +0 -0
  411. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_cross_package/negative/packages/ui/src/button.ts +0 -0
  412. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_cross_package/positive/cross_package_import_ban.json +0 -0
  413. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_cross_package/positive/package.json +0 -0
  414. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_cross_package/positive/packages/app/src/main.ts +0 -0
  415. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_cross_package/positive/packages/ui/src/button.ts +0 -0
  416. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_cycles/negative/src/a.ts +0 -0
  417. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_cycles/negative/src/b.ts +0 -0
  418. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_cycles/positive/src/a.ts +0 -0
  419. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_cycles/positive/src/b.ts +0 -0
  420. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_layer_leak/negative/layer_leak_detection.json +0 -0
  421. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_layer_leak/negative/src/infra/storage.ts +0 -0
  422. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_layer_leak/negative/src/ui/view.ts +0 -0
  423. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_layer_leak/positive/layer_leak_detection.json +0 -0
  424. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_layer_leak/positive/src/infra/storage.ts +0 -0
  425. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_layer_leak/positive/src/ui/view.ts +0 -0
  426. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_ui_to_infra/negative/src/infra/storage.ts +0 -0
  427. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_ui_to_infra/negative/src/ui/components/button.ts +0 -0
  428. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_ui_to_infra/negative/src/ui/view.ts +0 -0
  429. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_ui_to_infra/negative/ui_to_infra_import_ban.json +0 -0
  430. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_ui_to_infra/positive/src/infra/storage.ts +0 -0
  431. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_ui_to_infra/positive/src/ui/view.ts +0 -0
  432. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_rule_ui_to_infra/positive/ui_to_infra_import_ban.json +0 -0
  433. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_workspace_boundaries/package.json +0 -0
  434. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_workspace_boundaries/packages/app/src/main.ts +0 -0
  435. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_workspace_boundaries/packages/ui/src/button.tsx +0 -0
  436. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/fixtures/tsjs_workspace_boundaries/vite.config.ts +0 -0
  437. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/golden/corpus_snapshot.json +0 -0
  438. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/golden/corpus_snapshot.sarif +0 -0
  439. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_ablation.py +0 -0
  440. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_agent_native_cli.py +0 -0
  441. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_agent_tasks.py +0 -0
  442. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_ai_tool_indicators.py +0 -0
  443. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_analysis_degradation.py +0 -0
  444. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_analysis_edge_cases.py +0 -0
  445. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_architecture_violation.py +0 -0
  446. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_ast_parser.py +0 -0
  447. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_avs_enhanced.py +0 -0
  448. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_avs_missing_patterns_evidence.py +0 -0
  449. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_avs_mutations.py +0 -0
  450. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_badge_command.py +0 -0
  451. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_baseline.py +0 -0
  452. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_benchmark_label_keys.py +0 -0
  453. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_benchmark_structure.py +0 -0
  454. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_bypass_accumulation.py +0 -0
  455. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_cache_resilience.py +0 -0
  456. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_ci_reality.py +0 -0
  457. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_circular_import.py +0 -0
  458. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_cli_runtime.py +0 -0
  459. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_co_change_coupling.py +0 -0
  460. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_cognitive_complexity.py +0 -0
  461. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_cohesion_deficit.py +0 -0
  462. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_compat.py +0 -0
  463. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_config.py +0 -0
  464. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_config_validate.py +0 -0
  465. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_consistency_proxies.py +0 -0
  466. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_console_scripts.py +0 -0
  467. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_context_tags.py +0 -0
  468. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_copilot_context_actionability.py +0 -0
  469. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_copilot_context_coverage.py +0 -0
  470. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_csv_output.py +0 -0
  471. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_dead_code_accumulation.py +0 -0
  472. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_delta_first.py +0 -0
  473. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_dia_enhanced.py +0 -0
  474. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_dx_features.py +0 -0
  475. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_embeddings.py +0 -0
  476. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_enterprise_governance_assets.py +0 -0
  477. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_exception_contract_drift.py +0 -0
  478. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_fan_out_explosion.py +0 -0
  479. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_fetch_github_usage.py +0 -0
  480. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_fetch_pypistats.py +0 -0
  481. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_file_discovery.py +0 -0
  482. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_finding_context.py +0 -0
  483. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_fix_actionability.py +0 -0
  484. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_git_history_edge_cases.py +0 -0
  485. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_git_history_safety.py +0 -0
  486. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_guard_clause_deficit.py +0 -0
  487. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_hardcoded_secret.py +0 -0
  488. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_incremental.py +0 -0
  489. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_init_cmd.py +0 -0
  490. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_insecure_default.py +0 -0
  491. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_integration.py +0 -0
  492. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_json_output.py +0 -0
  493. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_malformed_history.py +0 -0
  494. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_mcp_copilot.py +0 -0
  495. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_mcp_hardening.py +0 -0
  496. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_mirofish_signal_improvements.py +0 -0
  497. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_missing_authorization.py +0 -0
  498. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_model_consistency.py +0 -0
  499. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_module_entrypoint.py +0 -0
  500. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_mutant_duplicates_edge_cases.py +0 -0
  501. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_naming_contract_violation.py +0 -0
  502. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_negative_context.py +0 -0
  503. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_negative_context_export.py +0 -0
  504. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_nudge.py +0 -0
  505. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_output_golden.py +0 -0
  506. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_output_minimal_and_signal_labels.py +0 -0
  507. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_package_kpis.py +0 -0
  508. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_parse_file_resilience.py +0 -0
  509. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_path_overrides.py +0 -0
  510. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_pattern_fragmentation.py +0 -0
  511. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_pipeline_components.py +0 -0
  512. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_precision_recall.py +0 -0
  513. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_property_based.py +0 -0
  514. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_recommendations.py +0 -0
  515. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_recommendations_edge_cases.py +0 -0
  516. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_release_automation.py +0 -0
  517. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_release_discipline.py +0 -0
  518. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_repo_hygiene.py +0 -0
  519. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_rule_ids.py +0 -0
  520. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_sarif_contract.py +0 -0
  521. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_scan_diversity.py +0 -0
  522. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_scope_resolver.py +0 -0
  523. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_scoring.py +0 -0
  524. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_scoring_edge_cases.py +0 -0
  525. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_self_command.py +0 -0
  526. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_signal_contract.py +0 -0
  527. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_signal_thresholds.py +0 -0
  528. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_signal_utils.py +0 -0
  529. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_smoke_real_repos.py +0 -0
  530. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_study_infrastructure.py +0 -0
  531. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_suppression.py +0 -0
  532. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_telemetry.py +0 -0
  533. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_test_polarity_deficit.py +0 -0
  534. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_timeline.py +0 -0
  535. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_trend_chart.py +0 -0
  536. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_trend_command_history.py +0 -0
  537. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_ts_signals_phase2.py +0 -0
  538. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_ts_signals_phase3.py +0 -0
  539. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_tsjs_alias_resolution.py +0 -0
  540. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_tsjs_barrel_resolution.py +0 -0
  541. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_tsjs_import_graph_relative.py +0 -0
  542. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_tsjs_rule_circular_module_detection.py +0 -0
  543. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_tsjs_rule_cross_package_import_ban.py +0 -0
  544. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_tsjs_rule_layer_leak_detection.py +0 -0
  545. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_tsjs_rule_ui_to_infra_import_ban.py +0 -0
  546. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_tsjs_workspace_boundaries.py +0 -0
  547. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_typescript_parser.py +0 -0
  548. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/tests/test_workspace_value.py +0 -0
  549. {drift_analyzer-2.4.2 → drift_analyzer-2.4.4}/uv.lock +0 -0
@@ -0,0 +1,30 @@
1
+ # Drift code ownership — used for automatic PR review requests.
2
+ # See: https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
3
+
4
+ # Default owner for everything
5
+ * @mick-gsk
6
+
7
+ # Signal detectors
8
+ src/drift/signals/ @mick-gsk
9
+
10
+ # Scoring and aggregation
11
+ src/drift/scoring/ @mick-gsk
12
+
13
+ # Ingestion (AST, git, file discovery)
14
+ src/drift/ingestion/ @mick-gsk
15
+
16
+ # Tests and fixtures
17
+ tests/ @mick-gsk
18
+
19
+ # Documentation site
20
+ docs-site/ @mick-gsk
21
+
22
+ # Security-sensitive paths (require extra review attention)
23
+ SECURITY.md @mick-gsk
24
+ .github/workflows/security-hygiene.yml @mick-gsk
25
+ .github/workflows/codeql.yml @mick-gsk
26
+ .github/workflows/publish.yml @mick-gsk
27
+ .pre-commit-config.yaml @mick-gsk
28
+ .secrets.baseline @mick-gsk
29
+ src/drift/ingestion/ast_parser.py @mick-gsk
30
+ src/drift/ingestion/git_history.py @mick-gsk
@@ -5,7 +5,7 @@ body:
5
5
  attributes:
6
6
  value: |
7
7
  **Before posting**, please check:
8
- - [Documentation](https://sauremilk.github.io/drift/)
8
+ - [Documentation](https://mick-gsk.github.io/drift/)
9
9
  - [Existing discussions](https://github.com/mick-gsk/drift/discussions)
10
10
 
11
11
  - type: textarea
@@ -0,0 +1 @@
1
+ github: [mick-gsk]
@@ -10,7 +10,7 @@ contact_links:
10
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
- url: https://sauremilk.github.io/drift/
13
+ url: https://mick-gsk.github.io/drift/
14
14
  about: Check the docs site for setup, configuration, and examples.
15
15
  - name: Security report
16
16
  url: https://github.com/mick-gsk/drift/security/policy
@@ -0,0 +1,63 @@
1
+ name: "Documentation drift"
2
+ description: "Report a documentation-code inconsistency found by the doc-consistency workflow or manual review."
3
+ title: "docs: [category] — [file]"
4
+ labels: ["doc-drift"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Thanks for reporting a documentation-code inconsistency.
10
+ Please fill out the fields below so we can fix the drift.
11
+
12
+ - type: dropdown
13
+ id: category
14
+ attributes:
15
+ label: Category
16
+ description: What type of inconsistency is this?
17
+ options:
18
+ - Signal count mismatch
19
+ - Weight table mismatch
20
+ - Version reference outdated
21
+ - Broken internal link
22
+ - CLI help / command mismatch
23
+ - Config schema mismatch
24
+ - DIA finding (README/ADR drift)
25
+ - Other
26
+ validations:
27
+ required: true
28
+
29
+ - type: input
30
+ id: source_file
31
+ attributes:
32
+ label: Affected file
33
+ description: Path to the documentation file with the inconsistency.
34
+ placeholder: "docs-site/algorithms/signals.md"
35
+ validations:
36
+ required: true
37
+
38
+ - type: textarea
39
+ id: expected
40
+ attributes:
41
+ label: Expected (from code)
42
+ description: What the code / config says.
43
+ placeholder: "15 scoring signals"
44
+ validations:
45
+ required: true
46
+
47
+ - type: textarea
48
+ id: actual
49
+ attributes:
50
+ label: Actual (in docs)
51
+ description: What the documentation currently says.
52
+ placeholder: "13 scoring signals"
53
+ validations:
54
+ required: true
55
+
56
+ - type: textarea
57
+ id: fix_suggestion
58
+ attributes:
59
+ label: Suggested fix
60
+ description: How should the documentation be updated?
61
+ placeholder: "Update signal count from 13 to 15 in line 42"
62
+ validations:
63
+ required: false
@@ -228,3 +228,81 @@ jobs:
228
228
  $diffBase = "origin/$($env:GITHUB_BASE_REF)"
229
229
  }
230
230
  & $env:PYTHON_BIN scripts/check_risk_audit.py --diff-base $diffBase
231
+
232
+ # --- Performance regression loop (conditional on PR label) ---
233
+ - name: Performance benchmark (perf-loop PR)
234
+ if: >-
235
+ github.event_name == 'pull_request' &&
236
+ contains(github.event.pull_request.labels.*.name, 'perf-regression-loop')
237
+ shell: powershell
238
+ run: |
239
+ $raw = & $env:PYTHON_BIN scripts/perf_gate.py `
240
+ --budget 30 `
241
+ --target-path src/drift `
242
+ --runs 3 `
243
+ --json 2>&1
244
+ [IO.File]::WriteAllText("$PWD\perf_result.json", ($raw -join "`n"), [Text.Encoding]::UTF8)
245
+
246
+ & $env:PYTHON_BIN -c @'
247
+ import json, sys
248
+ with open("perf_result.json", encoding="utf-8") as f:
249
+ r = json.load(f)
250
+ wc = r["wall_clock_seconds"]
251
+ budget = r["budget_seconds"]
252
+ if r["passed"]:
253
+ print(f"PASS: {wc:.1f}s < {budget:.0f}s budget")
254
+ else:
255
+ print(f"FAIL: {wc:.1f}s > {budget:.0f}s budget (+{r['overshoot_seconds']:.1f}s)")
256
+ sys.exit(1)
257
+ '@
258
+
259
+ - name: Post benchmark result to PR
260
+ if: >-
261
+ github.event_name == 'pull_request' &&
262
+ contains(github.event.pull_request.labels.*.name, 'perf-regression-loop') &&
263
+ always()
264
+ shell: powershell
265
+ env:
266
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
267
+ run: |
268
+ if (-not (Test-Path perf_result.json)) {
269
+ Write-Host "No perf_result.json — benchmark step likely skipped"
270
+ exit 0
271
+ }
272
+
273
+ $r = Get-Content perf_result.json -Raw | ConvertFrom-Json
274
+ $wc = $r.wall_clock_seconds
275
+ $budget = $r.budget_seconds
276
+ $iter = $r.iteration
277
+ $maxIter = $r.max_iterations
278
+ $findings = $r.findings_count
279
+ $prNum = "${{ github.event.pull_request.number }}"
280
+
281
+ if ($r.passed) {
282
+ $comment = "### Performance Gate: PASS`n`n"
283
+ $comment += "| Metric | Value |`n|--------|-------|`n"
284
+ $comment += "| Wall-clock (median) | $($wc)s |`n"
285
+ $comment += "| Budget | $($budget)s |`n"
286
+ $comment += "| Findings | $findings |`n`n"
287
+ $comment += "Budget met. This PR can be merged."
288
+ } else {
289
+ $overshoot = $r.overshoot_seconds
290
+ $comment = "### Performance Gate: FAIL`n`n"
291
+ $comment += "| Metric | Value |`n|--------|-------|`n"
292
+ $comment += "| Wall-clock (median) | $($wc)s |`n"
293
+ $comment += "| Budget | $($budget)s |`n"
294
+ $comment += "| Overshoot | +$($overshoot)s |`n"
295
+ $comment += "| Iteration | $iter / $maxIter |`n"
296
+ $comment += "| Findings | $findings |`n`n"
297
+ $comment += "Budget exceeded by $($overshoot)s."
298
+
299
+ if ($iter -lt $maxIter) {
300
+ $comment += "`n`n@copilot Iteration $($iter + 1)/$maxIter still $($overshoot)s over budget. Focus on top hotspots from the benchmark artifact."
301
+ } else {
302
+ $comment += "`n`nMax iterations ($maxIter) reached. Manual optimization required."
303
+ gh pr edit $prNum --add-label "needs-manual-review"
304
+ }
305
+ }
306
+
307
+ [IO.File]::WriteAllText("$PWD\pr_comment.md", $comment, [Text.Encoding]::UTF8)
308
+ gh pr comment $prNum --body-file pr_comment.md
@@ -0,0 +1,67 @@
1
+ name: Doc-consistency check
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ schedule:
6
+ # Weekly Monday 08:00 UTC
7
+ - cron: '0 8 * * 1'
8
+
9
+ permissions:
10
+ contents: read
11
+ issues: write
12
+
13
+ jobs:
14
+ doc-consistency:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - name: Checkout
18
+ uses: actions/checkout@v5
19
+ with:
20
+ fetch-depth: 0
21
+
22
+ - name: Set up Python
23
+ uses: actions/setup-python@v5
24
+ with:
25
+ python-version: '3.12'
26
+
27
+ - name: Install drift
28
+ run: pip install -e .
29
+
30
+ - name: Model consistency check
31
+ id: consistency
32
+ run: |
33
+ python scripts/check_model_consistency.py --json > consistency.json || true
34
+ echo "count=$(python -c "import json; d=json.load(open('consistency.json')); print(len(d))")" >> "$GITHUB_OUTPUT"
35
+
36
+ - name: Doc link check
37
+ id: links
38
+ run: |
39
+ python scripts/check_doc_links.py > links.json || true
40
+ echo "count=$(python -c "import json; d=json.load(open('links.json')); print(len(d))")" >> "$GITHUB_OUTPUT"
41
+
42
+ - name: DIA self-analysis
43
+ id: dia
44
+ run: |
45
+ drift analyze --repo . --select DIA --format json --max-findings 50 --exit-zero > dia.json || true
46
+ echo "count=$(python -c "import json; d=json.load(open('dia.json')); print(len(d.get('findings',[])))" 2>/dev/null || echo 0)" >> "$GITHUB_OUTPUT"
47
+
48
+ - name: Create issues for discrepancies
49
+ env:
50
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
51
+ run: |
52
+ python scripts/doc_consistency_issues.py \
53
+ --consistency consistency.json \
54
+ --links links.json \
55
+ --dia dia.json \
56
+ --max-issues 5
57
+
58
+ - name: Write summary
59
+ if: always()
60
+ run: |
61
+ echo "## Doc-Consistency Results" >> "$GITHUB_STEP_SUMMARY"
62
+ echo "" >> "$GITHUB_STEP_SUMMARY"
63
+ echo "| Check | Discrepancies |" >> "$GITHUB_STEP_SUMMARY"
64
+ echo "|-------|---------------|" >> "$GITHUB_STEP_SUMMARY"
65
+ echo "| Model consistency | ${{ steps.consistency.outputs.count || '0' }} |" >> "$GITHUB_STEP_SUMMARY"
66
+ echo "| Doc links | ${{ steps.links.outputs.count || '0' }} |" >> "$GITHUB_STEP_SUMMARY"
67
+ echo "| DIA findings | ${{ steps.dia.outputs.count || '0' }} |" >> "$GITHUB_STEP_SUMMARY"
@@ -0,0 +1,226 @@
1
+ name: Performance Regression Loop
2
+
3
+ # Automated iterative performance improvement cycle.
4
+ # Runs benchmark + cProfile → creates/updates GitHub issue with profiler
5
+ # data → assigns Copilot Coding Agent for optimization → re-benchmarks
6
+ # on resulting PR. Loop stops when wall-clock budget is met or max
7
+ # iterations are reached.
8
+
9
+ on:
10
+ workflow_dispatch:
11
+ inputs:
12
+ budget:
13
+ description: "Wall-clock budget in seconds"
14
+ required: false
15
+ default: "30"
16
+ type: string
17
+ max_iterations:
18
+ description: "Maximum optimization iterations"
19
+ required: false
20
+ default: "5"
21
+ type: string
22
+ target_path:
23
+ description: "Subpath to benchmark (default: src/drift)"
24
+ required: false
25
+ default: "src/drift"
26
+ type: string
27
+ schedule:
28
+ # Weekly Sunday 04:00 UTC
29
+ - cron: "0 4 * * 0"
30
+
31
+ concurrency:
32
+ group: "perf-regression-loop"
33
+ cancel-in-progress: false
34
+
35
+ permissions:
36
+ contents: read
37
+ issues: write
38
+ pull-requests: write
39
+
40
+ jobs:
41
+ benchmark:
42
+ name: Performance benchmark
43
+ # NOTE: Uses GitHub-hosted Windows runner (consistent with CI).
44
+ runs-on: windows-latest
45
+ outputs:
46
+ passed: ${{ steps.gate.outputs.passed }}
47
+ wall_clock: ${{ steps.gate.outputs.wall_clock }}
48
+ budget: ${{ steps.gate.outputs.budget }}
49
+ issue_body: ${{ steps.gate.outputs.issue_body }}
50
+ findings_count: ${{ steps.gate.outputs.findings_count }}
51
+ steps:
52
+ - uses: actions/checkout@v4
53
+ with:
54
+ fetch-depth: 0
55
+
56
+ - name: Resolve Python executable
57
+ shell: powershell
58
+ run: |
59
+ $resolved = $false
60
+ if (Get-Command python -ErrorAction SilentlyContinue) {
61
+ python --version
62
+ if ($LASTEXITCODE -eq 0) {
63
+ "PYTHON_BIN=python" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
64
+ $resolved = $true
65
+ }
66
+ }
67
+ if (-not $resolved -and (Get-Command py -ErrorAction SilentlyContinue)) {
68
+ py --version
69
+ if ($LASTEXITCODE -eq 0) {
70
+ "PYTHON_BIN=py" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
71
+ $resolved = $true
72
+ }
73
+ }
74
+ if (-not $resolved) {
75
+ Write-Error "Neither 'python' nor 'py' is available on this runner."
76
+ exit 1
77
+ }
78
+
79
+ - name: Setup Python
80
+ uses: actions/setup-python@v5
81
+ with:
82
+ python-version: "3.12"
83
+
84
+ - name: Install dependencies
85
+ shell: powershell
86
+ run: |
87
+ & $env:PYTHON_BIN -m pip install --upgrade pip
88
+ & $env:PYTHON_BIN -m pip install -e ".[dev]"
89
+
90
+ - name: Determine iteration
91
+ id: iter
92
+ shell: powershell
93
+ env:
94
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
95
+ run: |
96
+ # Count existing perf-regression-loop issue comments as iteration proxy
97
+ $issues = gh issue list --label "perf-regression-loop" --state open --json number --jq '.[0].number' 2>$null
98
+ if ($issues -and $issues -ne "null") {
99
+ $comments = gh issue view $issues --json comments --jq '.comments | length' 2>$null
100
+ $iter = [int]$comments + 1
101
+ } else {
102
+ $iter = 1
103
+ }
104
+ "iteration=$iter" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
105
+ Write-Host "Iteration: $iter"
106
+
107
+ - name: Run performance gate
108
+ id: gate
109
+ shell: powershell
110
+ run: |
111
+ $budget = "${{ inputs.budget || '30' }}"
112
+ $maxIter = "${{ inputs.max_iterations || '5' }}"
113
+ $targetPath = "${{ inputs.target_path || 'src/drift' }}"
114
+ $iteration = "${{ steps.iter.outputs.iteration }}"
115
+
116
+ $raw = & $env:PYTHON_BIN scripts/perf_gate.py `
117
+ --budget $budget `
118
+ --target-path $targetPath `
119
+ --runs 3 `
120
+ --warmup 1 `
121
+ --iteration $iteration `
122
+ --max-iterations $maxIter `
123
+ --json 2>&1
124
+ # Write without BOM (PS 5.1 compat)
125
+ [IO.File]::WriteAllText("$PWD\perf_result.json", ($raw -join "`n"), [Text.Encoding]::UTF8)
126
+
127
+ $result = $raw | ConvertFrom-Json
128
+
129
+ "passed=$($result.passed.ToString().ToLower())" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
130
+ "wall_clock=$($result.wall_clock_seconds)" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
131
+ "budget=$($result.budget_seconds)" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
132
+ "findings_count=$($result.findings_count)" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
133
+
134
+ # Write agent_prompt to a file without BOM (too large for output)
135
+ [IO.File]::WriteAllText("$PWD\agent_prompt.md", $result.agent_prompt, [Text.Encoding]::UTF8)
136
+
137
+ if ($result.passed) {
138
+ Write-Host "PASS: $($result.wall_clock_seconds)s < $($result.budget_seconds)s"
139
+ } else {
140
+ Write-Host "FAIL: $($result.wall_clock_seconds)s > $($result.budget_seconds)s"
141
+ }
142
+
143
+ - name: Upload benchmark artifacts
144
+ uses: actions/upload-artifact@v4
145
+ with:
146
+ name: perf-result
147
+ path: |
148
+ perf_result.json
149
+ agent_prompt.md
150
+
151
+ trigger-agent:
152
+ name: Create/update optimization issue
153
+ needs: benchmark
154
+ if: needs.benchmark.outputs.passed == 'false'
155
+ runs-on: windows-latest
156
+ env:
157
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
158
+ steps:
159
+ - uses: actions/checkout@v4
160
+
161
+ - name: Download benchmark artifacts
162
+ uses: actions/download-artifact@v4
163
+ with:
164
+ name: perf-result
165
+
166
+ - name: Create or update issue
167
+ shell: powershell
168
+ run: |
169
+ $body = Get-Content agent_prompt.md -Raw -Encoding utf8
170
+ $wall = "${{ needs.benchmark.outputs.wall_clock }}"
171
+ $budget = "${{ needs.benchmark.outputs.budget }}"
172
+
173
+ # Check for existing open issue
174
+ $existingNum = gh issue list `
175
+ --label "perf-regression-loop" `
176
+ --state open `
177
+ --json number `
178
+ --jq '.[0].number' 2>$null
179
+
180
+ if ($existingNum -and $existingNum -ne "null" -and $existingNum -ne "") {
181
+ Write-Host "Updating existing issue #$existingNum"
182
+ gh issue comment $existingNum --body $body
183
+ } else {
184
+ Write-Host "Creating new issue"
185
+ $title = "perf: Self-Analysis at ${wall}s exceeds ${budget}s budget"
186
+ $num = gh issue create `
187
+ --title $title `
188
+ --body $body `
189
+ --label "perf-regression-loop" `
190
+ --label "performance" | Select-String -Pattern '#(\d+)' | ForEach-Object { $_.Matches.Groups[1].Value }
191
+
192
+ if ($num) {
193
+ Write-Host "Created issue #$num, assigning to copilot"
194
+ gh issue edit $num --add-assignee copilot
195
+ }
196
+ }
197
+
198
+ budget-met:
199
+ name: Budget met — no action needed
200
+ needs: benchmark
201
+ if: needs.benchmark.outputs.passed == 'true'
202
+ runs-on: windows-latest
203
+ env:
204
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
205
+ steps:
206
+ - uses: actions/checkout@v4
207
+
208
+ - name: Close resolved issues
209
+ shell: powershell
210
+ run: |
211
+ # If budget is met and there's an open perf issue, close it
212
+ $existingNum = gh issue list `
213
+ --label "perf-regression-loop" `
214
+ --state open `
215
+ --json number `
216
+ --jq '.[0].number' 2>$null
217
+
218
+ if ($existingNum -and $existingNum -ne "null" -and $existingNum -ne "") {
219
+ $wall = "${{ needs.benchmark.outputs.wall_clock }}"
220
+ $budget = "${{ needs.benchmark.outputs.budget }}"
221
+ gh issue comment $existingNum --body "Performance budget met: ${wall}s < ${budget}s. Closing."
222
+ gh issue close $existingNum --reason completed
223
+ Write-Host "Closed issue #$existingNum"
224
+ } else {
225
+ Write-Host "No open perf-regression-loop issue to close"
226
+ }
@@ -19,7 +19,7 @@ repos:
19
19
  rev: v1.5.0
20
20
  hooks:
21
21
  - id: detect-secrets
22
- exclude: "(^|/)(tests/test_hardcoded_secret\\.py|tests/test_insecure_default\\.py|tests/golden/corpus_snapshot\\.json|\\.github/instructions/drift-release-automation\\.instructions\\.md)$"
22
+ exclude: "(^|/)(tests/test_hardcoded_secret\\.py|tests/test_insecure_default\\.py|tests/golden/corpus_snapshot\\.json|src/drift/negative_context\\.py|\\.github/instructions/drift-release-automation\\.instructions\\.md)$"
23
23
  args:
24
24
  - --baseline
25
25
  - .secrets.baseline
@@ -18,10 +18,12 @@
18
18
 
19
19
  ### Fixed
20
20
 
21
+ - Complete repository transfer cleanup by replacing remaining `sauremilk` owner/docs references in operational metadata, docs, and `drift self` guidance with `mick-gsk` (#132).
21
22
  - Prevent MCP stdio hangs on Windows by enforcing `stdin=subprocess.DEVNULL` on all relevant `subprocess.run` calls, making `drift_nudge` async like the other MCP tools, adding uniform MCP error envelopes, and eager-importing heavy modules before the MCP event loop starts.
22
23
  - Standardize drift score precision to 3 decimal places across all surfaces (copilot-context, export-context, API, raw JSON) to eliminate score inconsistency between commands (#124).
23
24
  - Fix MCP schema `--schema` output leaking `type: "Annotated"` for all parameters instead of actual JSON Schema types (`string`, `integer`, `boolean`) by properly unwrapping `typing.Annotated` wrappers (#126).
24
25
  - Negative context generators now use actual variable names, endpoint names, and file:line references from findings instead of generic template code in DO NOT / INSTEAD examples (#127).
26
+ - Unblock CI by making MCP thread-offloaded tool returns explicit `str` for mypy across Python 3.11-3.13 and excluding known secret-like test fixtures (`tests/test_insecure_default.py`, `tests/golden/corpus_snapshot.json`) plus template-heavy `src/drift/negative_context.py` from detect-secrets hook false positives.
25
27
  - Reduce DIA false positives by requiring structural context for plain markdown slash-tokens (e.g. `async/`, `scan/`, `connectors/`) before emitting missing-directory findings, while preserving explicit path references in code spans/backticks (#121).
26
28
  - Add trailing newlines in CSV formatter and CSV tests to satisfy lint gate requirements and keep pre-push checks green.
27
29
  - Surface file I/O errors in `analyze`, `check`, and `scan` commands as structured `DRIFT-2003` errors with exit code 2 instead of unhandled `OSError` tracebacks.
@@ -43,13 +45,13 @@
43
45
  - Map git-root-relative paths to repo-relative paths in `analyze_diff` and `parse_git_history` so `--repo` on nested subdirectories no longer leaks parent-repo file scope (#117).
44
46
  - `drift self` error guidance now suggests valid next actions (`drift scan`/`drift analyze`) instead of invalid `--repo` flag (#120).
45
47
 
46
- ## [2.4.1] - 2026-04-03
48
+ ## [2.4.3] - 2026-04-04
47
49
 
48
50
  Short version: Align release metadata with current project version.
49
51
 
50
52
  ### Changed
51
53
 
52
- - Sync top changelog release marker to 2.3.1 so release-discipline checks match [project] version in pyproject.toml.
54
+ - Sync top changelog release marker to 2.4.2 so release-discipline checks match [project] version in pyproject.toml.
53
55
 
54
56
  ## [2.1.3] - 2026-04-02
55
57
 
@@ -7,7 +7,7 @@ authors:
7
7
  given-names: Mick
8
8
  email: mick.gottsch@gmail.com
9
9
  repository-code: "https://github.com/mick-gsk/drift"
10
- url: "https://sauremilk.github.io/drift/"
10
+ url: "https://mick-gsk.github.io/drift/"
11
11
  license: MIT
12
12
  version: "2.0.0"
13
13
  date-released: "2026-04-02"
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: drift-analyzer
3
- Version: 2.4.2
3
+ Version: 2.4.4
4
4
  Summary: Deterministic architectural drift detection for AI-accelerated Python repositories through cross-file coherence analysis
5
- Project-URL: Homepage, https://sauremilk.github.io/drift/
5
+ Project-URL: Homepage, https://mick-gsk.github.io/drift/
6
6
  Project-URL: Repository, https://github.com/mick-gsk/drift
7
7
  Project-URL: Issues, https://github.com/mick-gsk/drift/issues
8
- Project-URL: Documentation, https://sauremilk.github.io/drift/
8
+ Project-URL: Documentation, https://mick-gsk.github.io/drift/
9
9
  Project-URL: Changelog, https://github.com/mick-gsk/drift/blob/main/CHANGELOG.md
10
10
  Author-email: Mick Gottsch <mick.gottsch@gmail.com>
11
11
  License-Expression: MIT
@@ -90,7 +90,7 @@ Description-Content-Type: text/markdown
90
90
  [![License](https://img.shields.io/github/license/mick-gsk/drift)](LICENSE)
91
91
  [![Stars](https://img.shields.io/github/stars/mick-gsk/drift?style=social)](https://github.com/mick-gsk/drift)
92
92
 
93
- 97.3% precision (single-rater) · 23 signals · deterministic · no LLM in pipeline · [full study](docs/STUDY.md) · [docs](https://sauremilk.github.io/drift/)
93
+ 97.3% precision (single-rater) · 23 signals · deterministic · no LLM in pipeline · [full study](docs/STUDY.md) · [docs](https://mick-gsk.github.io/drift/)
94
94
 
95
95
  </div>
96
96
 
@@ -16,7 +16,7 @@
16
16
  [![License](https://img.shields.io/github/license/mick-gsk/drift)](LICENSE)
17
17
  [![Stars](https://img.shields.io/github/stars/mick-gsk/drift?style=social)](https://github.com/mick-gsk/drift)
18
18
 
19
- 97.3% precision (single-rater) · 23 signals · deterministic · no LLM in pipeline · [full study](docs/STUDY.md) · [docs](https://sauremilk.github.io/drift/)
19
+ 97.3% precision (single-rater) · 23 signals · deterministic · no LLM in pipeline · [full study](docs/STUDY.md) · [docs](https://mick-gsk.github.io/drift/)
20
20
 
21
21
  </div>
22
22
 
@@ -28,7 +28,7 @@ If you discover a security vulnerability in drift, **please do not open a public
28
28
 
29
29
  Instead, report it privately:
30
30
 
31
- 1. **Email:** Send a detailed description to the maintainer via the contact listed on the [GitHub profile](https://github.com/sauremilk).
31
+ 1. **Email:** Send a detailed description to the maintainer via the contact listed on the [GitHub profile](https://github.com/mick-gsk).
32
32
  2. **GitHub Security Advisory:** Use the [private vulnerability reporting](https://github.com/mick-gsk/drift/security/advisories/new) feature.
33
33
 
34
34
  Please include:
@@ -17,7 +17,7 @@ Use the right channel so requests are handled quickly and in context. When in do
17
17
 
18
18
  ## Before opening a thread
19
19
 
20
- 1. Check the docs: <https://sauremilk.github.io/drift/>
20
+ 1. Check the docs: <https://mick-gsk.github.io/drift/>
21
21
  2. Search existing issues and discussions
22
22
  3. Include drift version, Python version, OS, and a minimal reproduction when possible
23
23
 
@@ -1,6 +1,6 @@
1
1
  [
2
2
  {
3
- "timestamp": "2026-04-04T09:47:02.136405+00:00",
3
+ "timestamp": "2026-04-04T10:33:09.253835+00:00",
4
4
  "drift_score": 0.516,
5
5
  "signal_scores": {
6
6
  "mutant_duplicate": 0.8532,
@@ -52,9 +52,9 @@ about:
52
52
  Python codebases. It produces Rich terminal output, machine-readable JSON,
53
53
  and SARIF for CI integration. All 15 signals are configurable via a YAML
54
54
  config file.
55
- doc_url: https://sauremilk.github.io/drift/
55
+ doc_url: https://mick-gsk.github.io/drift/
56
56
  dev_url: https://github.com/mick-gsk/drift
57
57
 
58
58
  extra:
59
59
  recipe-maintainers:
60
- - sauremilk
60
+ - mick-gsk
@@ -368,7 +368,7 @@ Import (CIR), Dead Code Accumulation (DCA), Missing Authorization (MAZ),
368
368
  Insecure Default (ISD), Hardcoded Secret (HSC). These are visible in findings
369
369
  but don't affect the composite score yet — precision validation in progress.
370
370
 
371
- See the [signal reference](https://sauremilk.github.io/drift/reference/signals/) for full details.
371
+ See the [signal reference](https://mick-gsk.github.io/drift/reference/signals/) for full details.
372
372
 
373
373
  ## No LLMs. Deterministic. Fast.
374
374
 
@@ -450,7 +450,7 @@ that reads the whole codebase instead of just the diff.
450
450
 
451
451
  - GitHub: [mick-gsk/drift](https://github.com/mick-gsk/drift)
452
452
  - PyPI: [drift-analyzer](https://pypi.org/project/drift-analyzer/)
453
- - Docs: [sauremilk.github.io/drift](https://sauremilk.github.io/drift/)
453
+ - Docs: [mick-gsk.github.io/drift](https://mick-gsk.github.io/drift/)
454
454
  ````
455
455
 
456
456
  ---
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Status:** Accepted
4
4
  **Date:** 2025-12-01
5
- **Decision Makers:** @sauremilk
5
+ **Decision Makers:** @mick-gsk
6
6
 
7
7
  ## Context
8
8
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Status:** Accepted
4
4
  **Date:** 2025-12-05
5
- **Decision Makers:** @sauremilk
5
+ **Decision Makers:** @mick-gsk
6
6
 
7
7
  ## Context
8
8