Changelog
note
This page summarises recent releases. Every release — including every bug-fix and
dependency change — is catalogued in
CHANGELOG.md
at the repo root. The file follows
Keep a Changelog format and Shaktiman
adheres to Semantic Versioning.
Recent releases
0.9.4 — 2026-04-13
reindexCLI command — purge every indexed artifact and rebuild from scratch. Supports--embed,--vector,--db, and--force(skip confirmation on non-TTYs). See Re-indexing for the two-phase purge flow.- Task-prefix support for embedding models — new
[embedding].query_prefixand[embedding].document_prefixTOML keys allow configuring the prefixes required by models likenomic-embed-text("search_query: "/"search_document: "). Prefixed text is used as the cache key to prevent stale vectors after a model switch. See Embeddings. - Qdrant payload-based project isolation —
project_idis stored as a payload field on each Qdrant point and used to filter search, count, and purge operations, matching the pgvector isolation model. - Split-chunk siblings merged at retrieval time — when large methods exceed 1024 tokens the chunker splits them for embedding quality; sibling fragments are now reconstituted into complete methods before ranking so consumers never see partial methods.
- Shared
internal/backendspackage — store opening, closing, and purge logic extracted out of daemon into a package used by both the daemon and CLI.
0.9.3 — 2026-04-09
- Multi-instance concurrency via single-daemon + socket proxy
(ADR-002 Amendment 4). The first
shaktimandfor a project acquires aflockon.shaktiman/daemon.pidand owns the DB / vectors / watcher; subsequent invocations become stateless proxies bridging their Claude Code client's stdio to the leader via/tmp/shaktiman-<hash>.sock. Zero stale reads, zero double-enrichment, zero races. Proxies detect leader exit and promote automatically. See Multi-instance concurrency. - New packages:
internal/lockfile/(flock + socket-path derivation) andinternal/proxy/(stdio → HTTP bridge). - CLI
shaktiman indexchecks the lock — refuses to run if a daemon owns the project, since both writers touching SQLite would race. - ADR-003 A12 constraint enforced —
ValidateBackendConfignow rejectspostgres + brute_forceandpostgres + hnsw. File-backed vector stores race onembeddings.binwhen multiple daemons share a Postgres database; usepgvectororqdrantinstead. See ADR-003.
0.9.2 — 2026-04-08
- Recursive AST-driven chunking (ADR-004)
replaces the whitelist-driven two-level chunker (file → class → method) with a
recursive, size-gated AST traversal guided by
ChunkableTypes. Fixes silent drops of nested modules, decorated methods, inner classes, trait methods, and namespaces. Comments are excluded from chunking entirely. - 11 new
ChunkableTypesacross 5 languages — Rubysingleton_class; Pythontype_alias_statement; Rustfunction_signature_item,foreign_mod_item,union_item; Javacompact_constructor_declaration,static_initializer; TypeScriptinternal_module,ambient_declaration,function_signature,generator_function_declaration. - Chunk-algorithm version tracking —
parser.ChunkAlgorithmVersion+MetadataStore.GetConfig/SetConfig. On version mismatch, the daemon purges every file so a cold re-index uses the new algorithm. - Multi-project isolation for PostgreSQL backend — when multiple projects
share one Postgres database, each project's data is now scoped by
project_id(files, embeddings, and ~26 query sites acrossmetadata.go,graph.go,diff.go,pgvector/store.go). Migration006_add_project_id.sqlhandles backward compatibility for existing single-project databases. - 13 documented parser-bug fixes —
extractNamepriority on Java fields, multi-declarator symbol emission,walkForSymbolskind switch,findDeclarationChildhard-coding, multi-line signature truncation, depth- guard observability, receiver loss on member calls, self-recursive edges, generic-type-argument descent, eager small-container decomposition, depth-guard off-by-one, and thenamespaceCHECK-constraint drop. See the repo CHANGELOG for each one's root cause.
Older releases
For 0.9.1, 0.9.0, and every release back to 0.1.0 — including performance
passes, language additions (TypeScript, Python, Go, Rust, Java, Ruby, ERB,
Bash, JavaScript), and the shift to the official tree-sitter Go bindings — see
the canonical
CHANGELOG.md
on GitHub. It's the single source of truth; this page is a snapshot of the
recent surface worth calling out.