-
code-index v0.41.53
StableAll checks were successfulCI / cargo doc (intra-doc links) (push) Has been skippedCI / Grammar rebuild from source (nightly) (push) Has been skippedCI / OSS corpus tier-3 scale (nightly) (push) Has been skippedCI / cargo test (push) Has been skippedPackage CI / package-corpus (svelte) (push) Successful in 2sCI / cargo test (daemon transport) (push) Has been skippedCI / Plugin path cost + pool throughput (nightly) (push) Has been skippedPackage CI / package-corpus (ruby) (push) Successful in 2sCI / Report scheduled failures (push) Has been skippedPackage CI / package-corpus (python) (push) Successful in 3sPackage CI / package-corpus (rust) (push) Successful in 3sPackage CI / package-corpus (xaml) (push) Successful in 1sPackage CI / package-corpus (vue) (push) Successful in 3sPackage CI / package overhead budgets (nightly, one package at a time) (push) Has been skippedPackage CI / package-corpus (typescript) (push) Successful in 3sPackage CI / package-corpus (timeline) (push) Successful in 3sPackage CI / Report scheduled failures (push) Has been skippedPilot plugin compatibility / Fetch the pinned runtime once (push) Successful in 17sPilot plugin compatibility / Pilot compatibility (csharp) (push) Successful in 9sPilot plugin compatibility / Pilot compatibility (timeline) (push) Successful in 11sPilot plugin compatibility / Pilot compatibility result (push) Successful in 1sRelease Build / Generate Version (push) Successful in 7sRelease Build / Required CI green (push) Successful in 29sRelease Build / Build linux-aarch64 (push) Successful in 11m42sRelease Build / Build windows-x86_64 (push) Successful in 26m33sRelease Build / Build linux-x86_64-musl (push) Successful in 16m36sRelease Build / Build linux-x86_64 (push) Successful in 17m39sRelease Build / Assemble the release archives (push) Successful in 41sRelease Build / Windows archive smoke (msvc) (push) Successful in 54sRelease Build / Seed the package channel (push) Successful in 12sRelease Build / Create Forgejo Release (push) Successful in 26sPilot plugin compatibility / Pilot scope (push) Successful in 12sCI (Windows) / changes (what this run must test) (push) Successful in 17sCI (Windows) / fmt + clippy + build + test (windows) (push) Has been skippedCI / changes (what this run must test) (push) Successful in 18sPackage CI / package suites (clippy) (push) Has been skippedPackage CI / changes (which packages this run must test) (push) Successful in 18sPackage CI / package (csharp) (push) Successful in 1sPackage CI / package (php) (push) Successful in 2sPackage CI / package (svelte) (push) Successful in 1sPackage CI / package (rust) (push) Successful in 1sPackage CI / package (javascript) (push) Successful in 3sPackage CI / package (ruby) (push) Successful in 4sPackage CI / package (python) (push) Successful in 3sPackage CI / package (timeline) (push) Successful in 2sPackage CI / package (vue) (push) Successful in 2sPackage CI / package (typescript) (push) Successful in 2sPackage CI / package (xaml) (push) Successful in 3sCI / cargo fmt (push) Successful in 26sCI / cargo clippy (push) Has been skippedPackage CI / package-corpus (php) (push) Successful in 2sCI / cargo check (MSRV 1.99.1) (push) Has been skippedCI / cargo check (windows-gnu) (push) Has been skippedCI / cargo test (abi, 32-bit + wasm32) (push) Has been skippedCI / cargo deny (push) Has been skippedCI / OSS corpus (tier 1) (push) Has been skippedPackage CI / package-corpus (javascript) (push) Successful in 3sPackage CI / package-corpus (csharp) (push) Successful in 4sCI / CI lane wall-clock headroom (push) Has been skippedCI / guest crates (fmt, clippy, doc) (push) Has been skippedreleased this
2026-11-14 11:56:23 +01:00 | 0 commits to master since this releasecode-index v0.41.53
Build: v0.41.53+2639
Installer: install.sh and checksum. Both come from this release commit. To pin the installed binaries too, run it with
--tag v0.41.53.Windows installer: install.ps1 and checksum, from the same release commit. It installs AND updates — the same code does both — verifies the archive against its published
.sha256before unpacking, refuses hostile archive members (absolute paths,..escapes, symlinks and reparse points, whichExpand-Archivedoes not protect you from), and grants nothing when it installs a package: the bytes go into the machine's store and the approving line is PRINTED for you to run from inside a project.-Helplists the flags;-Tag v0.41.53pins the binaries.Four-binary release:
code-index-mcp(MCP stdio bridge — the usual entry),code-index-daemon(long-lived watcher + RPC server, auto-spawned),code-index-plugin-host(bounded worker for plugin packages, spawned by the daemon), andcode-index(CLI: init, index, watch, doctor, link, plugin).Compared with v0.41.52:
Removed
code-index skillis removed (operator decision, #571). The agent skill is served over MCP asskill://code-index/SKILL.md, withskills/listandskills/get; a client that does not read MCP resources can save that resource's text itself.code-index doctorno longer compares an installed copy. Running the old command gives the ordinary "unrecognized subcommand" error.
Announced for the next release
- Six configuration keys have no effect:
watcher.mode,watcher.poll_interval_ms,logging.level,logging.format,workspace.name,plugins[].file. This release still accepts them; the warning now says they will be refused from the next release on (#570). Remove them from.code-index.toml.
Daemon restarts and filters (#584, a customer report)
- A filter was refused as "the running daemon predates the … filter" for the rest of a session after one call had met a daemon that was just starting. The client remembered a failed capability request as "this daemon has no filters". It now remembers only a real answer, for one daemon identity, and asks again after a reconnect to another daemon. A request that fails for a transient reason returns that reason.
- Every "the daemon is older than this client" verdict now needs the daemon's own "unknown method" answer; an unrelated error whose text contained those words could produce it before.
- A call from an existing session that arrives while another client's replacement daemon is starting was refused at once. It now waits for that daemon, at most 10 s and never longer than the call's own budget, and answers. The same wait covers a daemon that was killed and has not released its lock yet: when it does, the call starts the replacement itself. A call that still gives up is a retryable
daemon_restartingrefusal in every case; it was aninternal_errorwhen the previous daemon had been killed. - Every
daemon_restartingrefusal carriesretryable: true,waited_msandstartup_phase. - While an index starts,
state_detailnames the startup phase and the time spent in it (language_enablement,parity_enablement,bundled_adoption,package_discovery,indexing,census; listed indocs/operations.md).
Background update (#586, #520)
- With nothing to update, the background update that runs after a daemon start installed and conformance-checked every catalog package again, twice, and read every installed archive many times: 43 s on a machine with 45 installed packages, at every daemon start, since v0.41.24. A package that is already in the store with a valid verdict for this engine is no longer installed or checked again, each package is handled once per run, and a run reads an archive at most once. Measured on the same store: 43 s before, 1.4 s after; 584 complete archive reads before, 7 after. The run prints what it did (
update_work 7 compared, 7 already verified, 0 installed, 0 conformance-checked). - The background update held the project's plugin lock for its whole run, so
approveandlink addwere refused withplugin_mutation_busyfor minutes. It now prepares without the lock and takes it only to publish, after checking that approvals, links, enablement and the automatic policy did not change meanwhile. - A plugin writer that finds the lock held waits for it (up to 120 s) instead of failing at once; a refusal names the holder, its operation and how long it has held the lock.
plugin statusandplugin doctorread each installed archive once (doctor: 164 reads before, 45 after, on that store).
Configuration file and links (#585)
code-index link addon a project without.code-index.tomlcreated the file from a template that containedenabled = [], which is an explicit decision: every language of the project stopped being indexed. The template no longer carries a language decision; a file without the key means the same as no file. A test drives every code path that writes the file.link addrecordsrelationship = "worktree"when the target is another checkout of the same Git repository and no relationship was given.link removeprints the entry it removed.
Answers while the index is not settled
search_text,search_symbols,file_outline,read_codeand the other tools that do not depend on resolved references are no longer refused withindex_incompletewhile references are still being resolved. Tools that do depend on them keep the refusal or the floor qualification. Each tool declares which kind it is, and a test covers the whole list.
Resolution (#531, step 1)
- A declaration inside a function body (Rust, C#, JavaScript, TypeScript) is no longer a resolved target for a reference outside that body. On the nine pinned corpus repositories this removes eight wrong binds in Rust; eight further wrong binds there are method calls on function-local types and remain. Package profiles gain the field
body_local_names. On the larger repositoryrust-analyzerthe rule removes one wrong bind as well: a call of a closure parameterfhad been bound to a functionfnested in another method of the same file.
CI and measurement (#582)
- A red scheduled run of
ci.ymlorpackage-ci.ymlcomments on the tracker with the failed jobs and their logs; a repeat of the same failures is folded into the existing comment. - The quiet-runner check before a measurement read a file that exists only inside a container, so on a plain Linux host no overhead measurement could start. It now reads the CPU limits of the process's own cgroup and its ancestors.
- A package overhead measurement that ends on a saturated runner (more runnable work than processors) is repeated once and otherwise reported as
NOT MEASURED (contended), red, instead of as a budget failure. cargo testno longer waits forcargo deny; download steps retry; a measurement that was refused admission is red and saysNOT MEASURED.- A test that waits for an index to settle prints the state history, the progress fields and the end of the child's stderr when it gives up.
Qualification
- One full local gate run on the integrated tree (67 steps: every PR job and every nightly-only job of the four workflows except the i686 qemu ABI test). Its findings were fixed and the affected steps run again.
- Four CI rounds on the pull request. Two found a defect of this release each, both fixed: a new test read a log line that CI's environment filters out, and
cargo install cargo-denyhad been put behind a 600 s download timeout. Two failures were time limits on a slow runner that are older than this release (#589 and a test's settle deadline). The fourth round is green on all four workflows, 44 jobs, Linux and Windows. - Dispatched runs on the release head for the nightly-only jobs:
ci.ymlgreen in all 17 jobs;package-ci.ymlgreen in all 69 package and corpus jobs, with the overhead job red on the Ruby budget only (see Remaining scope) and the red-run report printed in dry-run mode. - No corpus baseline, cost record or budget was changed, except one tier-3 bind count recorded with its reason (a wrong bind the body-local rule removes).
Remaining scope
- #586:
languages enablefor several languages,plugin addandlanguages liststill read installed archives more often than needed (77, 29 and 7 complete reads on a store with 45 archives). Not a regression of this release. - #570: six test timing hooks are still read by release binaries; making them debug-only is prepared and follows in the next release.
- #584: a newly started MCP server, the CLI
queryand the hook keep their own waiting rules while a daemon starts. - #531: method calls on function-local types, Python nested declarations and receiver identity.
- #582: the Ruby package's warm overhead budget fails in about half of all runs (1.100 against a limit of 1.10 in the dispatched run on this release, 1.161 the night before on the previous release, 1.115 / 1.041 / 1.116 / 1.063 in four quiet local runs). Nothing in this release touches Ruby's warm path; the measurement is to be made stable next. The overhead job has no job-wide time limit.
- #588: a worker deadline during a file's first extraction stores the file without symbols or calls, and it is not extracted again until it changes. Older than this release; fix prepared for the next one.
- #589: a precompile that takes more than 30 s of wall-clock time on a slow machine refuses a valid language package as
extractor.malformeduntil the next start. Older than this release; fix prepared for the next one.
Downloads
Four platforms are built for every release. The table below says which ones THIS release published.
Platform Archive Linux x86_64 (glibc) code-index-v0.41.53-linux-x86_64.tar.gz Linux x86_64 (static/musl) code-index-v0.41.53-linux-x86_64-musl.tar.gz Linux ARM64 code-index-v0.41.53-linux-aarch64.tar.gz Windows x64 code-index-v0.41.53-windows-x86_64.zip First-party language packages
Every archive carries
code-index-packages/: the first-party language packages at the versions the package channel had published when this release was cut — de.h-dv.csharp-0.1.11 de.h-dv.javascript-0.1.6 de.h-dv.php-0.1.6 de.h-dv.python-0.1.5 de.h-dv.ruby-0.10.2 de.h-dv.rust-0.1.8 de.h-dv.typescript-0.1.7 — each signed by the key below and verified at the install door.code-index languages enable <lang>adopts the bundled package offline. A package is released by its ownpkg/<id>/v<version>tag, whose release carries its.cip,.cipsand digest, andcode-index plugin update <id>reads the package channel, so a package fix reaches you without a new core release.These release binaries contain no native language parsers. Under
auto, enabled languages use their approved packages. First start adopts bundled packages verified against this build's own publisher keys; existing approvals and enablement remain authoritative. If your project explicitly pins a language tobuiltin, switch it withcode-index languages owner <lang> auto; an unavailable builtin is refused rather than silently ignored. To enable languages explicitly:code-index languages enable csharp code-index languages enable javascript code-index languages enable php code-index languages enable python code-index languages enable ruby code-index languages enable rust code-index languages enable typescriptAbout that key
sha256:1cb03259a8c870b6db02360abd9351e17e67724d1f8c3509d85c4bf6b06fa72cis a long-lived Ed25519 key held as a secret in this project's CI, used to sign released packages automatically, and it is compiled into the binaries in this release. It signs every first-party package. That trusts this project's release pipeline, not only its maintainers: anyone who can run a release workflow here can produce a package that verifies under it. It adds nothing you had not already granted — the bytes are inside the program you are running, so forging that anchor means forging the binary — but you are entitled to know it is there before a package installs rather than after.There is no expiry — deliberately, because offline installations must not break on a timer — and withdrawal is on your side and works:
code-index plugin trust remove sha256:1cb03259a8c870b6db02360abd9351e17e67724d1f8c3509d85c4bf6b06fa72c. A compiled-in key has no file to delete, so that writes one instead, carryingdenied = true; the key stops verifying at the next load,plugin trust listshows it marked[DENIED], and deleting that file (the command prints its path) is the only undo. If the key is ever rotated, the new fingerprint is published here and intests/packages/first-party.fingerprint, and a build that predates the rotation will not trust it.macOS is not currently built. No
x86_64-apple-darwinoraarch64-apple-darwinarchive is published — macOS users should build from source (cargo build --release). This is a deliberate deferral, tracked in #59; no date is promised.Wire into Claude Code
{ "mcpServers": { "code-index": { "command": "/usr/local/bin/code-index-mcp", "args": ["--root", "/path/to/your/project"] } } }SHA256 checksums (.sha256 files) available for every archive.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads