fix(code-intel): remote→local reliability + pack activation (release 0.2.24)#91
Merged
Conversation
…ion + status/config fixes The MCP was ~90% dark: a stale [remote] config (expired JWT, dead local server) routed every service tool there with no fallback, and opening the existing v2 symbols.db crashed under v3 code, so local mode was broken too. - configure_remote_service: gate on JWT-expiry + /health reachability, degrade to local (get_remote_degraded_reason), close prior client (leak) - IndexStore: drop stale data tables before recreate on schema mismatch so v2→v3 rebuilds instead of crashing on CREATE INDEX ix_refs_caller - pin_store _STORE_DEFS: kw_index documents→kw_docs (correct BM25 status reporting) - config.save_remote_config: escape quotes/backslashes in the TOML writer - tests: +remote-reliability, +kw-index-status, +index-store-migration; fix stale _make_service_with_mocks helper and a pin-footer assertion (1469 passed, 5 skipped) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ks / +91 rules) The rule registry shipped with only 109 builtin regex rules — the 10 example language packs (incl. 36 ast-grep structural rules) under rules/packs/examples were never loaded, so 'list_rules' reported Packs: 0 and no structural matching ran. load_all_packs now also loads the shipped example packs by default (user-installed packs of the same name still shadow them). discover_packs keeps its project-local-only contract intact. Opt out via ATTOCODE_NO_SHIPPED_PACKS=1. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… under [Unreleased] Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…tivation Bumps 0.2.23 -> 0.2.24 across pyproject.toml (project + bumpversion), src/attocode/__init__.py, src/attoswarm/__init__.py, uv.lock. Stamps CHANGELOG [0.2.24] - 2026-05-29 from the [Unreleased] notes. Phase-0 reliability/activation release (NOT roadmap Phase 2): graceful remote->local fallback, IndexStore v2->v3 migration, BM25 status fix, TOML escaping, and shipped language packs auto-loading (Packs:0 -> 10 packs / ~200 rules / 30 structural). Roadmap Phase 2 (inter-procedural dataflow) shifts to a later slot. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The code-intel MCP was effectively ~90% dark: a stale
[remote]config (expired JWT, dead local server) routed every service-backed tool there with no fallback, and the rule engine shipped without its language packs (list_rules→Packs: 0, zero structural rules). This restores a working, useful local-mode baseline.What changed
Reliability (
4ea4dc7)configure_remote_service()now gates on JWT expiry (token_is_expired) + a/healthreachability probe (RemoteTextService.ping), degrades to local with a readable reason (get_remote_degraded_reason), and closes the prior client (socket-leak fix).symbols.dbcrashed (no such column: caller_qualified_name), which also blocked local mode; stale tables are now dropped before recreation on a version mismatch.cache_status_all/verify_all_cachesqueried a non-existentdocumentstable → corrected tokw_docs.save_remote_configescapes quotes/backslashes in its TOML writer.Activation (
7375f5b)load_all_packs()now loads the 10 shipped example packs by default (≈200 rules total, 30 ast-grep structural). User packs still shadow shipped ones;discover_packs()keeps its project-local contract; opt-out viaATTOCODE_NO_SHIPPED_PACKS=1.Release (
2aacf1a,51df4fd) — CHANGELOG[0.2.24]+ version bump (0.2.23→0.2.24) across pyproject/both__init__/uv.lock. Framed as a Phase-0 reliability/activation release; roadmap Phase 2 (inter-procedural dataflow) shifts to a later slot.Verification
test_remote_reliability,test_kw_index_status,test_index_store_migration,test_pack_autoload(+ stale-helper fix).scripts/validate_release_version.py --expected-tag v0.2.24passes.Connection refused.Note
Tag
v0.2.24intentionally not created yet — recommend tagging the merge commit onmainafter this lands.🤖 Generated with Claude Code