attocode-code-intel 0.1.16__tar.gz → 0.1.18__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.
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/PKG-INFO +6 -2
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/README.md +5 -1
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/pyproject.toml +1 -1
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/__init__.py +1 -1
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/ast_service.py +27 -13
- attocode_code_intel-0.1.18/tests/test_experiment_readiness.py +128 -0
- attocode_code_intel-0.1.18/tests/test_fixture_source_alias.py +46 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_parse_recovery.py +64 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_preview_admission.py +13 -5
- attocode_code_intel-0.1.18/tests/test_recovery_readiness.py +157 -0
- attocode_code_intel-0.1.18/tests/test_restart_experiment.py +270 -0
- attocode_code_intel-0.1.16/tests/test_restart_experiment.py +0 -139
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/.gitignore +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/LICENSE +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/README.md +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/ast_restart_probe.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/body_cost_probe.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/broad_candidate_audit.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/broad_query_cases.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/broad_query_external_cases.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/broad_query_final_holdout.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/client_comparison.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/client_responses.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/codex_repair_study.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/daily.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-13-codex-repair-diagnostic.md +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-13-r7-task-completion-pilot.md +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-14-workflow-pilot.md +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-15-body-file-trial.md +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-15-body-file-validation.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-15-expansion-ablation.md +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-15-expansion-development.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-15-expansion-validation.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-15-fresh-navigation-queries.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-15-headroom-retrieval-questions.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-15-headroom-retrieval.md +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-cross-file-questions.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-deep-page-questions.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-kotlin-test-paths.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-navigation-prefix-validation.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-navigation-prefix.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-negation-candidate.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-negation-development.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-negation-freeze.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-negation-validation.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-search-correctness-candidates/accepted.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-search-correctness-candidates/boundaries.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-search-correctness-candidates/combined.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-search-correctness-candidates/expansion.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-search-correctness-candidates/identity.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-search-correctness-candidates/manifest.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-search-correctness-candidates/negation.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-search-correctness-candidates/owner_only.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-search-correctness-candidates/owners.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-search-correctness-confirmation-freeze.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-search-correctness-confirmation.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-search-correctness-development.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-search-correctness-freeze.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-search-correctness-validation.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-search-usefulness-development.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-search-usefulness-validation.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-search-usefulness.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-16-test-intent.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-change-focus-candidate.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-change-workflow-replays.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-change-workflow-replays.md +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-file-coverage-c2f.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-file-coverage-development.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-file-coverage-freeze.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-file-coverage-t.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-file-coverage-tcf.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-file-coverage-validation.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-search-batch-candidate.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-search-batch-development.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-search-batch-freeze.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-search-batch-validation.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-test-source-slot-candidate.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-test-source-slot-development.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-test-source-slot-freeze.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-test-source-slot-t2.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-test-source-slot-t3.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-17-test-source-slot-validation.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-paired-source-candidate.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-paired-source-development.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-paired-source-freeze.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-paired-source-p.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-paired-source-pf.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-paired-source-validation.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-query-source-candidate.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-query-source-development.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-query-source-freeze.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-query-source-q1.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-query-source-q2.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-query-source-q3.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-query-source-q5.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-query-source-s1.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-query-source-s2-equivalence.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-query-source-s2-freeze.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-query-source-s2-validation.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-query-source-s2.patch.gz +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-18-query-source-validation.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-19-cpu-fn-embed-cost.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-20-clause-balance-validation.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-20-search-repair-validation.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-20-test-support-development.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-20-test-support-freeze.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-23-preview-windows.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/designs/2026-10-23-restart-fingerprints.json +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/discovery_reuse_probe.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/external_benchmarks.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/external_study.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/graded_blind_pack.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/lexical_sql_probe.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/localize_study.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/locbench_title_pack.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/onboarding_study.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/pilot.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/quality_scoring.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/quality_tasks.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/release_gate.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/repair_grading.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/repair_study.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/repair_worker.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/responses.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/restart_discovery_probe.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/search_evidence_audit.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/source_view_transfer.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/structural_write_probe.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/study.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/study_clients.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/study_events.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/study_tasks.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/token_overhead.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/understanding_scoring.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/understanding_study.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/warm_cache.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/evals/workflows.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/GUIDELINES.md +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/errors/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/architecture_drift.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/ast_chunker.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/ast_snapshot.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/blob_oid.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/cache_manifest.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/cas.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/code_analyzer.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/codebase_ast.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/codebase_context.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/cross_mode.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/cross_references.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/discovery_snapshot.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/embedding_rotation.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/embeddings.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/frecency.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/fuzzy.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/hierarchical_explorer.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/hydration.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/index_probe.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/index_repair.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/index_store.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/language_registry.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/memory_store.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/module_resolution.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/parse_diagnostics.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/query_constraints.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/query_history.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/reranker.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/semantic_search.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/syntax_evidence.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/systemone_ranker.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/temporal_coupling.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/trigram_index.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/trigram_regex.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/ts_parser.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/context/vector_store.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/feature_flags/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/lsp/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/lsp/client.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/mcp/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/mcp/client.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/security/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/security/custom_rules.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/security/dataflow.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/security/dependency_audit.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/security/matcher.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/security/patterns.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/security/scanner.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/utilities/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/utilities/ignore.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/integrations/utilities/token_estimate.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/tricks/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/tricks/recursive_context.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/types/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/types/events.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_internal/types/severity.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/_shared.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/analysis_coverage.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/access.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/app.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/auth/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/auth/api_keys.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/auth/context.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/auth/jwt.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/auth/oauth.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/auth/passwords.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/deps.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/knowledge_bridge.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/mcp_transport.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/middleware.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/models.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/providers/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/providers/db_provider.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/providers/local_provider.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/providers/remote_provider.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/repository_source.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/_pin_helper.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/activity.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/adr.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/analysis.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/api_keys.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/auth.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/branches.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/cross_repo_search.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/embeddings.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/files.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/files_v2.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/gc.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/git_v2.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/graph.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/graph_viz.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/health.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/history.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/jobs.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/learning.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/lsp.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/notify.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/operations.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/orgs.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/preferences.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/presence.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/projects.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/repos.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/search.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/snapshots.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/webhooks.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/routes/websocket.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/static/graph.html +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/api/utils.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/artifacts/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/artifacts/hashing.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/artifacts/provenance.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/artifacts/retrieval_pin.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/audit.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/bug_finder.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/bundle.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/catalog.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/change_evidence.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/change_investigation.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/change_review.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/cli.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/community.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/confidence/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/confidence/jev.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/confidence/llm.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/confidence/redact.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/confidence/settings.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/config.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/crypto.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/db/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/db/base.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/db/engine.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/db/models.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/entrypoint.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/focused_evidence.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/freshness.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/gateway.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/git/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/git/credentials.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/git/manager.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/git/models.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/git/storage.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/graph_query_parser.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/helpers.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/indexing/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/indexing/debouncer.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/indexing/delta_indexer.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/indexing/full_indexer.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/indexing/incremental.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/indexing/parser.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/indexing/summarizer.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/installer.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/investigation_cli.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/knowledge.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/local_knowledge.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/alembic.ini +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/env.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/script.py.mako +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/001_initial_schema.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/002_branch_version_and_embeddings.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/003_embedding_uniqueness_and_cascade.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/004_audit_events.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/005_user_preferences.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/006_google_oauth.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/007_pgvector_embeddings.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/008_symbol_references.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/009_webhook_secret_encryption.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/010_add_commits_table.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/011_commit_changed_files.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/012_branch_merged_at.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/013_revoked_tokens.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/014_blame_hunks.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/015_commit_file_stats.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/016_embedding_provenance_columns.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/017_provenance_table.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/018_repo_snapshots.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/019_symref_caller.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/migrations/versions/020_shared_knowledge.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/onboarding.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/output.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/precision.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/presence.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/probe.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/project_dir.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/pubsub.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/query_ranking.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/readiness.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/redis.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/reference_pages.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/remote.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/repo_ranker.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/request_context.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/ci.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/combinators.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/enricher.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/evolution.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/executor.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/filters/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/filters/pipeline.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/formatter.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/hygiene.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/importers/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/importers/semgrep.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/loader.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/marketplace.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/metavar.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/model.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/_license_templates/Apache-2.0.txt +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/_license_templates/MIT.txt +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/bandit-python/LICENSE +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/bandit-python/NOTICE +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/bandit-python/PORTING.md +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/bandit-python/manifest.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/bandit-python/rules/B105-hardcoded-password.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/bandit-python/rules/B303-weak-md5.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/bandit-python/rules/B304-weak-des.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/bandit-python/rules/B307-use-of-eval.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/bandit-python/rules/B324-weak-sha1.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/bandit-python/rules/B501-no-cert-validation.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/bandit-python/rules/B602-shell-true.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/bandit-python/rules/B608-sqli.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/eslint-typescript/LICENSE +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/eslint-typescript/NOTICE +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/eslint-typescript/PORTING.md +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/eslint-typescript/manifest.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/eqeqeq.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-eval.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-implied-eval.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-new-func.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-throw-literal.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-var.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/eslint-typescript/rules/no-with.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/gosec-go/LICENSE +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/gosec-go/NOTICE +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/gosec-go/PORTING.md +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/gosec-go/manifest.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/gosec-go/rules/G101-hardcoded-credentials.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/gosec-go/rules/G102-bind-all-interfaces.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/gosec-go/rules/G103-unsafe-block.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/gosec-go/rules/G201-sql-format.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/gosec-go/rules/G304-file-inclusion.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/gosec-go/rules/G401-weak-cipher.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/gosec-go/rules/G402-tls-min-version.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/community/gosec-go/rules/G501-md5-import.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/cpp/manifest.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/cpp/rules/security.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/cpp/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/csharp/manifest.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/csharp/rules/security.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/csharp/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/go/manifest.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/go/rules/performance.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/go/rules/security.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/go/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/go/taint/sanitizers.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/go/taint/sinks.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/go/taint/sources.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/java/manifest.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/java/rules/correctness.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/java/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/java/taint/sinks.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/java/taint/sources.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/kotlin/manifest.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/kotlin/rules/correctness.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/kotlin/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/php/manifest.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/php/rules/security.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/php/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/python/manifest.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/python/rules/performance.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/python/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/ruby/manifest.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/ruby/rules/security.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/ruby/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/rust/manifest.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/rust/rules/correctness.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/rust/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/typescript/manifest.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/typescript/rules/performance.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/examples/typescript/rules/structural.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/packs/pack_loader.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/plugins/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/plugins/plugin_loader.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/profiling.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/registry.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/sarif.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/synthesis.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/rules/testing.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/search_evidence.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/server.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/service.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/sharing.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/storage/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/storage/branch_overlay.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/storage/content_store.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/storage/dependency_store.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/storage/diff_engine.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/storage/embedding_store.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/storage/provenance_store.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/storage/security_scanner_db.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/storage/symbol_store.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/structural_evidence.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/symbol_inspection.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/symbol_links.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/telemetry.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/test_ranking.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/testing/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/testing/fixtures.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/testing/helpers.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/testing/mocks.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/adr_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/analysis_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/composite_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/cross_mode_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/dead_code_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/distill_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/frecency_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/fuzzy_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/history_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/learning_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/lsp_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/maintenance_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/navigation_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/overlay_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/pin_store.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/pin_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/query_constraints_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/query_history_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/readiness_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/rule_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/search_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/tools/snapshot_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/workers/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/workers/job_utils.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/workers/jobs.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/workers/run.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/src/attocode_intel/workers/settings.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/fixtures/rule_violations/.attocode/rules/team-preferences.yaml +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/fixtures/rule_violations/go/bad_patterns.go +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/fixtures/rule_violations/java/BadPatterns.java +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/fixtures/rule_violations/python/bad_patterns.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/fixtures/rule_violations/rust/bad_patterns.rs +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/fixtures/rule_violations/typescript/bad_patterns.ts +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/integration/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/integration/code_intel/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/integration/code_intel/conftest.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/integration/code_intel/test_http_smoke.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/integration/code_intel/test_mcp_tools_audit.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/integration/code_intel/test_remote_mcp_http_integration.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/integration/code_intel/test_service_integration.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/integration/test_rule_bench_floor_e2e.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_ast_snapshot.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_behavioral_negation.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_change_focus.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_change_investigation.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_chunk_identity.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_codex_repair_study.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_cold_discovery.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_cold_index_cost.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_compact_inspection.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_corpus_capture.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_daily_workflows.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_db_navigation_http.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_discovery_reuse.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_doctor.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_doctor_runtime.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_edit_restart.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_experiment_evidence.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_external_study.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_file_symbol_scope.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_focused_inspection.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_image_budget.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_importance_publication.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_index_probe.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_index_processes.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_index_reuse.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_index_sequences.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_kotlin_test_paths.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_language_capabilities.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_lean_profile.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_lexical_sql_cost.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_local_reranker.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_local_workflow_evidence.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_localize_study.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_lsp_diagnostics.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_lsp_document_lifecycle.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_lsp_stderr_lifecycle.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_mcp_search_evaluation.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_mixed_workspace.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_module_ownership.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_native_experiment.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_navigation_evidence.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_navigation_prefix_trial.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_onboarding_study.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_operation_contracts.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_parser_thread_isolation.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_pilot.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_precision_protocol.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_precision_recovery.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_preview_experiment.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_preview_sources.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_preview_windows.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_product.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_quality_cloud.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_quality_evaluation.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_quality_evidence.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_quality_lifecycle.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_quality_runner.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_query_ranking.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_query_requirements.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_ranking_intent.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_real_language_server.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_release_verification.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_remote.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_repair_study.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_retrieval_ablation.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_retrieval_audit.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_retrieval_body_trial.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_retrieval_cycle.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_search_budget_repair.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_search_evidence.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_search_evidence_audit.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_search_usefulness.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_source_exclusions.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_structural_evidence.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_structural_write_cost.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_study.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_symbol_order.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_systemone_ranker.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_test_intent_trial.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_token_overhead.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_trigram_workspace.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_understanding_evaluation.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_walk_order.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_warm_cache.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/test_workflow_sequences.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/conftest.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_advisory_lock.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_api.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_api_phase3a.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_api_v2.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_auth.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_branch_versioning.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_bug_finder.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_call_graph_tool.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_ci_runner.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_cli_lifecycle.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_cli_maintenance_local.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_cli_ops.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_cli_query_commands.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_cli_remote.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_codex_rereview_polish.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_combinators.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_confidence.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_confidence_adoption.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_config.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_config_remote.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_cross_mode.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_db_security_scan.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_deps.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_diff_engine.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_edge_cases.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_frecency.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_fuzzy.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_index_store_migration.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_kw_index_status.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_lsp_call_graph.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_lsp_enrichment.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_lsp_extended_models.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_marketplace.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_metavar.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_middleware.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_notify_enhanced.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_org_isolation.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_pack_autoload.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_profiling.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_project_discovery.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_provenance_store.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_pubsub_streams.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_query_constraints.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_query_history.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_readiness.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_reindex_embeddings.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_remote_local_fallback.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_remote_provider.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_remote_reliability.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_repo_ranker.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_rule_evolution.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_rule_hygiene.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_rule_synthesis.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_rule_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_rule_violations.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_rules_engine.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_rules_integration.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_sarif.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_search_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_server_startup.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_service.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_service_mode.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_status_health.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_structural_executor.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_supply_chain_rules.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_testing_framework.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/test_webhook_encryption.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/tools/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/tools/conftest.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/tools/test_adr_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/tools/test_analysis_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/tools/test_dead_code_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/tools/test_distill_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/tools/test_history_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/tools/test_learning_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/tools/test_lsp_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/tools/test_maintenance_tools_phase2.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/tools/test_navigation_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/tools/test_phase2c_anchors_and_overlays.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/tools/test_readiness_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/tools/test_search_status_mismatch.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/tools/test_search_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/code_intel/tools/test_server_tools.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/context/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/context/test_action_hash.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/context/test_ast_service_adapter.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/context/test_blob_oid.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/context/test_cache_manifest.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/context/test_cas.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/context/test_embedding_rotation.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/context/test_pagerank_restoration.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/context/test_provenance.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/context/test_retrieval_pin.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/context/test_vector_store_dim_safety.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/conftest.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_acc_at_k.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_broad_candidate_audit.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_calibration_demo.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_harness.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_matrix_agents.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_matrix_ci.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_matrix_datasets.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_matrix_dense.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_matrix_function_bm25.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_matrix_function_dense.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_matrix_rerank.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_matrix_retrieve.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_matrix_run.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_matrix_stats.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_mcp_bench.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_rule_accuracy.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_rule_bench_config.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_rule_bench_corpus.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_rule_bench_evaluator.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_rule_bench_predicate.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_rule_bench_scoring.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_rule_bench_template_engine.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_rule_harness_import.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_search_quality_reporting.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_search_readiness.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/eval/test_seed_attocode_fixtures.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_architecture_drift.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_ast_service_hydration.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_body_chunking.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_call_graph.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_code_analyzer.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_codebase_ast.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_codebase_context.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_context_stores_closed.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_cross_ref_search.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_embedder_default.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_embeddings.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_embeddings_query.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_go_symbols.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_hydration.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_index_store.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_model_mismatch.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_path_downweight.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_query_routing.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_semantic_search.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_supported_languages.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_temporal_coupling.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_trigram_index.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_trigram_regex.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/context/test_ts_parser.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/test_dataflow.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/test_feature_flags.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/test_new_security_rules.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/test_security_autofix.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/test_security_matcher.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/test_streaming_lsp.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/utilities/__init__.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/utilities/test_ignore.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/integrations/utilities/test_token_estimate.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/test_code_intel.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/test_code_intel_hydration.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/tests/unit/test_errors.py +0 -0
- {attocode_code_intel-0.1.16 → attocode_code_intel-0.1.18}/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.
|
|
3
|
+
Version: 0.1.18
|
|
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
|
|
@@ -151,7 +151,11 @@ tests, such as `_test.dart` and Perl `.t` scripts and `t/` modules. Version
|
|
|
151
151
|
0.1.12 makes `doctor --client claude` read the local-scope entry that
|
|
152
152
|
`claude mcp add` writes to `~/.claude.json`. Version 0.1.13 fills compact search
|
|
153
153
|
pages within their budget, offers bounded deeper searches, and repairs stale
|
|
154
|
-
navigation indexes after successful restart parsing. Version 0.1.
|
|
154
|
+
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.
|
|
155
|
+
|
|
156
|
+
Version 0.1.17 lets a later explicit inspection retry a failed selected-file parse
|
|
157
|
+
after a one-second cooldown, preserving immediate-repeat and source guards.
|
|
158
|
+
Version 0.1.16 stabilizes tied symbol pages and reduces the Docker image while
|
|
155
159
|
preserving runtime contracts. It adds bounded online maintenance evidence; the
|
|
156
160
|
preview and restart experiments did not justify product changes.
|
|
157
161
|
Version 0.1.15 adds parser ownership by thread, one language-server stderr
|
|
@@ -38,7 +38,11 @@ tests, such as `_test.dart` and Perl `.t` scripts and `t/` modules. Version
|
|
|
38
38
|
0.1.12 makes `doctor --client claude` read the local-scope entry that
|
|
39
39
|
`claude mcp add` writes to `~/.claude.json`. Version 0.1.13 fills compact search
|
|
40
40
|
pages within their budget, offers bounded deeper searches, and repairs stale
|
|
41
|
-
navigation indexes after successful restart parsing. Version 0.1.
|
|
41
|
+
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.
|
|
42
|
+
|
|
43
|
+
Version 0.1.17 lets a later explicit inspection retry a failed selected-file parse
|
|
44
|
+
after a one-second cooldown, preserving immediate-repeat and source guards.
|
|
45
|
+
Version 0.1.16 stabilizes tied symbol pages and reduces the Docker image while
|
|
42
46
|
preserving runtime contracts. It adds bounded online maintenance evidence; the
|
|
43
47
|
preview and restart experiments did not justify product changes.
|
|
44
48
|
Version 0.1.15 adds parser ownership by thread, one language-server stderr
|
|
@@ -21,6 +21,7 @@ import re
|
|
|
21
21
|
import sqlite3
|
|
22
22
|
import threading
|
|
23
23
|
from pathlib import Path
|
|
24
|
+
from time import monotonic as _parse_recovery_now
|
|
24
25
|
from types import SimpleNamespace
|
|
25
26
|
from typing import Any
|
|
26
27
|
|
|
@@ -59,6 +60,7 @@ _instances: dict[str, ASTService] = {}
|
|
|
59
60
|
# Default location for the persistent index
|
|
60
61
|
_INDEX_DIR = ".attocode/index"
|
|
61
62
|
_INDEX_DB = "symbols.db"
|
|
63
|
+
_PARSE_RECOVERY_COOLDOWN_SECONDS = 1.0
|
|
62
64
|
|
|
63
65
|
|
|
64
66
|
class ASTService:
|
|
@@ -99,6 +101,7 @@ class ASTService:
|
|
|
99
101
|
self._last_snapshot_repair = None
|
|
100
102
|
self._parse_lock = threading.RLock()
|
|
101
103
|
self._parse_recovery_attempts = {}
|
|
104
|
+
self._parse_recovery_retry_after = {}
|
|
102
105
|
|
|
103
106
|
@classmethod
|
|
104
107
|
def get_instance(cls, root_dir: str) -> ASTService:
|
|
@@ -468,6 +471,9 @@ class ASTService:
|
|
|
468
471
|
for target in targets:
|
|
469
472
|
self._index.add_file_dependency(src, target)
|
|
470
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"
|
|
471
477
|
self._initialized = True
|
|
472
478
|
return state
|
|
473
479
|
|
|
@@ -657,11 +663,13 @@ class ASTService:
|
|
|
657
663
|
return True
|
|
658
664
|
|
|
659
665
|
def recover_failed_file(self, rel_path: str) -> bool:
|
|
660
|
-
"""Retry
|
|
666
|
+
"""Retry a degraded selected file on a later explicit inspection.
|
|
661
667
|
|
|
662
668
|
Reuse the completed-index repair path so callers and persisted navigation
|
|
663
669
|
are reconciled before publishing the replacement AST. Partial hydration
|
|
664
670
|
keeps its normal path; a later request may recover after it completes.
|
|
671
|
+
Repeated requests share a cooldown for the same source/parser identity;
|
|
672
|
+
a transient second parse failure must not prevent recovery indefinitely.
|
|
665
673
|
"""
|
|
666
674
|
from .ast_snapshot import parser_identity
|
|
667
675
|
from .index_repair import repair_index
|
|
@@ -684,20 +692,25 @@ class ASTService:
|
|
|
684
692
|
if digest != previous.content_sha256:
|
|
685
693
|
return False
|
|
686
694
|
key = (digest, parser_identity(previous.language))
|
|
687
|
-
if self._parse_recovery_attempts.get(rel_path) == key
|
|
695
|
+
if (self._parse_recovery_attempts.get(rel_path) == key
|
|
696
|
+
and _parse_recovery_now() < self._parse_recovery_retry_after.get(rel_path, 0)):
|
|
688
697
|
return False
|
|
689
698
|
self._parse_recovery_attempts[rel_path] = key
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
699
|
+
try:
|
|
700
|
+
parsed = parse_file(str(path))
|
|
701
|
+
if parsed.parse_failures or parsed.parsing_tier == 'minimal':
|
|
702
|
+
return False
|
|
703
|
+
if hashlib.sha256(path.read_text(encoding='utf-8', errors='replace').encode()).hexdigest() != digest:
|
|
704
|
+
return False
|
|
705
|
+
if self._snapshot_identity() != identity:
|
|
706
|
+
return False
|
|
707
|
+
asts = dict(self._ast_cache)
|
|
708
|
+
asts[rel_path] = parsed
|
|
709
|
+
self._last_snapshot_repair = repair_index(self, asts, identity, {rel_path})
|
|
710
|
+
return True
|
|
711
|
+
finally:
|
|
712
|
+
self._parse_recovery_retry_after[rel_path] = (
|
|
713
|
+
_parse_recovery_now() + _PARSE_RECOVERY_COOLDOWN_SECONDS)
|
|
701
714
|
except (OSError, ValueError, sqlite3.Error):
|
|
702
715
|
logger.debug('Cannot recover selected parse for %s', rel_path, exc_info=True)
|
|
703
716
|
return False
|
|
@@ -911,6 +924,7 @@ class ASTService:
|
|
|
911
924
|
# Handle deletion
|
|
912
925
|
if not Path(abs_path).exists():
|
|
913
926
|
self._parse_recovery_attempts.pop(rel, None)
|
|
927
|
+
self._parse_recovery_retry_after.pop(rel, None)
|
|
914
928
|
self._index.remove_file(rel)
|
|
915
929
|
old_ast = self._ast_cache.pop(rel, None)
|
|
916
930
|
if old_ast is None:
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"""Full navigation readiness is independent of body-index readiness."""
|
|
2
|
+
import asyncio
|
|
3
|
+
import json
|
|
4
|
+
import threading
|
|
5
|
+
from types import SimpleNamespace
|
|
6
|
+
|
|
7
|
+
import pytest
|
|
8
|
+
|
|
9
|
+
from eval.quality.experiment_evidence import Journal
|
|
10
|
+
from eval.quality.readiness import coverage_ready, wait_ready
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@pytest.mark.parametrize(
|
|
14
|
+
"change", ["phase", "parsed", "references", "truncated", "rounded", "bool", "zero"]
|
|
15
|
+
)
|
|
16
|
+
def test_readiness_requires_exact_completed_counts(change):
|
|
17
|
+
c = {
|
|
18
|
+
"phase": "ready",
|
|
19
|
+
"total_files": 1001,
|
|
20
|
+
"parsed_files": 1001,
|
|
21
|
+
"reference_indexed_files": 1001,
|
|
22
|
+
"discovery_truncated": False,
|
|
23
|
+
}
|
|
24
|
+
assert coverage_ready(c)
|
|
25
|
+
if change == "phase":
|
|
26
|
+
c["phase"] = "hydrating"
|
|
27
|
+
if change == "parsed":
|
|
28
|
+
c["parsed_files"] = 1000
|
|
29
|
+
if change == "references":
|
|
30
|
+
c["reference_indexed_files"] = 1000
|
|
31
|
+
if change == "truncated":
|
|
32
|
+
c["discovery_truncated"] = True
|
|
33
|
+
if change == "rounded":
|
|
34
|
+
c.update(parsed_files=1000, parse_coverage=1.0)
|
|
35
|
+
if change == "bool":
|
|
36
|
+
c["reference_indexed_files"] = True
|
|
37
|
+
if change == "zero":
|
|
38
|
+
c["total_files"] = 0
|
|
39
|
+
assert not coverage_ready(c)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@pytest.mark.asyncio
|
|
43
|
+
async def test_initialization_and_every_readiness_response_are_retained_before_inspection(tmp_path):
|
|
44
|
+
journal = Journal(tmp_path / "journal", 8192)
|
|
45
|
+
calls = []
|
|
46
|
+
|
|
47
|
+
class Gateway:
|
|
48
|
+
async def execute(self, name, args):
|
|
49
|
+
calls.append(name)
|
|
50
|
+
data = {
|
|
51
|
+
"capabilities": {
|
|
52
|
+
"coverage": {
|
|
53
|
+
"phase": "ready",
|
|
54
|
+
"total_files": 1,
|
|
55
|
+
"parsed_files": 1,
|
|
56
|
+
"reference_indexed_files": 1,
|
|
57
|
+
"discovery_truncated": False,
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return SimpleNamespace(
|
|
62
|
+
isError=False,
|
|
63
|
+
structuredContent=data,
|
|
64
|
+
model_dump=lambda **kw: {"content": [], "structuredContent": data},
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
result = await wait_ready(Gateway(), journal)
|
|
68
|
+
assert calls == ["search_symbols", "capabilities"] and result["polls"] == 1
|
|
69
|
+
events = [json.loads(line) for line in (journal.root / "events.jsonl").read_text().splitlines()]
|
|
70
|
+
assert [e["request"]["event"] for e in events] == ["readiness_initialize", "readiness_poll"]
|
|
71
|
+
assert all((journal.root / e["response"]["path"]).is_file() for e in events)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
@pytest.mark.asyncio
|
|
75
|
+
async def test_navigation_barrier_waits_for_delayed_real_reference_hydration(tmp_path, monkeypatch):
|
|
76
|
+
from attocode_intel._internal.integrations.context import ast_service as module
|
|
77
|
+
from attocode_intel.gateway import OperationGateway
|
|
78
|
+
|
|
79
|
+
workspace = tmp_path / 'source'
|
|
80
|
+
workspace.mkdir()
|
|
81
|
+
for n in range(4):
|
|
82
|
+
(workspace / f'unit{n}.py').write_text(f'def unit{n}():\n return {n}\n')
|
|
83
|
+
release = threading.Event()
|
|
84
|
+
entered = threading.Event()
|
|
85
|
+
original = module.ASTService._run_hydration
|
|
86
|
+
|
|
87
|
+
def delayed(service):
|
|
88
|
+
entered.set()
|
|
89
|
+
if not release.wait(timeout=5):
|
|
90
|
+
raise AssertionError('controlled hydration was never released')
|
|
91
|
+
return original(service)
|
|
92
|
+
|
|
93
|
+
monkeypatch.setattr(module, 'skeleton_budget', lambda tier, count: 1)
|
|
94
|
+
monkeypatch.setattr(module.ASTService, '_run_hydration', delayed)
|
|
95
|
+
gateway = OperationGateway(str(workspace), 'daily', watch=False)
|
|
96
|
+
try:
|
|
97
|
+
journal = Journal(tmp_path / 'capture', 1024 * 1024)
|
|
98
|
+
initialize = await gateway.execute('search_symbols', {'name': '__delayed_fixture_initialize__'})
|
|
99
|
+
journal.response({'event': 'control_initialize'}, initialize.model_dump(mode='json'))
|
|
100
|
+
assert not initialize.isError and entered.wait(timeout=1)
|
|
101
|
+
before = await gateway.execute('capabilities', {})
|
|
102
|
+
journal.response({'event': 'control_before'}, before.model_dump(mode='json'))
|
|
103
|
+
partial = before.structuredContent['capabilities']['coverage']
|
|
104
|
+
assert partial['phase'] == 'hydrating' and partial['total_files'] == 4
|
|
105
|
+
assert partial['reference_indexed_files'] < partial['total_files']
|
|
106
|
+
assert not coverage_ready(partial)
|
|
107
|
+
raw_response = journal.response
|
|
108
|
+
observed = []
|
|
109
|
+
|
|
110
|
+
def retain_then_release(request, value):
|
|
111
|
+
ref = raw_response(request, value)
|
|
112
|
+
if request['event'] == 'readiness_poll':
|
|
113
|
+
c = value['structuredContent']['capabilities']['coverage']
|
|
114
|
+
observed.append(c)
|
|
115
|
+
if len(observed) == 1:
|
|
116
|
+
assert not coverage_ready(c)
|
|
117
|
+
release.set()
|
|
118
|
+
return ref
|
|
119
|
+
|
|
120
|
+
monkeypatch.setattr(journal, 'response', retain_then_release)
|
|
121
|
+
admitted = await asyncio.wait_for(wait_ready(gateway, journal), timeout=5)
|
|
122
|
+
assert len(observed) >= 2 and admitted['polls'] == len(observed)
|
|
123
|
+
assert coverage_ready(observed[-1]) and observed[-1]['reference_indexed_files'] == 4
|
|
124
|
+
events = [json.loads(line) for line in (journal.root / 'events.jsonl').read_text().splitlines()]
|
|
125
|
+
assert all((journal.root / event['response']['path']).is_file() for event in events)
|
|
126
|
+
finally:
|
|
127
|
+
release.set()
|
|
128
|
+
await gateway.close()
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""Captured aliases must resolve to pinned content without touching the host."""
|
|
2
|
+
import pytest
|
|
3
|
+
|
|
4
|
+
from eval.quality.fixture_identity import source_entry
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def test_alias_and_nested_alias_resolve_to_the_original_content_entry():
|
|
8
|
+
body = {'kind': 'file', 'bytes': 5, 'sha256': 'a' * 64}
|
|
9
|
+
inventory = {'AGENTS.md': body, 'CLAUDE.md': {'kind': 'symlink', 'target': 'AGENTS.md'},
|
|
10
|
+
'docs/link': {'kind': 'symlink', 'target': '../CLAUDE.md'},
|
|
11
|
+
'source': {'kind': 'symlink', 'target': 'real'}, 'real/main.py': body}
|
|
12
|
+
assert source_entry(inventory, 'CLAUDE.md') is body
|
|
13
|
+
assert source_entry(inventory, 'docs/link') is body
|
|
14
|
+
assert source_entry(inventory, 'source/main.py') is body
|
|
15
|
+
assert source_entry(inventory, 'AGENTS.md') is body
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@pytest.mark.parametrize('target', ['/etc/passwd', '../../outside', 'missing', 'link'])
|
|
19
|
+
def test_external_missing_and_cyclic_source_aliases_are_rejected(target):
|
|
20
|
+
with pytest.raises(ValueError):
|
|
21
|
+
source_entry({'link': {'kind': 'symlink', 'target': target}}, 'link')
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def test_alias_chain_and_path_growth_are_bounded():
|
|
25
|
+
inventory = {f'link{n}': {'kind': 'symlink', 'target': f'link{n + 1}'} for n in range(42)}
|
|
26
|
+
inventory['link42'] = {'kind': 'file', 'bytes': 0, 'sha256': 'a' * 64}
|
|
27
|
+
with pytest.raises(ValueError, match='forty'):
|
|
28
|
+
source_entry(inventory, 'link0')
|
|
29
|
+
with pytest.raises(ValueError, match='invalid|oversized'):
|
|
30
|
+
source_entry({'link': {'kind': 'symlink', 'target': 'long/' * 1000}}, 'link')
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def test_parent_components_are_interpreted_after_directory_alias_expansion():
|
|
34
|
+
wanted = {'kind': 'file', 'bytes': 1, 'sha256': 'a' * 64}
|
|
35
|
+
unrelated = {'kind': 'file', 'bytes': 1, 'sha256': 'b' * 64}
|
|
36
|
+
inventory = {'dir': {'kind': 'symlink', 'target': 'real/nested'},
|
|
37
|
+
'link': {'kind': 'symlink', 'target': 'dir/../module.py'},
|
|
38
|
+
'real/nested/marker': wanted, 'real/module.py': wanted, 'module.py': unrelated}
|
|
39
|
+
assert source_entry(inventory, 'link') is wanted
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@pytest.mark.parametrize('target', ['missing/../file', 'file/../file', 'file/.'])
|
|
43
|
+
def test_alias_cannot_skip_missing_directories_or_walk_through_files(target):
|
|
44
|
+
with pytest.raises(ValueError):
|
|
45
|
+
source_entry({'link': {'kind': 'symlink', 'target': target},
|
|
46
|
+
'file': {'kind': 'file', 'bytes': 1, 'sha256': 'a' * 64}}, 'link')
|
|
@@ -89,6 +89,70 @@ def test_failed_selected_recovery_is_not_repeated_for_same_source(tmp_path):
|
|
|
89
89
|
service._get_ast_service()._store.close()
|
|
90
90
|
|
|
91
91
|
|
|
92
|
+
def test_failed_selected_recovery_retries_after_cooldown_without_edit(tmp_path, monkeypatch):
|
|
93
|
+
service, ast = degraded_service(tmp_path)
|
|
94
|
+
clock = [100.0]
|
|
95
|
+
monkeypatch.setattr(ast_service, '_parse_recovery_now', lambda: clock[0], raising=False)
|
|
96
|
+
original = ast_service.parse_file
|
|
97
|
+
try:
|
|
98
|
+
with patch.object(ast_service, 'parse_file', wraps=original) as parse:
|
|
99
|
+
with patch.object(ts_parser, 'PARSE_TIMEOUT_MICROS', 1):
|
|
100
|
+
assert inspect_symbol_data(service, 'target', 'sample.lua')['status'] == 'not_found'
|
|
101
|
+
assert inspect_symbol_data(service, 'target', 'sample.lua')['status'] == 'not_found'
|
|
102
|
+
clock[0] = 100.999
|
|
103
|
+
assert inspect_symbol_data(service, 'target', 'sample.lua')['status'] == 'not_found'
|
|
104
|
+
assert parse.call_count == 1
|
|
105
|
+
clock[0] = 101.0
|
|
106
|
+
recovered = inspect_symbol_data(service, 'target', 'sample.lua')
|
|
107
|
+
assert recovered['status'] == 'found'
|
|
108
|
+
assert any(row['line'] == 10002 for row in recovered['references'])
|
|
109
|
+
assert parse.call_count == 2
|
|
110
|
+
assert inspect_symbol_data(service, 'target', 'sample.lua')['status'] == 'found'
|
|
111
|
+
assert parse.call_count == 2
|
|
112
|
+
finally:
|
|
113
|
+
ast.stop_hydration()
|
|
114
|
+
ast._store.close()
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def test_persistent_selected_parse_failure_is_limited_to_one_attempt_per_cooldown(tmp_path, monkeypatch):
|
|
118
|
+
service, ast = degraded_service(tmp_path)
|
|
119
|
+
clock = [100.0]
|
|
120
|
+
monkeypatch.setattr(ast_service, '_parse_recovery_now', lambda: clock[0], raising=False)
|
|
121
|
+
try:
|
|
122
|
+
with patch.object(ast_service, 'parse_file', return_value=ast._ast_cache['sample.lua']) as parse:
|
|
123
|
+
for _ in range(3):
|
|
124
|
+
assert inspect_symbol_data(service, 'target', 'sample.lua')['status'] == 'not_found'
|
|
125
|
+
assert parse.call_count == 1
|
|
126
|
+
clock[0] = 101.0
|
|
127
|
+
assert inspect_symbol_data(service, 'target', 'sample.lua')['status'] == 'not_found'
|
|
128
|
+
assert parse.call_count == 2
|
|
129
|
+
for _ in range(3):
|
|
130
|
+
assert inspect_symbol_data(service, 'target', 'sample.lua')['status'] == 'not_found'
|
|
131
|
+
assert parse.call_count == 2
|
|
132
|
+
finally:
|
|
133
|
+
ast.stop_hydration()
|
|
134
|
+
ast._store.close()
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def test_expired_parse_recovery_cooldown_cannot_bless_an_unrelated_edit(tmp_path, monkeypatch):
|
|
138
|
+
other = tmp_path / 'other.py'
|
|
139
|
+
other.write_text('def before(): return 1\n')
|
|
140
|
+
service, ast = degraded_service(tmp_path)
|
|
141
|
+
clock = [100.0]
|
|
142
|
+
monkeypatch.setattr(ast_service, '_parse_recovery_now', lambda: clock[0], raising=False)
|
|
143
|
+
try:
|
|
144
|
+
with patch.object(ast_service, 'parse_file', return_value=ast._ast_cache['sample.lua']) as parse:
|
|
145
|
+
assert inspect_symbol_data(service, 'target', 'sample.lua')['status'] == 'not_found'
|
|
146
|
+
assert parse.call_count == 1
|
|
147
|
+
other.write_text('def after(): return 2\n')
|
|
148
|
+
clock[0] = 101.0
|
|
149
|
+
assert inspect_symbol_data(service, 'target', 'sample.lua')['status'] == 'not_found'
|
|
150
|
+
assert parse.call_count == 1
|
|
151
|
+
finally:
|
|
152
|
+
ast.stop_hydration()
|
|
153
|
+
ast._store.close()
|
|
154
|
+
|
|
155
|
+
|
|
92
156
|
def test_new_parser_generation_permits_a_new_bounded_attempt(tmp_path):
|
|
93
157
|
from attocode_intel._internal.integrations.context import ast_snapshot
|
|
94
158
|
|
|
@@ -52,12 +52,15 @@ def test_actual_inventory_matches_committed_blobs_and_link_targets(tmp_path):
|
|
|
52
52
|
assert source_manifest(root) == pinned_manifest(cache, {'entries': entries})
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
def capture(tmp_path):
|
|
55
|
+
def capture(tmp_path, *, alias=False):
|
|
56
56
|
root, evidence = tmp_path / 'work', tmp_path / 'evidence'
|
|
57
57
|
root.mkdir()
|
|
58
58
|
(root / 'test.py').write_bytes(b'alpha\n')
|
|
59
|
+
selected = 'alias.py' if alias else 'test.py'
|
|
60
|
+
if alias:
|
|
61
|
+
(root / 'alias.py').symlink_to('test.py')
|
|
59
62
|
spec = {'id': 'toy', 'questions': [{'id': 'q', 'query': 'alpha', 'kind': 'behavior',
|
|
60
|
-
'split': 'development', 'file':
|
|
63
|
+
'split': 'development', 'file': selected, 'anchors': [{'line': 1, 'quote': 'alpha'}]}]}
|
|
61
64
|
design = {'rounds': [['baseline', 'candidate']], 'requests': {'depths': [5], 'budgets': [2000],
|
|
62
65
|
'scoped_depth': 5, 'scoped_budget': 2000}}
|
|
63
66
|
journal = Journal(evidence / 'journal', 128 * 1024)
|
|
@@ -66,10 +69,10 @@ def capture(tmp_path):
|
|
|
66
69
|
from eval.quality.preview_experiment import page_identity
|
|
67
70
|
pages = []
|
|
68
71
|
for arm in design['rounds'][0]:
|
|
69
|
-
for scope in ('',
|
|
70
|
-
hit = {'file_path':
|
|
72
|
+
for scope in ('', selected):
|
|
73
|
+
hit = {'file_path': selected, 'name': 'alpha', 'chunk_type': 'function', 'score': 1,
|
|
71
74
|
'line': 1, 'end_line': 1, 'snippet_start_line': 1, 'snippet_end_line': 1, 'snippet': 'alpha'}
|
|
72
|
-
identity = [
|
|
75
|
+
identity = [selected, 'alpha', 'function', 1, 1]
|
|
73
76
|
policy = {'producer': 'body_index', 'errors': 'replace', 'newlines': 'universal',
|
|
74
77
|
'source_sha256': hashlib.sha256(b'alpha\n').hexdigest()}
|
|
75
78
|
journal.response({'event': 'source_lineage', 'identity': identity}, policy)
|
|
@@ -115,3 +118,8 @@ def test_raw_capture_damage_is_incomplete_before_next_worker(tmp_path, damage):
|
|
|
115
118
|
row['arguments']['query'] = 'beta'
|
|
116
119
|
with pytest.raises((ValueError, FileNotFoundError)):
|
|
117
120
|
admit_worker(evidence, root, spec, design, observation)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def test_source_alias_hash_is_checked_against_its_pinned_target(tmp_path):
|
|
124
|
+
root, evidence, spec, design, observation = capture(tmp_path, alias=True)
|
|
125
|
+
assert admit_worker(evidence, root, spec, design, observation) == observation
|
|
@@ -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)
|