attocode-code-intel 0.1.17__tar.gz → 0.1.19__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 (747) hide show
  1. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/PKG-INFO +8 -2
  2. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/README.md +7 -1
  3. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/pyproject.toml +1 -1
  4. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/__init__.py +1 -1
  5. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/ast_service.py +3 -0
  6. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/output.py +69 -1
  7. attocode_code_intel-0.1.19/tests/test_recovery_readiness.py +157 -0
  8. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_search_budget_repair.py +11 -1
  9. attocode_code_intel-0.1.19/tests/test_snippet_budget.py +300 -0
  10. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/.gitignore +0 -0
  11. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/LICENSE +0 -0
  12. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/README.md +0 -0
  13. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/ast_restart_probe.py +0 -0
  14. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/body_cost_probe.py +0 -0
  15. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/broad_candidate_audit.yaml +0 -0
  16. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/broad_query_cases.yaml +0 -0
  17. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/broad_query_external_cases.yaml +0 -0
  18. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/broad_query_final_holdout.yaml +0 -0
  19. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/client_comparison.py +0 -0
  20. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/client_responses.py +0 -0
  21. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/codex_repair_study.py +0 -0
  22. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/daily.py +0 -0
  23. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-13-codex-repair-diagnostic.md +0 -0
  24. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-13-r7-task-completion-pilot.md +0 -0
  25. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-14-workflow-pilot.md +0 -0
  26. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-15-body-file-trial.md +0 -0
  27. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-15-body-file-validation.json +0 -0
  28. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-15-expansion-ablation.md +0 -0
  29. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-15-expansion-development.json +0 -0
  30. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-15-expansion-validation.json +0 -0
  31. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-15-fresh-navigation-queries.json +0 -0
  32. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-15-headroom-retrieval-questions.json +0 -0
  33. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-15-headroom-retrieval.md +0 -0
  34. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-cross-file-questions.json +0 -0
  35. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-deep-page-questions.json +0 -0
  36. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-kotlin-test-paths.json +0 -0
  37. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-navigation-prefix-validation.json +0 -0
  38. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-navigation-prefix.json +0 -0
  39. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-negation-candidate.patch.gz +0 -0
  40. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-negation-development.json +0 -0
  41. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-negation-freeze.json +0 -0
  42. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-negation-validation.json +0 -0
  43. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-search-correctness-candidates/accepted.patch.gz +0 -0
  44. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-search-correctness-candidates/boundaries.patch.gz +0 -0
  45. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-search-correctness-candidates/combined.patch.gz +0 -0
  46. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-search-correctness-candidates/expansion.patch.gz +0 -0
  47. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-search-correctness-candidates/identity.patch.gz +0 -0
  48. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-search-correctness-candidates/manifest.json +0 -0
  49. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-search-correctness-candidates/negation.patch.gz +0 -0
  50. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-search-correctness-candidates/owner_only.patch.gz +0 -0
  51. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-search-correctness-candidates/owners.patch.gz +0 -0
  52. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-search-correctness-confirmation-freeze.json +0 -0
  53. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-search-correctness-confirmation.json +0 -0
  54. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-search-correctness-development.json +0 -0
  55. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-search-correctness-freeze.json +0 -0
  56. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-search-correctness-validation.json +0 -0
  57. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-search-usefulness-development.json +0 -0
  58. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-search-usefulness-validation.json +0 -0
  59. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-search-usefulness.json +0 -0
  60. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-16-test-intent.json +0 -0
  61. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-change-focus-candidate.patch.gz +0 -0
  62. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-change-workflow-replays.json +0 -0
  63. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-change-workflow-replays.md +0 -0
  64. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-file-coverage-c2f.patch.gz +0 -0
  65. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-file-coverage-development.json +0 -0
  66. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-file-coverage-freeze.json +0 -0
  67. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-file-coverage-t.patch.gz +0 -0
  68. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-file-coverage-tcf.patch.gz +0 -0
  69. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-file-coverage-validation.json +0 -0
  70. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-search-batch-candidate.patch.gz +0 -0
  71. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-search-batch-development.json +0 -0
  72. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-search-batch-freeze.json +0 -0
  73. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-search-batch-validation.json +0 -0
  74. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-test-source-slot-candidate.json +0 -0
  75. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-test-source-slot-development.json +0 -0
  76. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-test-source-slot-freeze.json +0 -0
  77. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-test-source-slot-t2.patch.gz +0 -0
  78. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-test-source-slot-t3.patch.gz +0 -0
  79. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-17-test-source-slot-validation.json +0 -0
  80. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-paired-source-candidate.json +0 -0
  81. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-paired-source-development.json +0 -0
  82. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-paired-source-freeze.json +0 -0
  83. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-paired-source-p.patch.gz +0 -0
  84. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-paired-source-pf.patch.gz +0 -0
  85. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-paired-source-validation.json +0 -0
  86. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-query-source-candidate.json +0 -0
  87. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-query-source-development.json +0 -0
  88. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-query-source-freeze.json +0 -0
  89. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-query-source-q1.patch.gz +0 -0
  90. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-query-source-q2.patch.gz +0 -0
  91. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-query-source-q3.patch.gz +0 -0
  92. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-query-source-q5.patch.gz +0 -0
  93. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-query-source-s1.patch.gz +0 -0
  94. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-query-source-s2-equivalence.json +0 -0
  95. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-query-source-s2-freeze.json +0 -0
  96. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-query-source-s2-validation.json +0 -0
  97. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-query-source-s2.patch.gz +0 -0
  98. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-18-query-source-validation.json +0 -0
  99. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-19-cpu-fn-embed-cost.json +0 -0
  100. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-20-clause-balance-validation.json +0 -0
  101. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-20-search-repair-validation.json +0 -0
  102. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-20-test-support-development.json +0 -0
  103. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-20-test-support-freeze.json +0 -0
  104. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-23-preview-windows.json +0 -0
  105. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/designs/2026-10-23-restart-fingerprints.json +0 -0
  106. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/discovery_reuse_probe.py +0 -0
  107. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/external_benchmarks.py +0 -0
  108. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/external_study.py +0 -0
  109. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/graded_blind_pack.yaml +0 -0
  110. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/lexical_sql_probe.py +0 -0
  111. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/localize_study.py +0 -0
  112. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/locbench_title_pack.yaml +0 -0
  113. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/onboarding_study.py +0 -0
  114. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/pilot.py +0 -0
  115. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/quality_scoring.py +0 -0
  116. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/quality_tasks.py +0 -0
  117. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/release_gate.py +0 -0
  118. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/repair_grading.py +0 -0
  119. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/repair_study.py +0 -0
  120. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/repair_worker.py +0 -0
  121. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/responses.py +0 -0
  122. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/restart_discovery_probe.py +0 -0
  123. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/search_evidence_audit.py +0 -0
  124. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/source_view_transfer.yaml +0 -0
  125. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/structural_write_probe.py +0 -0
  126. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/study.py +0 -0
  127. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/study_clients.py +0 -0
  128. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/study_events.py +0 -0
  129. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/study_tasks.py +0 -0
  130. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/token_overhead.py +0 -0
  131. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/understanding_scoring.py +0 -0
  132. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/understanding_study.py +0 -0
  133. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/warm_cache.py +0 -0
  134. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/evals/workflows.py +0 -0
  135. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/GUIDELINES.md +0 -0
  136. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/__init__.py +0 -0
  137. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/errors/__init__.py +0 -0
  138. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/__init__.py +0 -0
  139. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/__init__.py +0 -0
  140. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/architecture_drift.py +0 -0
  141. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/ast_chunker.py +0 -0
  142. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/ast_snapshot.py +0 -0
  143. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/blob_oid.py +0 -0
  144. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/cache_manifest.py +0 -0
  145. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/cas.py +0 -0
  146. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/code_analyzer.py +0 -0
  147. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/codebase_ast.py +0 -0
  148. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/codebase_context.py +0 -0
  149. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/cross_mode.py +0 -0
  150. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/cross_references.py +0 -0
  151. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/discovery_snapshot.py +0 -0
  152. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/embedding_rotation.py +0 -0
  153. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/embeddings.py +0 -0
  154. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/frecency.py +0 -0
  155. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/fuzzy.py +0 -0
  156. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/hierarchical_explorer.py +0 -0
  157. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/hydration.py +0 -0
  158. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/index_probe.py +0 -0
  159. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/index_repair.py +0 -0
  160. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/index_store.py +0 -0
  161. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/language_registry.py +0 -0
  162. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/memory_store.py +0 -0
  163. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/module_resolution.py +0 -0
  164. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/parse_diagnostics.py +0 -0
  165. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/query_constraints.py +0 -0
  166. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/query_history.py +0 -0
  167. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/reranker.py +0 -0
  168. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/semantic_search.py +0 -0
  169. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/syntax_evidence.py +0 -0
  170. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/systemone_ranker.py +0 -0
  171. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/temporal_coupling.py +0 -0
  172. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/trigram_index.py +0 -0
  173. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/trigram_regex.py +0 -0
  174. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/ts_parser.py +0 -0
  175. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/context/vector_store.py +0 -0
  176. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/feature_flags/__init__.py +0 -0
  177. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/lsp/__init__.py +0 -0
  178. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/lsp/client.py +0 -0
  179. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/mcp/__init__.py +0 -0
  180. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/mcp/client.py +0 -0
  181. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/security/__init__.py +0 -0
  182. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/security/custom_rules.py +0 -0
  183. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/security/dataflow.py +0 -0
  184. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/security/dependency_audit.py +0 -0
  185. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/security/matcher.py +0 -0
  186. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/security/patterns.py +0 -0
  187. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/security/scanner.py +0 -0
  188. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/utilities/__init__.py +0 -0
  189. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/utilities/ignore.py +0 -0
  190. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/integrations/utilities/token_estimate.py +0 -0
  191. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/tricks/__init__.py +0 -0
  192. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/tricks/recursive_context.py +0 -0
  193. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/types/__init__.py +0 -0
  194. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/types/events.py +0 -0
  195. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_internal/types/severity.py +0 -0
  196. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/_shared.py +0 -0
  197. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/analysis_coverage.py +0 -0
  198. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/__init__.py +0 -0
  199. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/access.py +0 -0
  200. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/app.py +0 -0
  201. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/auth/__init__.py +0 -0
  202. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/auth/api_keys.py +0 -0
  203. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/auth/context.py +0 -0
  204. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/auth/jwt.py +0 -0
  205. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/auth/oauth.py +0 -0
  206. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/auth/passwords.py +0 -0
  207. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/deps.py +0 -0
  208. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/knowledge_bridge.py +0 -0
  209. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/mcp_transport.py +0 -0
  210. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/middleware.py +0 -0
  211. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/models.py +0 -0
  212. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/providers/__init__.py +0 -0
  213. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/providers/db_provider.py +0 -0
  214. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/providers/local_provider.py +0 -0
  215. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/providers/remote_provider.py +0 -0
  216. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/repository_source.py +0 -0
  217. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/__init__.py +0 -0
  218. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/_pin_helper.py +0 -0
  219. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/activity.py +0 -0
  220. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/adr.py +0 -0
  221. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/analysis.py +0 -0
  222. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/api_keys.py +0 -0
  223. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/auth.py +0 -0
  224. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/branches.py +0 -0
  225. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/cross_repo_search.py +0 -0
  226. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/embeddings.py +0 -0
  227. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/files.py +0 -0
  228. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/files_v2.py +0 -0
  229. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/gc.py +0 -0
  230. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/git_v2.py +0 -0
  231. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/graph.py +0 -0
  232. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/graph_viz.py +0 -0
  233. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/health.py +0 -0
  234. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/history.py +0 -0
  235. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/jobs.py +0 -0
  236. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/learning.py +0 -0
  237. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/lsp.py +0 -0
  238. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/notify.py +0 -0
  239. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/operations.py +0 -0
  240. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/orgs.py +0 -0
  241. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/preferences.py +0 -0
  242. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/presence.py +0 -0
  243. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/projects.py +0 -0
  244. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/repos.py +0 -0
  245. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/search.py +0 -0
  246. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/snapshots.py +0 -0
  247. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/webhooks.py +0 -0
  248. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/routes/websocket.py +0 -0
  249. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/static/graph.html +0 -0
  250. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/api/utils.py +0 -0
  251. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/artifacts/__init__.py +0 -0
  252. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/artifacts/hashing.py +0 -0
  253. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/artifacts/provenance.py +0 -0
  254. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/artifacts/retrieval_pin.py +0 -0
  255. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/audit.py +0 -0
  256. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/bug_finder.py +0 -0
  257. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/bundle.py +0 -0
  258. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/catalog.py +0 -0
  259. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/change_evidence.py +0 -0
  260. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/change_investigation.py +0 -0
  261. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/change_review.py +0 -0
  262. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/cli.py +0 -0
  263. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/community.py +0 -0
  264. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/confidence/__init__.py +0 -0
  265. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/confidence/jev.py +0 -0
  266. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/confidence/llm.py +0 -0
  267. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/confidence/redact.py +0 -0
  268. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/confidence/settings.py +0 -0
  269. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/config.py +0 -0
  270. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/crypto.py +0 -0
  271. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/db/__init__.py +0 -0
  272. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/db/base.py +0 -0
  273. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/db/engine.py +0 -0
  274. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/db/models.py +0 -0
  275. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/entrypoint.py +0 -0
  276. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/focused_evidence.py +0 -0
  277. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/freshness.py +0 -0
  278. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/gateway.py +0 -0
  279. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/git/__init__.py +0 -0
  280. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/git/credentials.py +0 -0
  281. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/git/manager.py +0 -0
  282. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/git/models.py +0 -0
  283. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/git/storage.py +0 -0
  284. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/graph_query_parser.py +0 -0
  285. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/helpers.py +0 -0
  286. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/indexing/__init__.py +0 -0
  287. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/indexing/debouncer.py +0 -0
  288. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/indexing/delta_indexer.py +0 -0
  289. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/indexing/full_indexer.py +0 -0
  290. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/indexing/incremental.py +0 -0
  291. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/indexing/parser.py +0 -0
  292. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/indexing/summarizer.py +0 -0
  293. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/installer.py +0 -0
  294. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/investigation_cli.py +0 -0
  295. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/knowledge.py +0 -0
  296. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/local_knowledge.py +0 -0
  297. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/alembic.ini +0 -0
  298. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/env.py +0 -0
  299. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/script.py.mako +0 -0
  300. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/001_initial_schema.py +0 -0
  301. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/002_branch_version_and_embeddings.py +0 -0
  302. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/003_embedding_uniqueness_and_cascade.py +0 -0
  303. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/004_audit_events.py +0 -0
  304. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/005_user_preferences.py +0 -0
  305. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/006_google_oauth.py +0 -0
  306. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/007_pgvector_embeddings.py +0 -0
  307. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/008_symbol_references.py +0 -0
  308. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/009_webhook_secret_encryption.py +0 -0
  309. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/010_add_commits_table.py +0 -0
  310. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/011_commit_changed_files.py +0 -0
  311. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/012_branch_merged_at.py +0 -0
  312. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/013_revoked_tokens.py +0 -0
  313. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/014_blame_hunks.py +0 -0
  314. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/015_commit_file_stats.py +0 -0
  315. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/016_embedding_provenance_columns.py +0 -0
  316. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/017_provenance_table.py +0 -0
  317. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/018_repo_snapshots.py +0 -0
  318. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/019_symref_caller.py +0 -0
  319. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/migrations/versions/020_shared_knowledge.py +0 -0
  320. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/onboarding.py +0 -0
  321. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/precision.py +0 -0
  322. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/presence.py +0 -0
  323. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/probe.py +0 -0
  324. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/project_dir.py +0 -0
  325. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/pubsub.py +0 -0
  326. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/query_ranking.py +0 -0
  327. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/readiness.py +0 -0
  328. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/redis.py +0 -0
  329. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/reference_pages.py +0 -0
  330. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/remote.py +0 -0
  331. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/repo_ranker.py +0 -0
  332. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/request_context.py +0 -0
  333. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/__init__.py +0 -0
  334. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/ci.py +0 -0
  335. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/combinators.py +0 -0
  336. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/enricher.py +0 -0
  337. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/evolution.py +0 -0
  338. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/executor.py +0 -0
  339. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/filters/__init__.py +0 -0
  340. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/filters/pipeline.py +0 -0
  341. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/formatter.py +0 -0
  342. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/hygiene.py +0 -0
  343. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/importers/__init__.py +0 -0
  344. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/importers/semgrep.py +0 -0
  345. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/loader.py +0 -0
  346. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/marketplace.py +0 -0
  347. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/metavar.py +0 -0
  348. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/model.py +0 -0
  349. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/__init__.py +0 -0
  350. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/_license_templates/Apache-2.0.txt +0 -0
  351. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/_license_templates/MIT.txt +0 -0
  352. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/bandit-python/LICENSE +0 -0
  353. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/bandit-python/NOTICE +0 -0
  354. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/bandit-python/PORTING.md +0 -0
  355. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/bandit-python/manifest.yaml +0 -0
  356. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/bandit-python/rules/B105-hardcoded-password.yaml +0 -0
  357. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/bandit-python/rules/B303-weak-md5.yaml +0 -0
  358. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/bandit-python/rules/B304-weak-des.yaml +0 -0
  359. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/bandit-python/rules/B307-use-of-eval.yaml +0 -0
  360. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/bandit-python/rules/B324-weak-sha1.yaml +0 -0
  361. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/bandit-python/rules/B501-no-cert-validation.yaml +0 -0
  362. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/bandit-python/rules/B602-shell-true.yaml +0 -0
  363. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/bandit-python/rules/B608-sqli.yaml +0 -0
  364. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/eslint-typescript/LICENSE +0 -0
  365. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/eslint-typescript/NOTICE +0 -0
  366. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/eslint-typescript/PORTING.md +0 -0
  367. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/eslint-typescript/manifest.yaml +0 -0
  368. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/eqeqeq.yaml +0 -0
  369. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-eval.yaml +0 -0
  370. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-implied-eval.yaml +0 -0
  371. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-new-func.yaml +0 -0
  372. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-throw-literal.yaml +0 -0
  373. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-var.yaml +0 -0
  374. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-with.yaml +0 -0
  375. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/gosec-go/LICENSE +0 -0
  376. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/gosec-go/NOTICE +0 -0
  377. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/gosec-go/PORTING.md +0 -0
  378. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/gosec-go/manifest.yaml +0 -0
  379. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/gosec-go/rules/G101-hardcoded-credentials.yaml +0 -0
  380. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/gosec-go/rules/G102-bind-all-interfaces.yaml +0 -0
  381. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/gosec-go/rules/G103-unsafe-block.yaml +0 -0
  382. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/gosec-go/rules/G201-sql-format.yaml +0 -0
  383. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/gosec-go/rules/G304-file-inclusion.yaml +0 -0
  384. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/gosec-go/rules/G401-weak-cipher.yaml +0 -0
  385. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/gosec-go/rules/G402-tls-min-version.yaml +0 -0
  386. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/community/gosec-go/rules/G501-md5-import.yaml +0 -0
  387. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/cpp/manifest.yaml +0 -0
  388. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/cpp/rules/security.yaml +0 -0
  389. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/cpp/rules/structural.yaml +0 -0
  390. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/csharp/manifest.yaml +0 -0
  391. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/csharp/rules/security.yaml +0 -0
  392. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/csharp/rules/structural.yaml +0 -0
  393. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/go/manifest.yaml +0 -0
  394. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/go/rules/performance.yaml +0 -0
  395. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/go/rules/security.yaml +0 -0
  396. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/go/rules/structural.yaml +0 -0
  397. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/go/taint/sanitizers.yaml +0 -0
  398. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/go/taint/sinks.yaml +0 -0
  399. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/go/taint/sources.yaml +0 -0
  400. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/java/manifest.yaml +0 -0
  401. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/java/rules/correctness.yaml +0 -0
  402. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/java/rules/structural.yaml +0 -0
  403. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/java/taint/sinks.yaml +0 -0
  404. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/java/taint/sources.yaml +0 -0
  405. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/kotlin/manifest.yaml +0 -0
  406. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/kotlin/rules/correctness.yaml +0 -0
  407. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/kotlin/rules/structural.yaml +0 -0
  408. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/php/manifest.yaml +0 -0
  409. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/php/rules/security.yaml +0 -0
  410. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/php/rules/structural.yaml +0 -0
  411. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/python/manifest.yaml +0 -0
  412. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/python/rules/performance.yaml +0 -0
  413. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/python/rules/structural.yaml +0 -0
  414. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/ruby/manifest.yaml +0 -0
  415. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/ruby/rules/security.yaml +0 -0
  416. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/ruby/rules/structural.yaml +0 -0
  417. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/rust/manifest.yaml +0 -0
  418. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/rust/rules/correctness.yaml +0 -0
  419. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/rust/rules/structural.yaml +0 -0
  420. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/typescript/manifest.yaml +0 -0
  421. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/typescript/rules/performance.yaml +0 -0
  422. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/examples/typescript/rules/structural.yaml +0 -0
  423. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/packs/pack_loader.py +0 -0
  424. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/plugins/__init__.py +0 -0
  425. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/plugins/plugin_loader.py +0 -0
  426. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/profiling.py +0 -0
  427. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/registry.py +0 -0
  428. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/sarif.py +0 -0
  429. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/synthesis.py +0 -0
  430. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/rules/testing.py +0 -0
  431. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/search_evidence.py +0 -0
  432. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/server.py +0 -0
  433. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/service.py +0 -0
  434. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/sharing.py +0 -0
  435. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/storage/__init__.py +0 -0
  436. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/storage/branch_overlay.py +0 -0
  437. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/storage/content_store.py +0 -0
  438. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/storage/dependency_store.py +0 -0
  439. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/storage/diff_engine.py +0 -0
  440. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/storage/embedding_store.py +0 -0
  441. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/storage/provenance_store.py +0 -0
  442. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/storage/security_scanner_db.py +0 -0
  443. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/storage/symbol_store.py +0 -0
  444. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/structural_evidence.py +0 -0
  445. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/symbol_inspection.py +0 -0
  446. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/symbol_links.py +0 -0
  447. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/telemetry.py +0 -0
  448. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/test_ranking.py +0 -0
  449. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/testing/__init__.py +0 -0
  450. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/testing/fixtures.py +0 -0
  451. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/testing/helpers.py +0 -0
  452. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/testing/mocks.py +0 -0
  453. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/__init__.py +0 -0
  454. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/adr_tools.py +0 -0
  455. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/analysis_tools.py +0 -0
  456. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/composite_tools.py +0 -0
  457. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/cross_mode_tools.py +0 -0
  458. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/dead_code_tools.py +0 -0
  459. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/distill_tools.py +0 -0
  460. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/frecency_tools.py +0 -0
  461. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/fuzzy_tools.py +0 -0
  462. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/history_tools.py +0 -0
  463. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/learning_tools.py +0 -0
  464. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/lsp_tools.py +0 -0
  465. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/maintenance_tools.py +0 -0
  466. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/navigation_tools.py +0 -0
  467. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/overlay_tools.py +0 -0
  468. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/pin_store.py +0 -0
  469. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/pin_tools.py +0 -0
  470. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/query_constraints_tools.py +0 -0
  471. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/query_history_tools.py +0 -0
  472. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/readiness_tools.py +0 -0
  473. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/rule_tools.py +0 -0
  474. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/search_tools.py +0 -0
  475. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/tools/snapshot_tools.py +0 -0
  476. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/workers/__init__.py +0 -0
  477. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/workers/job_utils.py +0 -0
  478. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/workers/jobs.py +0 -0
  479. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/workers/run.py +0 -0
  480. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/src/attocode_intel/workers/settings.py +0 -0
  481. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/fixtures/rule_violations/.attocode/rules/team-preferences.yaml +0 -0
  482. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/fixtures/rule_violations/go/bad_patterns.go +0 -0
  483. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/fixtures/rule_violations/java/BadPatterns.java +0 -0
  484. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/fixtures/rule_violations/python/bad_patterns.py +0 -0
  485. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/fixtures/rule_violations/rust/bad_patterns.rs +0 -0
  486. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/fixtures/rule_violations/typescript/bad_patterns.ts +0 -0
  487. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/integration/__init__.py +0 -0
  488. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/integration/code_intel/__init__.py +0 -0
  489. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/integration/code_intel/conftest.py +0 -0
  490. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/integration/code_intel/test_http_smoke.py +0 -0
  491. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/integration/code_intel/test_mcp_tools_audit.py +0 -0
  492. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/integration/code_intel/test_remote_mcp_http_integration.py +0 -0
  493. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/integration/code_intel/test_service_integration.py +0 -0
  494. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/integration/test_rule_bench_floor_e2e.py +0 -0
  495. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_ast_snapshot.py +0 -0
  496. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_behavioral_negation.py +0 -0
  497. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_change_focus.py +0 -0
  498. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_change_investigation.py +0 -0
  499. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_chunk_identity.py +0 -0
  500. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_codex_repair_study.py +0 -0
  501. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_cold_discovery.py +0 -0
  502. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_cold_index_cost.py +0 -0
  503. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_compact_inspection.py +0 -0
  504. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_corpus_capture.py +0 -0
  505. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_daily_workflows.py +0 -0
  506. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_db_navigation_http.py +0 -0
  507. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_discovery_reuse.py +0 -0
  508. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_doctor.py +0 -0
  509. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_doctor_runtime.py +0 -0
  510. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_edit_restart.py +0 -0
  511. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_experiment_evidence.py +0 -0
  512. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_experiment_readiness.py +0 -0
  513. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_external_study.py +0 -0
  514. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_file_symbol_scope.py +0 -0
  515. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_fixture_source_alias.py +0 -0
  516. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_focused_inspection.py +0 -0
  517. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_image_budget.py +0 -0
  518. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_importance_publication.py +0 -0
  519. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_index_probe.py +0 -0
  520. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_index_processes.py +0 -0
  521. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_index_reuse.py +0 -0
  522. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_index_sequences.py +0 -0
  523. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_kotlin_test_paths.py +0 -0
  524. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_language_capabilities.py +0 -0
  525. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_lean_profile.py +0 -0
  526. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_lexical_sql_cost.py +0 -0
  527. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_local_reranker.py +0 -0
  528. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_local_workflow_evidence.py +0 -0
  529. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_localize_study.py +0 -0
  530. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_lsp_diagnostics.py +0 -0
  531. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_lsp_document_lifecycle.py +0 -0
  532. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_lsp_stderr_lifecycle.py +0 -0
  533. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_mcp_search_evaluation.py +0 -0
  534. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_mixed_workspace.py +0 -0
  535. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_module_ownership.py +0 -0
  536. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_native_experiment.py +0 -0
  537. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_navigation_evidence.py +0 -0
  538. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_navigation_prefix_trial.py +0 -0
  539. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_onboarding_study.py +0 -0
  540. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_operation_contracts.py +0 -0
  541. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_parse_recovery.py +0 -0
  542. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_parser_thread_isolation.py +0 -0
  543. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_pilot.py +0 -0
  544. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_precision_protocol.py +0 -0
  545. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_precision_recovery.py +0 -0
  546. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_preview_admission.py +0 -0
  547. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_preview_experiment.py +0 -0
  548. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_preview_sources.py +0 -0
  549. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_preview_windows.py +0 -0
  550. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_product.py +0 -0
  551. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_quality_cloud.py +0 -0
  552. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_quality_evaluation.py +0 -0
  553. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_quality_evidence.py +0 -0
  554. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_quality_lifecycle.py +0 -0
  555. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_quality_runner.py +0 -0
  556. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_query_ranking.py +0 -0
  557. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_query_requirements.py +0 -0
  558. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_ranking_intent.py +0 -0
  559. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_real_language_server.py +0 -0
  560. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_release_verification.py +0 -0
  561. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_remote.py +0 -0
  562. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_repair_study.py +0 -0
  563. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_restart_experiment.py +0 -0
  564. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_retrieval_ablation.py +0 -0
  565. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_retrieval_audit.py +0 -0
  566. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_retrieval_body_trial.py +0 -0
  567. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_retrieval_cycle.py +0 -0
  568. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_search_evidence.py +0 -0
  569. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_search_evidence_audit.py +0 -0
  570. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_search_usefulness.py +0 -0
  571. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_source_exclusions.py +0 -0
  572. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_structural_evidence.py +0 -0
  573. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_structural_write_cost.py +0 -0
  574. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_study.py +0 -0
  575. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_symbol_order.py +0 -0
  576. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_systemone_ranker.py +0 -0
  577. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_test_intent_trial.py +0 -0
  578. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_token_overhead.py +0 -0
  579. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_trigram_workspace.py +0 -0
  580. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_understanding_evaluation.py +0 -0
  581. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_walk_order.py +0 -0
  582. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_warm_cache.py +0 -0
  583. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/test_workflow_sequences.py +0 -0
  584. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/__init__.py +0 -0
  585. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/__init__.py +0 -0
  586. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/conftest.py +0 -0
  587. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_advisory_lock.py +0 -0
  588. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_api.py +0 -0
  589. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_api_phase3a.py +0 -0
  590. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_api_v2.py +0 -0
  591. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_auth.py +0 -0
  592. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_branch_versioning.py +0 -0
  593. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_bug_finder.py +0 -0
  594. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_call_graph_tool.py +0 -0
  595. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_ci_runner.py +0 -0
  596. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_cli_lifecycle.py +0 -0
  597. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_cli_maintenance_local.py +0 -0
  598. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_cli_ops.py +0 -0
  599. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_cli_query_commands.py +0 -0
  600. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_cli_remote.py +0 -0
  601. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_codex_rereview_polish.py +0 -0
  602. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_combinators.py +0 -0
  603. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_confidence.py +0 -0
  604. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_confidence_adoption.py +0 -0
  605. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_config.py +0 -0
  606. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_config_remote.py +0 -0
  607. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_cross_mode.py +0 -0
  608. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_db_security_scan.py +0 -0
  609. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_deps.py +0 -0
  610. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_diff_engine.py +0 -0
  611. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_edge_cases.py +0 -0
  612. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_frecency.py +0 -0
  613. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_fuzzy.py +0 -0
  614. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_index_store_migration.py +0 -0
  615. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_kw_index_status.py +0 -0
  616. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_lsp_call_graph.py +0 -0
  617. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_lsp_enrichment.py +0 -0
  618. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_lsp_extended_models.py +0 -0
  619. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_marketplace.py +0 -0
  620. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_metavar.py +0 -0
  621. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_middleware.py +0 -0
  622. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_notify_enhanced.py +0 -0
  623. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_org_isolation.py +0 -0
  624. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_pack_autoload.py +0 -0
  625. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_profiling.py +0 -0
  626. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_project_discovery.py +0 -0
  627. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_provenance_store.py +0 -0
  628. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_pubsub_streams.py +0 -0
  629. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_query_constraints.py +0 -0
  630. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_query_history.py +0 -0
  631. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_readiness.py +0 -0
  632. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_reindex_embeddings.py +0 -0
  633. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_remote_local_fallback.py +0 -0
  634. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_remote_provider.py +0 -0
  635. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_remote_reliability.py +0 -0
  636. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_repo_ranker.py +0 -0
  637. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_rule_evolution.py +0 -0
  638. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_rule_hygiene.py +0 -0
  639. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_rule_synthesis.py +0 -0
  640. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_rule_tools.py +0 -0
  641. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_rule_violations.py +0 -0
  642. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_rules_engine.py +0 -0
  643. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_rules_integration.py +0 -0
  644. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_sarif.py +0 -0
  645. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_search_tools.py +0 -0
  646. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_server_startup.py +0 -0
  647. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_service.py +0 -0
  648. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_service_mode.py +0 -0
  649. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_status_health.py +0 -0
  650. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_structural_executor.py +0 -0
  651. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_supply_chain_rules.py +0 -0
  652. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_testing_framework.py +0 -0
  653. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/test_webhook_encryption.py +0 -0
  654. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/tools/__init__.py +0 -0
  655. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/tools/conftest.py +0 -0
  656. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/tools/test_adr_tools.py +0 -0
  657. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/tools/test_analysis_tools.py +0 -0
  658. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/tools/test_dead_code_tools.py +0 -0
  659. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/tools/test_distill_tools.py +0 -0
  660. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/tools/test_history_tools.py +0 -0
  661. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/tools/test_learning_tools.py +0 -0
  662. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/tools/test_lsp_tools.py +0 -0
  663. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/tools/test_maintenance_tools_phase2.py +0 -0
  664. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/tools/test_navigation_tools.py +0 -0
  665. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/tools/test_phase2c_anchors_and_overlays.py +0 -0
  666. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/tools/test_readiness_tools.py +0 -0
  667. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/tools/test_search_status_mismatch.py +0 -0
  668. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/tools/test_search_tools.py +0 -0
  669. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/code_intel/tools/test_server_tools.py +0 -0
  670. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/context/__init__.py +0 -0
  671. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/context/test_action_hash.py +0 -0
  672. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/context/test_ast_service_adapter.py +0 -0
  673. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/context/test_blob_oid.py +0 -0
  674. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/context/test_cache_manifest.py +0 -0
  675. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/context/test_cas.py +0 -0
  676. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/context/test_embedding_rotation.py +0 -0
  677. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/context/test_pagerank_restoration.py +0 -0
  678. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/context/test_provenance.py +0 -0
  679. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/context/test_retrieval_pin.py +0 -0
  680. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/context/test_vector_store_dim_safety.py +0 -0
  681. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/__init__.py +0 -0
  682. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/conftest.py +0 -0
  683. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_acc_at_k.py +0 -0
  684. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_broad_candidate_audit.py +0 -0
  685. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_calibration_demo.py +0 -0
  686. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_harness.py +0 -0
  687. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_matrix_agents.py +0 -0
  688. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_matrix_ci.py +0 -0
  689. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_matrix_datasets.py +0 -0
  690. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_matrix_dense.py +0 -0
  691. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_matrix_function_bm25.py +0 -0
  692. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_matrix_function_dense.py +0 -0
  693. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_matrix_rerank.py +0 -0
  694. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_matrix_retrieve.py +0 -0
  695. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_matrix_run.py +0 -0
  696. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_matrix_stats.py +0 -0
  697. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_mcp_bench.py +0 -0
  698. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_rule_accuracy.py +0 -0
  699. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_rule_bench_config.py +0 -0
  700. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_rule_bench_corpus.py +0 -0
  701. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_rule_bench_evaluator.py +0 -0
  702. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_rule_bench_predicate.py +0 -0
  703. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_rule_bench_scoring.py +0 -0
  704. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_rule_bench_template_engine.py +0 -0
  705. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_rule_harness_import.py +0 -0
  706. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_search_quality_reporting.py +0 -0
  707. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_search_readiness.py +0 -0
  708. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/eval/test_seed_attocode_fixtures.py +0 -0
  709. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/__init__.py +0 -0
  710. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/__init__.py +0 -0
  711. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_architecture_drift.py +0 -0
  712. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_ast_service_hydration.py +0 -0
  713. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_body_chunking.py +0 -0
  714. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_call_graph.py +0 -0
  715. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_code_analyzer.py +0 -0
  716. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_codebase_ast.py +0 -0
  717. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_codebase_context.py +0 -0
  718. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_context_stores_closed.py +0 -0
  719. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_cross_ref_search.py +0 -0
  720. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_embedder_default.py +0 -0
  721. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_embeddings.py +0 -0
  722. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_embeddings_query.py +0 -0
  723. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_go_symbols.py +0 -0
  724. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_hydration.py +0 -0
  725. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_index_store.py +0 -0
  726. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_model_mismatch.py +0 -0
  727. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_path_downweight.py +0 -0
  728. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_query_routing.py +0 -0
  729. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_semantic_search.py +0 -0
  730. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_supported_languages.py +0 -0
  731. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_temporal_coupling.py +0 -0
  732. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_trigram_index.py +0 -0
  733. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_trigram_regex.py +0 -0
  734. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/context/test_ts_parser.py +0 -0
  735. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/test_dataflow.py +0 -0
  736. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/test_feature_flags.py +0 -0
  737. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/test_new_security_rules.py +0 -0
  738. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/test_security_autofix.py +0 -0
  739. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/test_security_matcher.py +0 -0
  740. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/test_streaming_lsp.py +0 -0
  741. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/utilities/__init__.py +0 -0
  742. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/utilities/test_ignore.py +0 -0
  743. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/integrations/utilities/test_token_estimate.py +0 -0
  744. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/test_code_intel.py +0 -0
  745. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/test_code_intel_hydration.py +0 -0
  746. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/test_errors.py +0 -0
  747. {attocode_code_intel-0.1.17 → attocode_code_intel-0.1.19}/tests/unit/test_memory_store.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: attocode-code-intel
3
- Version: 0.1.17
3
+ Version: 0.1.19
4
4
  Summary: Local code search and navigation for coding agents and people
5
5
  Project-URL: Homepage, https://github.com/eren23/attocode
6
6
  Project-URL: Repository, https://github.com/eren23/attocode
@@ -139,6 +139,10 @@ To use the latest source, install from a clone of this repository: `uv tool inst
139
139
 
140
140
  ## What your agent gets
141
141
 
142
+ Version 0.1.19 restores source text into spare space after fitting a complete
143
+ compact search page. Existing hits, visible text, source lines and continuations
144
+ remain protected within the same response budget; ranking and retrieval are unchanged.
145
+
142
146
  Version 0.1.7 also provides `changes` and `trace` commands: investigate a diff,
143
147
  follow source-backed caller paths, export JSON/Markdown, and check or refresh saved
144
148
  evidence. MCP equivalents `change_context` and `trace_flow` are local full-profile
@@ -151,7 +155,9 @@ tests, such as `_test.dart` and Perl `.t` scripts and `t/` modules. Version
151
155
  0.1.12 makes `doctor --client claude` read the local-scope entry that
152
156
  `claude mcp add` writes to `~/.claude.json`. Version 0.1.13 fills compact search
153
157
  pages within their budget, offers bounded deeper searches, and repairs stale
154
- navigation indexes after successful restart parsing. Version 0.1.17 lets a later explicit inspection retry a failed selected-file parse
158
+ navigation indexes after successful restart parsing. Version 0.1.18 restores the ready phase after a failed snapshot load is followed by a complete fallback rebuild. Incomplete recovery stays guarded.
159
+
160
+ Version 0.1.17 lets a later explicit inspection retry a failed selected-file parse
155
161
  after a one-second cooldown, preserving immediate-repeat and source guards.
156
162
  Version 0.1.16 stabilizes tied symbol pages and reduces the Docker image while
157
163
  preserving runtime contracts. It adds bounded online maintenance evidence; the
@@ -26,6 +26,10 @@ To use the latest source, install from a clone of this repository: `uv tool inst
26
26
 
27
27
  ## What your agent gets
28
28
 
29
+ Version 0.1.19 restores source text into spare space after fitting a complete
30
+ compact search page. Existing hits, visible text, source lines and continuations
31
+ remain protected within the same response budget; ranking and retrieval are unchanged.
32
+
29
33
  Version 0.1.7 also provides `changes` and `trace` commands: investigate a diff,
30
34
  follow source-backed caller paths, export JSON/Markdown, and check or refresh saved
31
35
  evidence. MCP equivalents `change_context` and `trace_flow` are local full-profile
@@ -38,7 +42,9 @@ tests, such as `_test.dart` and Perl `.t` scripts and `t/` modules. Version
38
42
  0.1.12 makes `doctor --client claude` read the local-scope entry that
39
43
  `claude mcp add` writes to `~/.claude.json`. Version 0.1.13 fills compact search
40
44
  pages within their budget, offers bounded deeper searches, and repairs stale
41
- navigation indexes after successful restart parsing. Version 0.1.17 lets a later explicit inspection retry a failed selected-file parse
45
+ navigation indexes after successful restart parsing. Version 0.1.18 restores the ready phase after a failed snapshot load is followed by a complete fallback rebuild. Incomplete recovery stays guarded.
46
+
47
+ Version 0.1.17 lets a later explicit inspection retry a failed selected-file parse
42
48
  after a one-second cooldown, preserving immediate-repeat and source guards.
43
49
  Version 0.1.16 stabilizes tied symbol pages and reduces the Docker image while
44
50
  preserving runtime contracts. It adds bounded online maintenance evidence; the
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
6
6
 
7
7
  [project]
8
8
  name = "attocode-code-intel"
9
- version = "0.1.17"
9
+ version = "0.1.19"
10
10
  description = "Local code search and navigation for coding agents and people"
11
11
  readme = "README.md"
12
12
  requires-python = ">=3.12"
@@ -49,4 +49,4 @@ def __getattr__(name: str) -> Any:
49
49
  raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
50
50
 
51
51
  # The other copy is packages/code-intel/pyproject.toml. A test checks that both match.
52
- __version__ = "0.1.17"
52
+ __version__ = "0.1.19"
@@ -471,6 +471,9 @@ class ASTService:
471
471
  for target in targets:
472
472
  self._index.add_file_dependency(src, target)
473
473
  state.dep_graph_files = len(dep_graph.forward)
474
+ if is_full_parse and state.parsed_files == state.reference_indexed_files == source_count:
475
+ # A failed restore can reset the phase before the full rebuild.
476
+ state.phase = "ready"
474
477
  self._initialized = True
475
478
  return state
476
479
 
@@ -140,6 +140,73 @@ def _fill_search_prefix(metadata, data, rows, total, max_tokens, *, upstream_tru
140
140
  return compact_result(metadata, data)
141
141
 
142
142
 
143
+
144
+ _SEARCH_SNIPPET_PROBES = 12
145
+ _SNIPPET_FIELDS = ("snippet", "snippet_start_line", "snippet_end_line", "snippet_truncated")
146
+
147
+
148
+ def _restore_search_snippets(result, originals, max_tokens, *, upstream_truncated=False):
149
+ """Spend spare space without replacing any evidence on the fitted page.
150
+
151
+ BPE counts and anchored windows need not be monotone. These are bounded
152
+ probes, not a maximality search; every accepted page is checked in full.
153
+ """
154
+ page = json.loads(result.content[0].text)
155
+ remaining = _SEARCH_SNIPPET_PROBES
156
+ for index, original in enumerate(originals[:len(page["data"]["results"])]):
157
+ if not remaining:
158
+ break
159
+ delivered = page["data"]["results"][index]
160
+ if (not all(key in original and key in delivered for key in _SNIPPET_FIELDS)
161
+ or {k: v for k, v in original.items() if k not in _SNIPPET_FIELDS}
162
+ != {k: v for k, v in delivered.items() if k not in _SNIPPET_FIELDS}):
163
+ continue
164
+ body = original["snippet"]
165
+ if (not isinstance(body, str) or not isinstance(delivered["snippet"], str)
166
+ or len(body) <= len(delivered["snippet"])):
167
+ continue
168
+
169
+ def probe(window, *, position=index):
170
+ nonlocal remaining, page, result
171
+ remaining -= 1
172
+ current = page["data"]["results"][position]
173
+ if (len(window["snippet"]) <= len(current["snippet"])
174
+ or current["snippet"] not in window["snippet"]):
175
+ return "skip"
176
+ old_first, old_last = current["snippet_start_line"], current["snippet_end_line"]
177
+ first, last = window["snippet_start_line"], window["snippet_end_line"]
178
+ if old_first is None and old_last is None:
179
+ if first is not None or last is not None:
180
+ return "skip"
181
+ elif (not all(type(n) is int for n in (old_first, old_last, first, last))
182
+ or not 1 <= first <= old_first <= old_last <= last):
183
+ return "skip"
184
+ trial = deepcopy(page)
185
+ trial["data"]["results"][position].update(window)
186
+ _search_truncation(trial["metadata"], trial["data"], upstream_truncated)
187
+ candidate = compact_result(trial["metadata"], trial["data"])
188
+ if response_tokens(candidate) > max_tokens:
189
+ return "over"
190
+ page, result = trial, candidate
191
+ return "fit"
192
+
193
+ # The original window is the only source of additional text. Check it
194
+ # first, then retain the best tested larger anchored window that fits.
195
+ if probe({key: original[key] for key in _SNIPPET_FIELDS}) == "fit":
196
+ continue
197
+ lo, hi = len(delivered["snippet"]) + 1, len(body) - 1
198
+ while lo <= hi and remaining:
199
+ cap = (lo + hi) // 2
200
+ window = snippet_window(body, page["data"].get("query", ""), cap,
201
+ original["snippet_start_line"])
202
+ window["snippet_truncated"] |= original["snippet_truncated"]
203
+ if probe(window) == "over":
204
+ hi = cap - 1
205
+ else:
206
+ lo = cap + 1
207
+ return result
208
+
209
+
143
210
  def bounded_search(metadata, data, max_tokens, *, all_results, follow_up=None):
144
211
  """Fit search delivery, reserving a progressing retry after final omissions."""
145
212
  payload = deepcopy(data)
@@ -179,7 +246,8 @@ def bounded_search(metadata, data, max_tokens, *, all_results, follow_up=None):
179
246
  and len(delivered["data"]["results"]) >= delivered["data"]["ranking"]["candidate_pool_count"]):
180
247
  delivered["data"].pop("follow_up", None)
181
248
  result = compact_result(delivered["metadata"], delivered["data"])
182
- return result
249
+ return _restore_search_snippets(result, all_results, max_tokens,
250
+ upstream_truncated=metadata.get("truncated", False))
183
251
 
184
252
 
185
253
  def bounded_compact(metadata: dict, data, max_tokens: int, *, search_results=None) -> types.CallToolResult:
@@ -0,0 +1,157 @@
1
+ """A completed snapshot fallback must publish its reconstructed readiness."""
2
+
3
+ import json
4
+ import sqlite3
5
+ from contextlib import nullcontext
6
+ from dataclasses import asdict
7
+ from unittest.mock import patch
8
+
9
+ import pytest
10
+ from attocode_intel._internal.integrations.context import ast_service
11
+ from attocode_intel._internal.integrations.context.ast_service import ASTService
12
+ from attocode_intel._internal.integrations.context.index_store import SNAPSHOT_KEY, IndexStore
13
+ from attocode_intel.service import CodeIntelService
14
+
15
+ from eval.quality.readiness import coverage_ready
16
+
17
+
18
+ def close(service):
19
+ service.stop_hydration()
20
+ service._store.close()
21
+
22
+
23
+ def seed(root):
24
+ (root / 'helper.py').write_text('def helper():\n return 1\n')
25
+ (root / 'caller.py').write_text('from helper import helper\ndef caller():\n return helper()\n')
26
+ (root / 'empty.py').write_text('# intentionally no definitions\n')
27
+ service = ASTService(str(root))
28
+ assert service.initialize_skeleton().phase == 'ready'
29
+ return service
30
+
31
+
32
+ def navigation(service):
33
+ index = service._index
34
+ return {
35
+ 'asts': {p: asdict(ast) for p, ast in service._ast_cache.items()},
36
+ 'definitions': {p: [asdict(v) for v in values] for p, values in index.definitions.items()},
37
+ 'references': {p: [asdict(v) for v in values] for p, values in index.references.items()},
38
+ 'dependencies': index.file_dependencies,
39
+ 'calls': index.call_edges,
40
+ 'callers': index.callers_of,
41
+ 'stats': service._store.stats(),
42
+ }
43
+
44
+
45
+ @pytest.mark.parametrize('fault', ['sqlite', 'malformed', 'shape'])
46
+ def test_recovered_snapshot_publishes_ready(tmp_path, fault):
47
+ first = seed(tmp_path)
48
+ expected = navigation(first)
49
+ if fault != 'sqlite':
50
+ first._store.set_meta(SNAPSHOT_KEY, '{bad json' if fault == 'malformed' else 'null')
51
+ close(first)
52
+ second = ASTService(str(tmp_path))
53
+ failure = patch.object(IndexStore, 'load_symbols', side_effect=sqlite3.DatabaseError('read failed')) if fault == 'sqlite' else nullcontext()
54
+ try:
55
+ with failure, patch.object(second, '_index_references', wraps=second._index_references) as extracted:
56
+ state = second.initialize_skeleton()
57
+ assert extracted.call_count == state.total_files == state.parsed_files == state.reference_indexed_files == 3
58
+ assert navigation(second) == expected
59
+ assert json.loads(second._store.get_meta(SNAPSHOT_KEY))['parsed'] == sorted(expected['asts'])
60
+ coverage = second.hydration_snapshot()
61
+ assert coverage['parse_coverage'] == coverage['reference_coverage'] == 1.0
62
+ assert state.phase == coverage['phase'] == 'ready', 'completed snapshot fallback still reports skeleton'
63
+ assert coverage_ready(coverage)
64
+ finally:
65
+ close(second)
66
+ third = ASTService(str(tmp_path))
67
+ try:
68
+ with patch.object(third, '_index_references', side_effect=AssertionError('reparsed healthy recovery')):
69
+ assert third.initialize_skeleton().phase == 'ready'
70
+ assert navigation(third) == expected
71
+ finally:
72
+ close(third)
73
+
74
+
75
+ @pytest.mark.parametrize('partial', ['budget', 'parse'])
76
+ def test_partial_snapshot_fallback_stays_skeleton(tmp_path, monkeypatch, partial):
77
+ first = seed(tmp_path)
78
+ close(first)
79
+ if partial == 'budget':
80
+ monkeypatch.setattr(ast_service, 'skeleton_budget', lambda *_: 1)
81
+ second = ASTService(str(tmp_path))
82
+ original = ast_service.parse_file
83
+
84
+ def parse(path):
85
+ if partial == 'parse' and str(path).endswith('/caller.py'):
86
+ raise OSError('source read failed')
87
+ return original(path)
88
+
89
+ try:
90
+ with (patch.object(IndexStore, 'load_symbols', side_effect=sqlite3.DatabaseError('read failed')),
91
+ patch.object(ast_service, 'parse_file', parse)):
92
+ state = second.initialize_skeleton()
93
+ assert state.parsed_files < state.total_files
94
+ assert state.phase == second.hydration_snapshot()['phase'] == 'skeleton'
95
+ assert not coverage_ready(second.hydration_snapshot())
96
+ assert not second._store.get_meta(SNAPSHOT_KEY)
97
+ finally:
98
+ close(second)
99
+
100
+
101
+ def test_minimal_initialization_keeps_its_skeleton(tmp_path):
102
+ first = seed(tmp_path)
103
+ close(first)
104
+ second = ASTService(str(tmp_path))
105
+ try:
106
+ with patch.object(IndexStore, 'load_symbols', side_effect=AssertionError('minimal loaded snapshot')):
107
+ state = second.initialize_skeleton(indexing_depth='minimal')
108
+ assert state.phase == 'skeleton' and state.parsed_files == state.reference_indexed_files == 0
109
+ assert not coverage_ready(second.hydration_snapshot())
110
+ finally:
111
+ close(second)
112
+
113
+
114
+ def test_empty_fallback_publishes_completed_empty_state(tmp_path):
115
+ service = ASTService(str(tmp_path))
116
+ service._store.set_meta(SNAPSHOT_KEY, 'null')
117
+ try:
118
+ state = service.initialize_skeleton()
119
+ assert state.total_files == state.parsed_files == state.reference_indexed_files == 0
120
+ assert state.phase == 'ready'
121
+ assert service._store.get_meta(SNAPSHOT_KEY)
122
+ assert not coverage_ready(service.hydration_snapshot()) # experiment barrier requires a nonempty fixture
123
+ finally:
124
+ close(service)
125
+
126
+
127
+ def test_interrupted_fallback_does_not_publish_ready(tmp_path):
128
+ first = seed(tmp_path)
129
+ close(first)
130
+ second = ASTService(str(tmp_path))
131
+ try:
132
+ with (patch.object(IndexStore, 'load_symbols', side_effect=sqlite3.DatabaseError('read failed')),
133
+ patch.object(IndexStore, 'save_files_batch', side_effect=OSError('write interrupted')),
134
+ pytest.raises(OSError, match='write interrupted')):
135
+ second.initialize_skeleton()
136
+ assert second._hydration_state.phase == 'skeleton'
137
+ assert not second.initialized and not second._store.get_meta(SNAPSHOT_KEY)
138
+ finally:
139
+ close(second)
140
+
141
+
142
+ def test_service_uses_completed_recovery_without_background_hydration(tmp_path):
143
+ first = seed(tmp_path)
144
+ close(first)
145
+ ast = ASTService(str(tmp_path))
146
+ service = CodeIntelService(str(tmp_path))
147
+ try:
148
+ # Suppress the real background thread so it cannot hide the returned phase.
149
+ with (patch.object(ASTService, 'get_instance', return_value=ast),
150
+ patch.object(IndexStore, 'load_symbols', side_effect=sqlite3.DatabaseError('read failed')),
151
+ patch.object(ASTService, 'start_hydration') as background):
152
+ restored = service._get_ast_service()
153
+ assert restored is ast and coverage_ready(restored.hydration_snapshot())
154
+ assert background.call_count == 0
155
+ assert ast._index.get_references('helper')
156
+ finally:
157
+ close(ast)
@@ -115,7 +115,17 @@ def test_new_follow_up_never_crowds_out_previously_delivered_evidence(path_size,
115
115
  result = bounded_search(metadata, data, budget, all_results=data["results"], follow_up=follow)
116
116
  assert response_tokens(result) <= budget
117
117
  actual = json.loads(result.content[0].text)["data"]["results"]
118
- assert actual[:len(protected)] == protected
118
+ assert len(actual) >= len(protected)
119
+ preview_fields = {"snippet", "snippet_start_line", "snippet_end_line", "snippet_truncated"}
120
+ for before, after in zip(protected, actual, strict=False):
121
+ assert {k: v for k, v in before.items() if k not in preview_fields} == {
122
+ k: v for k, v in after.items() if k not in preview_fields}
123
+ assert before["snippet"] in after["snippet"]
124
+ if before["snippet_start_line"] is not None:
125
+ assert after["snippet_start_line"] <= before["snippet_start_line"]
126
+ assert after["snippet_end_line"] >= before["snippet_end_line"]
127
+ else:
128
+ assert after["snippet_start_line"] is after["snippet_end_line"] is None
119
129
 
120
130
 
121
131
  @pytest.mark.asyncio
@@ -0,0 +1,300 @@
1
+ """Source text discarded by coarse fitting can be restored without losing the page."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from copy import deepcopy
7
+
8
+ import pytest
9
+ from attocode_intel.output import bounded_compact, bounded_search, compact_result, response_tokens
10
+
11
+
12
+ def source_page(kind="unicode", workspace="/repo"):
13
+ body = (
14
+ (' needle = "' + "雪境風雷光雨山海" * 40 + '"\n')
15
+ if kind == "unicode"
16
+ else (" # needle " + '"\\\t雪"' * 64 + "\r\n")
17
+ )
18
+ row = {
19
+ "file_path": "src/worker.py",
20
+ "name": "worker",
21
+ "chunk_type": "function",
22
+ "score": 0.5,
23
+ "line": 9,
24
+ "end_line": 12,
25
+ "snippet": body,
26
+ "snippet_start_line": 10,
27
+ "snippet_end_line": 10,
28
+ "snippet_truncated": True,
29
+ "matched_terms": ["needle"],
30
+ "match_fields": ["source"],
31
+ }
32
+ return {"workspace": workspace, "truncated": True}, {
33
+ "query": "needle",
34
+ "results": [row],
35
+ "ranking": {"candidate_pool_count": 1, "returned_count": 1, "delivered_count": 1},
36
+ }
37
+
38
+
39
+ @pytest.mark.parametrize("kind", ["unicode", "escaped"])
40
+ @pytest.mark.parametrize(
41
+ "workspace", ["/repo", "/" + "long_checkout_name/" * 30], ids=["short-root", "long-root"]
42
+ )
43
+ def test_small_overflow_preserves_more_than_three_quarters_of_source(kind, workspace):
44
+ metadata, data = source_page(kind, workspace)
45
+ budget = response_tokens(compact_result(metadata, data)) - 1
46
+ original = data["results"][0]["snippet"]
47
+ legacy = bounded_compact(metadata, data, budget, search_results=[])
48
+ old = json.loads(legacy.content[0].text)["data"]["results"][0]["snippet"]
49
+ assert len(old) <= len(original) // 2
50
+ actual = bounded_search(metadata, data, budget, all_results=data["results"])
51
+ delivered = json.loads(actual.content[0].text)["data"]["results"][0]
52
+ assert response_tokens(actual) <= budget
53
+ assert len(delivered["snippet"]) > len(original) * 3 // 4, (
54
+ "snippet restoration boundary: excessive source loss"
55
+ )
56
+ assert old in delivered["snippet"] and delivered["snippet"] in original
57
+ assert delivered["snippet_start_line"] == delivered["snippet_end_line"] == 10
58
+
59
+
60
+ def test_fitting_search_payload_is_byte_identical():
61
+ metadata, data = source_page()
62
+ budget = response_tokens(compact_result(metadata, data)) + 1000
63
+ legacy = bounded_compact(metadata, data, budget, search_results=[])
64
+ actual = bounded_search(metadata, data, budget, all_results=data["results"])
65
+ assert actual.model_dump() == legacy.model_dump()
66
+
67
+
68
+ def test_restoration_does_not_mutate_inputs():
69
+ metadata, data = source_page()
70
+ original = deepcopy((metadata, data))
71
+ budget = response_tokens(compact_result(metadata, data)) - 1
72
+ bounded_search(metadata, data, budget, all_results=data["results"])
73
+ assert (metadata, data) == original
74
+
75
+
76
+ def test_delivered_floor_and_source_coordinates_remain_valid():
77
+ metadata, data = source_page()
78
+ budget = response_tokens(compact_result(metadata, data)) - 1
79
+ legacy = bounded_compact(metadata, data, budget, search_results=[])
80
+ old = json.loads(legacy.content[0].text)["data"]["results"]
81
+ response = bounded_search(metadata, data, budget, all_results=data["results"])
82
+ actual = json.loads(response.content[0].text)["data"]["results"]
83
+ previews = {"snippet", "snippet_start_line", "snippet_end_line", "snippet_truncated"}
84
+ assert len(actual) == len(old) == 1
85
+ for before, after in zip(old, actual, strict=True):
86
+ assert {k: v for k, v in before.items() if k not in previews} == {
87
+ k: v for k, v in after.items() if k not in previews
88
+ }
89
+ assert before["snippet"] in after["snippet"] in data["results"][0]["snippet"]
90
+ assert after["snippet_start_line"] == after["snippet_end_line"] == 10
91
+ assert response_tokens(response) <= budget
92
+
93
+
94
+ def legacy_search(monkeypatch, metadata, data, budget, follow_up=None):
95
+ from attocode_intel import output
96
+
97
+ with monkeypatch.context() as patch:
98
+ patch.setattr(output, "_restore_search_snippets", lambda result, *args, **kwargs: result)
99
+ return output.bounded_search(
100
+ metadata, data, budget, all_results=data["results"], follow_up=follow_up
101
+ )
102
+
103
+
104
+ def assert_protected_page(before, after):
105
+ old = json.loads(before.content[0].text)
106
+ new = json.loads(after.content[0].text)
107
+ assert len(old["data"]["results"]) == len(new["data"]["results"])
108
+ previews = {"snippet", "snippet_start_line", "snippet_end_line", "snippet_truncated"}
109
+ for previous, current in zip(old["data"]["results"], new["data"]["results"], strict=True):
110
+ assert {k: v for k, v in previous.items() if k not in previews} == {
111
+ k: v for k, v in current.items() if k not in previews
112
+ }
113
+ assert previous["snippet"] in current["snippet"]
114
+ if previous["snippet_start_line"] is None:
115
+ assert current["snippet_start_line"] is current["snippet_end_line"] is None
116
+ else:
117
+ assert current["snippet_start_line"] <= previous["snippet_start_line"]
118
+ assert current["snippet_end_line"] >= previous["snippet_end_line"]
119
+ assert {k: v for k, v in old["data"].items() if k != "results"} == {
120
+ k: v for k, v in new["data"].items() if k != "results"
121
+ }
122
+ assert {k: v for k, v in old["metadata"].items() if k not in {"truncated", "omitted"}} == {
123
+ k: v for k, v in new["metadata"].items() if k not in {"truncated", "omitted"}
124
+ }
125
+
126
+
127
+ def many_source_rows(count=5):
128
+ metadata, data = source_page()
129
+ row = data["results"][0]
130
+ data["results"] = [
131
+ {**deepcopy(row), "file_path": f"src/worker_{i}.py", "score": 1 - i / 100}
132
+ for i in range(count)
133
+ ]
134
+ data["ranking"].update(candidate_pool_count=count, returned_count=count, delivered_count=count)
135
+ return metadata, data
136
+
137
+
138
+ @pytest.mark.parametrize("budget", [600, 1200, 2000, 8000])
139
+ def test_complete_fitted_prefix_and_continuation_are_protected(monkeypatch, budget):
140
+ metadata, data = many_source_rows()
141
+ follow = {
142
+ "tool": "semantic_search",
143
+ "arguments": {
144
+ "query": "needle",
145
+ "top_k": 10,
146
+ "workspace": metadata["workspace"],
147
+ "max_tokens": 16000,
148
+ },
149
+ "reruns_current_index": True,
150
+ "reason": "search_deeper",
151
+ }
152
+ before = legacy_search(monkeypatch, metadata, data, budget, follow)
153
+ after = bounded_search(metadata, data, budget, all_results=data["results"], follow_up=follow)
154
+ assert_protected_page(before, after)
155
+ assert response_tokens(after) <= budget
156
+
157
+
158
+ def test_restoration_has_a_global_serialization_probe_cap(monkeypatch):
159
+ from attocode_intel import output
160
+
161
+ metadata, data = many_source_rows(24)
162
+ budget = 8000
163
+ before = legacy_search(monkeypatch, metadata, data, budget)
164
+ real_count = output.response_tokens
165
+ calls = []
166
+
167
+ def count(result):
168
+ calls.append(result)
169
+ return real_count(result)
170
+
171
+ monkeypatch.setattr(output, "response_tokens", count)
172
+ after = output._restore_search_snippets(
173
+ before, data["results"], budget, upstream_truncated=True
174
+ )
175
+ assert 0 < len(calls) <= 12
176
+ assert real_count(after) <= budget
177
+ assert_protected_page(before, after)
178
+
179
+
180
+ def test_nonmonotone_probes_cannot_admit_overbudget_or_lose_text(monkeypatch):
181
+ from attocode_intel import output
182
+
183
+ metadata, data = source_page()
184
+ budget = response_tokens(compact_result(metadata, data)) - 1
185
+ before = legacy_search(monkeypatch, metadata, data, budget)
186
+ real_count = output.response_tokens
187
+ calls = []
188
+
189
+ def conservative_nonmonotone(result):
190
+ actual = real_count(result)
191
+ measured = max(actual, budget + 1) if len(calls) % 2 else actual
192
+ calls.append((actual, measured))
193
+ return measured
194
+
195
+ monkeypatch.setattr(output, "response_tokens", conservative_nonmonotone)
196
+ after = output._restore_search_snippets(
197
+ before, data["results"], budget, upstream_truncated=True
198
+ )
199
+ assert any(measured > actual for actual, measured in calls)
200
+ assert len(calls) <= 12 and real_count(after) <= budget
201
+ assert_protected_page(before, after)
202
+
203
+
204
+ @pytest.mark.parametrize("upstream", [False, True])
205
+ @pytest.mark.parametrize("unrelated", [False, True])
206
+ def test_full_restoration_cleans_only_its_own_omission(upstream, unrelated):
207
+ from attocode_intel.output import _restore_search_snippets
208
+
209
+ metadata, data = source_page()
210
+ original = data["results"][0]
211
+ original.update(line=10, end_line=10, snippet_truncated=False)
212
+ rows = deepcopy(data["results"])
213
+ data["results"][0].update(snippet=original["snippet"][:40], snippet_truncated=True)
214
+ metadata["truncated"] = True
215
+ metadata["omitted"] = {"data.results.snippet": "shortened"}
216
+ if unrelated:
217
+ metadata["omitted"]["data.other"] = "shortened"
218
+ before = compact_result(metadata, data)
219
+ after = _restore_search_snippets(before, rows, 8000, upstream_truncated=upstream)
220
+ page = json.loads(after.content[0].text)
221
+ assert page["data"]["results"] == rows
222
+ assert not page["metadata"].get("omitted", {}).get("data.results.snippet")
223
+ assert page["metadata"]["truncated"] is (upstream or unrelated)
224
+ assert bool(page["metadata"].get("omitted", {}).get("data.other")) is unrelated
225
+ assert_protected_page(before, after)
226
+ assert response_tokens(after) <= 8000
227
+
228
+
229
+ def test_repeated_text_keeps_corresponding_source_rows():
230
+ from attocode_intel.output import _restore_search_snippets
231
+
232
+ metadata, data = many_source_rows(2)
233
+ for i, row in enumerate(data["results"]):
234
+ row.update(
235
+ file_path="src/worker.py",
236
+ line=10 + i * 10,
237
+ end_line=10 + i * 10,
238
+ snippet_start_line=10 + i * 10,
239
+ snippet_end_line=10 + i * 10,
240
+ snippet=row["snippet"] + f"# source marker {i}",
241
+ )
242
+ row["snippet_end_line"] += 1
243
+ row["end_line"] += 1
244
+ originals = deepcopy(data["results"])
245
+ for row in data["results"]:
246
+ row.update(snippet=row["snippet"][:32], snippet_end_line=row["snippet_start_line"])
247
+ before = compact_result(metadata, data)
248
+ after = _restore_search_snippets(before, originals, 8000, upstream_truncated=True)
249
+ assert json.loads(after.content[0].text)["data"]["results"] == originals
250
+ assert_protected_page(before, after)
251
+
252
+
253
+ async def test_actual_gateway_preserves_source_and_budget_after_restoration(tmp_path, monkeypatch):
254
+ import asyncio
255
+ import time
256
+
257
+ from attocode_intel.gateway import OperationGateway
258
+ from attocode_intel.service import CodeIntelService
259
+
260
+ monkeypatch.setenv("ATTOCODE_INTEL_RANKING_PROVIDER", "off")
261
+ monkeypatch.setenv("ATTOCODE_INTEL_PRECISION", "off")
262
+ body = 'def worker():\n needle = "' + "雪境風雷光雨山海" * 80 + '"\n return needle\n'
263
+ (tmp_path / "worker.py").write_text(body)
264
+ service = CodeIntelService(str(tmp_path))
265
+ manager = service._get_semantic_search()
266
+ manager.warm()
267
+ assert manager.wait_for_body_index(timeout=10)
268
+ gateway = OperationGateway(str(tmp_path), "daily", watch=False)
269
+ arguments = {"query": "needle", "top_k": 24, "max_tokens": 8000}
270
+ try:
271
+ deadline = time.monotonic() + 20
272
+ while True:
273
+ full = await gateway.execute_mcp("semantic_search", arguments)
274
+ assert not full.isError
275
+ page = json.loads(full.content[0].text)
276
+ if page["data"]["ranking"]["index"]["status"] == "ready":
277
+ break
278
+ assert time.monotonic() < deadline
279
+ await asyncio.sleep(0.05)
280
+ budget = response_tokens(full) - 1
281
+ from attocode_intel import output
282
+
283
+ with monkeypatch.context() as patch:
284
+ patch.setattr(output, "_restore_search_snippets", lambda result, *a, **k: result)
285
+ before = await gateway.execute_mcp(
286
+ "semantic_search", {**arguments, "max_tokens": budget}
287
+ )
288
+ after = await gateway.execute_mcp("semantic_search", {**arguments, "max_tokens": budget})
289
+ assert not before.isError and not after.isError
290
+ assert_protected_page(before, after)
291
+ assert response_tokens(after) <= budget
292
+ for hit in json.loads(after.content[0].text)["data"]["results"]:
293
+ assert hit["file_path"] == "worker.py"
294
+ lines = body.splitlines(keepends=True)
295
+ assert hit["snippet"] in "".join(
296
+ lines[hit["snippet_start_line"] - 1 : hit["snippet_end_line"]]
297
+ )
298
+ finally:
299
+ await gateway.close()
300
+ manager.close()