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