Releases: raultov/knot
Releases · raultov/knot
Release list
v1.5.6 — Groovy Property Accessors & Parser Hardening
Release Notes
- Fix(groovy): Javadoc block-comment continuation lines no longer produce phantom method entities or corrupt scope tracking. New
strip_comments_linehelper tracks multi-line/* */state across lines, and brace counting operates on the code-bearing remainder only. - Feat(groovy): Bare property declarations (
Path baseDir,boolean cacheable,private final Path ROOT) are now indexed asGroovyPropertyentities. Previously only initialized properties (String name = 'test') were detected. - Feat(groovy): Compiler-generated property accessors (
getX/setX/isX) are synthesised as first-classGroovyMethodentities, enablingOVERRIDESlinking between Groovy properties and interface getter declarations. Explicit getters/setters suppress synthetic ones, andfinalproperties emit getters only. - Fix(groovy-scm): Fixed
queries/groovy.scmto compile against tree-sitter-groovy v0.1.2 by replacingvariable_declarationwithlocal_variable_declaration. Addedfunction_definitioncapture patterns fordef-style methods. - Test(unit): 30+ new unit tests covering comment stripping, bare property detection, synthetic accessor generation, override linking for property accessors vs interface getters, and the tree-sitter query compilation assertion.
- Test(e2e): Added Group G in
tests/run_groovy_e2e.sh— validatesfind_callersOverridden-by/Overrides for properties,explore_filelists properties, Javadoc phantom regression guard, and Neo4j dedup/no-override invariants. - Docs: Updated README Groovy section with property accessor synthesis details.
- cargo fmt clean | cargo clippy --all-targets -- -D warnings clean | 969 unit tests passing
Install knot 1.5.6
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.5.6/knot-installer.sh | shDownload knot 1.5.6
| File | Platform | Checksum |
|---|---|---|
| knot-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| knot-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
v1.5.5 — JVM Method Override Relationships
Release Notes
- ✅ Feat(resolve): Implemented JVM method-level
OVERRIDESrelationships. The graph now links a method in a subtype directly to the method it overrides/implements in a supertype, enabling reverse-dependency queries to surface implementations and declarations bidirectionally. - ✅ Feat(query):
find_callersnow returns two new directed buckets for JVM entities: Overridden by (implementations/descendants of the queried method) and Overrides (declarations/ancestors the queried method overrides). - ✅ Refactor(query): Extracted duplicate Neo4j row parsing logic in
query.rsinto a sharedparse_reference_rowfunction. - ✅ Test(e2e): Added Group F in the Groovy E2E suite to verify method overrides bidirectionally. Added cleanup for autolink test artifacts.
- ✅ Docs: Marked the
method_override_relationships.mdspec as implemented and updated the README with the new override discovery use cases.
Install knot 1.5.5
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.5.5/knot-installer.sh | shDownload knot 1.5.5
| File | Platform | Checksum |
|---|---|---|
| knot-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| knot-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
v1.5.4 — Groovy Docstring Extraction
Release Notes
- ✅ Fix(groovy): The Groovy lexical parser now extracts GroovyDoc/comment blocks as entity
docstringfor classes, interfaces, enums, traits, methods (def, typed single-line and multi-line signatures) and properties. Previously all 5ParsedEntity::newcall sites passedNone, so semantic search could not match Groovy entities by the concepts described in their GroovyDoc (e.g. nextflow'sPluginExtensionPoint.initwas invisible to a "channel factory initialization" query despite being indexed). - ✅ Feat(parser): New
extract_preceding_docstringinsrc/pipeline/parser/languages/groovy.rswalks backwards from each declaration: skips annotations (@PackageScope,@Override) and tolerates one blank line; captures the adjacent/** ... *///* ... */block or a burst of//lines; stops atpackage/import/code lines so license headers never leak into the first class of a file. Markers are stripped via the sharedstrip_comment_markers. - ✅ Test(unit): 18 new tests — 11 for the backwards-walk policy (adjacent block, annotations,
//bursts, blank-line tolerance, license-header guard, empty/malformed comments, file start) and 7 for the wiring intoextract_entities_groovy, including the literal nextflowPluginExtensionPointfragment;test_groovy_parse_sample_full_filenow asserts extracted docstrings;prepare.rsgains a contract test that the docstring reachesembed_text. - ✅ Test(e2e):
tests/run_groovy_e2e.shgains Suite E — Docstrings: the syntheticPluginExtensionPoint.groovyfixture now carries the verbatim nextflow GroovyDoc and@PackageScope, with Cypher assertions on theinit/checkInitdocstrings, a non-empty-docstring entity count, and a Qdrant scroll parity check (3 points for the file) via the REST port. - ✅ cargo fmt clean | cargo clippy --all-targets -- -D warnings clean | 912 unit tests passing |
./tests/run_groovy_e2e.shgreen
Install knot 1.5.4
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.5.4/knot-installer.sh | shDownload knot 1.5.4
| File | Platform | Checksum |
|---|---|---|
| knot-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| knot-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
v1.5.3 — Groovy Inheritance & Perf Optimization
Release Notes
- ✅ Feat(groovy): The Groovy parser now emits
EXTENDS/IMPLEMENTSreference intents fromclass,interface,trait, andenumdeclarations, enabling accurate Nextflow-style hierarchy traversal viafind_callers. - ✅ Chore(config): Increased default batch size for Rayon parallel ingestion from 64 to 128.
- ✅ Fix(e2e): Stabilized Neo4j healthchecks and Cypher
EXPLAINplan checks to prevent flapping timeouts in integration tests. - ✅ cargo fmt clean | cargo clippy clean | 894 unit tests passing
Install knot 1.5.3
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.5.3/knot-installer.sh | shDownload knot 1.5.3
| File | Platform | Checksum |
|---|---|---|
| knot-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| knot-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
v1.5.2 — Composite Index for CONTAINS Auto-Link
Release Notes
Performance
- Composite index
(repo_name, fqn)on:Entity— the CONTAINS
auto-link query no longer degrades to O(n²) per-row label scans on
every entity in the repository. Large repos (~50K entities) no
longer timeout at the end of indexing. The index is created with
IF NOT EXISTSso it migrates automatically into existing
deployments.
Internal
- Extracted
index_statements()fromensure_indexes()for unit
testing (same pattern already used bybuild_contains_auto_link_cypher()). - Added unit tests covering the new composite index, idempotency of
IF NOT EXISTS, and preservation of all existing index statements. - Added integration test (
#[ignore]) that verifies the index appears
inSHOW INDEXESand thatEXPLAINof the auto-link Cypher succeeds. - Added e2e regression script (
run_contains_autolink_index_e2e.sh)
with a synthetic Java fixture of 5,200 entities, verifying index
presence, plan index-seek, correct CONTAINS edge counts, and a time
budget canary against O(n²) regression.
Install knot 1.5.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.5.2/knot-installer.sh | shDownload knot 1.5.2
| File | Platform | Checksum |
|---|---|---|
| knot-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| knot-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
v1.5.1 — Machine-Independent (Repo-Relative) File Paths
Release Notes
- ✅ Feat(pipeline): All persisted
file_pathvalues are now stored as repo-relative paths with POSIX separators (e.g.src/pipeline/embed.rs). Newto_repo_relativechoke point insrc/pipeline/files.rs(withParseConfig.repo_rootcanonicalized once at pipeline start) enforces the format: relative to repo root, POSIX separators, no leading./, no trailing/, R5 warn-and-passthrough for the degenerate out-of-root case. I/O continues to use absolute paths — only the persisted string changes. - ✅ Feat(pipeline): Index state version bumps from 3 → 4. Existing v3 state files are rejected by
IndexState::load; the existing stale-version mechanism triggers a one-time full re-index on upgrade with no manual steps.file_hasheskeys are now the canonical relative path. - ✅ Feat(pipeline): Entity UUIDs (
Uuid::new_v5overrepo_name:file_path:fqn:start_line) become machine-independent: the same repo indexed on two hosts now produces identical UUIDs. Reinforced by the newtest_uuid_stable_across_machinesunit test insrc/models/entity.rs. - ✅ Feat(cli):
explore_file(shared by CLI and MCP) now accepts repo-relative paths (preferred), absolute paths underKNOT_REPO_PATH/ CWD (auto-stripped), and falls back to a path-boundaryENDS WITHsuffix query. Ambiguous matches across multiple repos surface aambiguous_path_candidateslist instead of a silent miss. - ✅ Feat(cli): New shared
format_file_linerenderer annotates every file mention with(repo: <name>)when the owning repo is known, used by both the CLI and MCP answers. - ✅ Feat(graph): New
QueryExt::find_files_by_suffixpowers the disambiguation fallback — a single Cypher query returning distinct(file_path, repo_name)pairs bounded by the indexedrepo_namewhen provided. - ✅ Feat(mcp):
explore_filetool description updated to state the preferred relative-path input, the absolute-path fallback, and the disambiguation contract. - ✅ Feat(parser): Rust crate discovery (
CrateDiscovery::crate_for_file,compute_rust_file_kind) still keys on the absolute path — the relative entity path is reconstructed againstrepo_rootonly when the parser is invoked with a relative path. FQNs are unaffected (asserted bytests/run_rust_reference_resolution_e2e.sh). - ✅ Test(unit): 6 new tests on
to_repo_relative(nested file, root file, trailing-slash root, backslash normalization, out-of-root R5, leading-dot-slash guard); 3 tests onIndexStatefor relative keys + v3 rejection; 2 tests on the parser for relativefile_path; 5 tests on input normalization and the suffix query; 1 test onformat_file_line. - ✅ Test(e2e):
tests/run_rust_reference_resolution_e2e.shqueries updated to expect repo-relative fixture paths and to strip cypher-shell's plain-format quoting. - ✅ Fix(e2e):
tests/docker-compose.e2e.ymlandtests/run_all_e2e_fast.shhardened — Qdrant 1.16+ removed/healthso the compose healthcheck never reports healthy;wait_for_portnow probes the actual port vianc -zfor non-Neo4j services. Pre-flight also frees any foreign container holding the e2e high ports (e.g. a sibling knot-server setup that would silently steal our bind). - ✅ Chore(docs): Removed two obsolete spec files (
docs/specs/indexing_progress_api.md,docs/specs/performance_fix_bfcarena_and_contains.md) — their designs are now covered by the codebase and CHANGELOG. - ✅ Docs: README upgrade note,
.prompt, and.knot-agent.mdupdated to teach the relative-paths contract to humans and LLMs alike. ⚠️ Breaking change: Upgrading from v1.5.0 triggers an automatic full re-index on first run..knot/index_state.jsoncarries a version field that the loader rejects when stale, andknot-indexerwipes the repo from both databases before rebuilding. No manual steps required.- ✅ cargo fmt clean | cargo clippy --all-targets -- -D warnings clean
- ✅ Unit tests passing.
Install knot 1.5.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.5.1/knot-installer.sh | shDownload knot 1.5.1
| File | Platform | Checksum |
|---|---|---|
| knot-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| knot-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
v1.5.0 — File-Based Indexing Progress Tracking
Release Notes
- ✅ Feat(pipeline): New
ProgressTrackerAPI (src/pipeline/progress.rs) — thread-safe, pollable struct exposingsnapshot()as aSerializeableIndexingProgresssoknot-servercan implementGET /repos/{name}/progresswithout a mapping layer. Counters use lock-free atomics; stage/error live behind anRwLock. - ✅ Feat(pipeline): Indexer logs a
[Progress] [<repo>] X/Y files (Z%) — batch #N ingested (M entities)line after every ingested batch, and a final100.0%line before reference resolution. Format pinned bytests/run_rust_e2e.shgrep assertions. - ✅ Feat(pipeline):
run_indexing_pipeline_with_progress()andsetup_watch_mode_with_progress()keep the legacy signatures, creating an internal throwaway tracker so CLI (knot-indexer) gets the log lines for free without opting into the API. - ✅ Feat(parser): New
FileParsedCallbackparameter onparse_files_streaminvoked exactly once per file (success or parse error), keeping the parser decoupled from the tracker. - ✅ Test(progress): 10 unit tests on
ProgressTracker(lifecycle, percent rules, concurrent atomicity, JSON serialization); 3 unit tests onparse_files_streamcallback (once-per-file invariant, error-path counting,Noneregression). - ✅ Test(e2e):
tests/run_rust_e2e.shnow asserts the[Progress]log format and the 100.0% final line. - ✅ Docs(readme): New "Indexing Progress" subsection with log-format example and library API sample.
- ✅ Docs(specs): New specification
docs/specs/indexing_progress_api.mdcovering the design, thread-safety, and knot-server integration sketch. - ✅ cargo fmt clean | cargo clippy --all-targets -- -D warnings clean
- ✅ 854 unit tests passing.
Install knot 1.5.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.5.0/knot-installer.sh | shDownload knot 1.5.0
| File | Platform | Checksum |
|---|---|---|
| knot-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| knot-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
v1.4.13 — Python `super()` and Chained Attribute Resolution
Release Notes
- ✅ Fix(python):
super().__init__()calls inside subclasses now resolve to the parent class's__init__instead of being misattributed to the enclosing class's own__init__(or dropped when the parent was unindexed). Reported against LlamaFactorywebui/chatter.py::WebChatModel. - ✅ Fix(python): Chained calls like
engine.chatter.method(...)now resolve via a receiver-chain disambiguator that scores each candidate by how many receiver segments appear in its FQN, picking the unique winner and dropping ties (no guessing). Fixes the case where a homonymous module-level function in another file would otherwise swallow the call. - ✅ Feat(python): Python parser now emits
ValueReferencefor chained attribute access used as a value (e.g.engine.chatter.loaded,load_btn.click(engine.chatter.load_model, ...)). Trailing identifier of everyattributenode is captured, except when it is the function of acall(already aCallintent) or theobjectof a wider attribute chain (avoids duplicate intermediate segments). - ✅ Test(e2e): Added 6 E2E assertions in
tests/run_python_e2e.shcoveringsuper().__init__()parent resolution (CLI + MCP), self-misattribution guard, and the three chained-attribute patterns (chained call, chained property, method-as-value). - ✅ cargo fmt clean | cargo clippy --all-targets -- -D warnings clean
- ✅ 827 unit tests passing.
Install knot 1.4.13
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.4.13/knot-installer.sh | shDownload knot 1.4.13
| File | Platform | Checksum |
|---|---|---|
| knot-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| knot-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
v1.4.12 — Python Constructor Call Resolution & Agent Skills Packaging
Release Notes
- ✅ Feat(python): Automatically redirect class instantiation (
ClassName(...)) to constructor (ClassName.__init__) in reference resolution, allowingfind_callersto accurately list class instantiation sites as callers of__init__. - ✅ Chore(scripts): Packaged agent skills into
.knot-agent-skills.shinstaller and.tar.gzarchive, replacing the previous python-based generation script. - ✅ Docs(specs): Added specification for Python constructor call resolution.
- ✅ Docs: Updated
knot reposagent skill documentation to include the--filtersubstring parameter. - ✅ cargo fmt clean | cargo clippy --all-targets -- -D warnings clean
Install knot 1.4.12
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.4.12/knot-installer.sh | shDownload knot 1.4.12
| File | Platform | Checksum |
|---|---|---|
| knot-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| knot-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
v1.4.11 — list_repositories MCP Tool & CLI Filter
Release Notes
- ✅ Feat(mcp): Added
list_repositoriesMCP tool to list all indexed repositories with optional name filtering (TDQS-optimized description with sibling tool alternatives). - ✅ Feat(cli): Added
--filterflag toknot reposfor case-insensitive repository name filtering (substring match). - ✅ Test(e2e): Added 5 E2E tests for
list_repositoriescovering CLI list, CLI filter, CLI no-match, MCP list, and MCP filter. - ✅ Docs(readme): Documented
--filterflag and MCP tool in README. - ✅ cargo fmt clean | cargo clippy --all-targets -- -D warnings clean
Install knot 1.4.11
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/raultov/knot/releases/download/v1.4.11/knot-installer.sh | shDownload knot 1.4.11
| File | Platform | Checksum |
|---|---|---|
| knot-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| knot-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |