Repository navigation
v7.65.0
Pairs with engine-service-v0.1.138, whose only change is that GET /v1/memory/list takes a limit (nexus-xn9ut). The change is additive and needs no schema change, so the engine deploys before this client tag. An older engine ignores the parameter and the client trims the result itself, so the output is the same either way.
Correction to 7.64.2
The 7.64.2 entry's "What to do" was incomplete, and one of its commands does nothing for many users (nexus-zytwq). uv tool upgrade conexus does not change an install that nx self install made, so always run nx self install. Both the CLI and the Claude Code plugins must be updated, and updating only one leaves hooks unfixed: from v7.54.0 one of the conexus plugin's Bash hooks runs code from the installed CLI, and the other three live in the plugin. The entry also did not mention two things. First, the plugin as installed before the rename to conexus, nx@nexus-plugins, keeps running its own hooks until you uninstall it (/plugin uninstall nx@nexus-plugins). Installing conexus does not remove it. Second, the sn plugin was affected too, from v4.33.1 through v6.1.0. The published advisory, GHSA-mc84-6gjq-vm2p, carries the authoritative list of affected versions and the steps to take. No CVE id has been assigned.
Fixed
- Subagents get their injected context again (nexus-fow78, nexus-8t9w8, nexus-xn9ut). The SubagentStart hook's T2 memory scan downloaded every entry of a project, content included, to render the five titles it shows: 3,840 rows and about 21 MB for the
nexusproject, about 9.5 s against a 9 s hook limit. When the harness killed the hook, the subagent started with no injected context at all. The scan now lists only the rows it renders and fetches content only for the entries it shows, and each HTTP call's timeout is clamped to what is left of the scan's budget. The measured scan dropped to about 5 s before the engine side landed. With engine-service-v0.1.138 the list is bounded at the engine too, and the overflow line reports the exact number of rows not shown. The bead-close gate'sbdstate-stamping now shares one time budget across all the beads it stamps, so a slowbdfails fast and the gate's ALLOW or DENY decision survives, instead of being lost when the harness kills the hook. nx upgrade --dry-runtakes seconds, not minutes (nexus-5z0us). Its name-vs-embed-dim advisory re-listed the whole tenant once per collection. On a 97-collection tenant that took 8 min 6 s with no output. It now takes 14 s, and prints a line saying what it is doing. The same per-collection re-listing is gone fromnx catalog doctor's chunk-size, dedup and zombie scans, the T3 orphan classifier (nx doctor --t3-vs-catalog,nx catalog verify, reconcile-stale),nx collection backfill-hash --allandnx t3 reidentify --all-collections. A collection whose count cannot be read is reported as unreadable, never counted as zero.- Scratch notes flagged for keeping now survive a session's end (nexus-mgu1k). The SessionEnd hook flushed flagged T1 scratch entries to T2 from a detached process that started after the MCP server had already cleared the session lease, so the flush failed on every run and flagged entries were lost. The MCP server now drains flagged entries to T2 during its own shutdown, before it clears the lease and revokes its token; every network step of that teardown is bounded at 5 s. The SessionEnd flush remains as a backstop for sessions that crash.
- The background-agent ledger stops recording phantom reports (nexus-uzntx). Claude Code's internal side-queries fire SubagentStop events with no agent type and no transcript; each one wrote an orphan REPORT row (92% of one session's ledger) and paid a synchronous network call. Those events now project nothing, and a dropped event logs as
tuple_projection_dropped_orphanrather than as a successful projection. - The plugin as installed before the rename to conexus is flagged until it is uninstalled (nexus-qocnk). The rename hint used to say only to install conexus and reload. It now leads with
/plugin uninstall nx@nexus-plugins, at MCP startup and innx upgrade.nx doctorgains a "Retired Claude Code plugin" row that fails whilenx@nexus-pluginsis still in Claude Code's plugin registry, whichever plugin the session runs.docs/desktop-deployment.mdnow lists the uninstall as a required step. nx tuple rdno longer hides rows past the first page (nexus-sh1ea). It returned the oldest rows, one engine read stops at 300, and nothing said more existed, so a board read showed stale posts. New flags:--since CREATED_AT,IDresumes from a cursor,--allpages through every row oldest first,--newestkeeps the latest-nrows, and--max-rowsbounds both (default 10,000). A truncated read prints a stderr line beginningnx tuple rd: truncated, naming the resume cursor. The RDR-184 expectations census now counts past 300 (measured: 1,530 reports, where it used to report 300).- Deleting a note after an import deletes it (nexus-r3cdg).
nx store deleteand MCPstore_deletelooked up a chunk's owner across the whole catalog. After an.nxexpimport into another collection a chunk had two owners, the lookup called it ambiguous, and the command printed "Deleted 0 entries" at exit 0 with the note still live. The lookup is now scoped to the chunk's own collection. nx store putof identical content under a second title makes a second document (nexus-enej7). It used to rewrite the first document's source URI to the new title, leaving document A unresolvable by its own title and document B never registered. MCPstore_getby title now consults the catalog only when chunk metadata has no match.nx store import -c <subject>resolves a bare subject (nexus-8o7ae) like every other store verb, instead of refusing it with a model mismatch on a bge install.- A failed index run no longer leaves its stored chunks unreadable (nexus-0ntxj). Every index path writes chunks before their manifest rows, and engine v0.1.137 hides chunks that have no owning document. A run that failed between the two writes therefore hid a document's chunks until someone repaired it with
nx catalog reconcile. A document's first failed run now rebuilds its manifest from the chunks that landed. A failed re-index of a complete document keeps its previous manifest. - Read commands against a stopped or failing service print one line (nexus-sis0m.1).
nx search,nx store getandnx collection listprinted a 46-line traceback when the local service was stopped, andnx store list --docsprinted "Collection not found" at exit 0. They now print one line naming the service, the failed request (method, host and route) and the remedy. - Exit codes that told callers the wrong thing (nexus-sis0m.2, nexus-sis0m.3, nexus-sis0m.4).
nx doctorrefuses more than one mode flag, because it only ever ran the first.nx doctor --check-mcp-logsfails when it scanned zero files.nx collection merge-candidatesexits 1 with its "unavailable" message, including under--format json.nx rdr preamble rdr-verdictexits 2 on a malformed call.nx t3 gccounts only the manifest-less note chunks it actually protects and refuses an unknown collection name.nx store listoffers a next page only after a full page. nx collection infoanswers in seconds and says where its numbers come from (nexus-ktsa1, nexus-7q8zg). It paged every chunk to find the latest index time, which took 5 min on a 48,553-chunk collection. It now reads the catalog. It prints the catalog row's model, and the name's model too when a model-encoding name disagrees with the row. A read failure prints the error instead of "unknown".nx collection listandinfoshow stored chunks next to live ones when they differ, andnx collection shapeskips quarantine siblings instead of telling you to merge them.- A renamed collection's old name no longer shows as a live collection (nexus-sis0m.3, client half). After
nx collection rename A B,nx collection listshowed A as live with 0 chunks andnx collection info Asaid "not found". The list now hides a retired name that holds no chunks, labels one that still holds chunkssuperseded -> B, and shows every row with--all;info Anames B as the successor. The engine half (B inheriting A's owner and source URIs) ships with the next engine tag. nx doctor --check-searchstopped failing every real tenant (nexus-dhvzx). One canned query was irrelevant to most collections, so 58 of 111 readthreshold_dropand the check exited 2. Each collection is now probed with one of its own chunks, and the check judges that chunk's real neighbours, excluding the chunk itself by id. A collection whose nearest neighbours all fall past its threshold is a warning row naming the distance, the threshold and the sample, not an exit 2.- MCP tools say what they did (nexus-zdzm5, nexus-bm8dd).
traversecapsidsat 300 with anids_truncatedkey; one two-hop walk had returned 1,196 ids (86 KB).searchrefuseslimitabove 300 instead of returning 301 rows. A read of an unregistered collection says the collection does not exist in this tenant, instead of advising a write endpoint. A depth-2 catalog traverse lists each edge once. Structuredsearchandqueryresults carry the catalog tumbler, where they had returned empty strings (nexus-kkqv7), so plan steps that read$stepN.tumblersget real seeds. - Lexical search changes which rows you get, not just their scores (nexus-zdzm5, nexus-p5ei5). Lexical matches usually have the worst vector distance in their window, and only the server reranker scores rows on text. CLI and MCP searches now rerank whenever lexical is on, and a degraded rerank is reported.
querywith a catalog filter searches every corpus by default (nexus-p5ei5).query(content_type="rdr")answered "No documents found" because the default corpus was stillknowledge. Withfollow_links, graph hops still cross corpora.- Catalog MCP
searchbyfile_pathorauthorcovers the whole catalog (nexus-3bafq). It filtered one page, so on a 23,334-row catalog anything past about row 21 read as absent. Free-text search with filters no longer drops them at the engine's 50-row cap. The ghost-by-title reconcile reads every full-text match, where a same-titled ghost past row 50 had caused a duplicate document. nx_answerhonoursbudget_secondsinside a retrieval step and marks every error return as a non-answer (nexus-5ezgn, nexus-f9kxd). A slow search could run 324 s against a 120 s budget; a step is now cut at the remaining budget. Planner failures, invalid input and zero-evidence returns now carry theplanner_error,errororno_evidenceanswer shape, instead of bare prose a caller could mistake for an answer.- Search is faster and ranks more consistently (nexus-w032x, nexus-2yshe). The catalog reverse lookup's manifests are reused instead of being fetched twice, and topic labels are fetched concurrently. The same-topic boost is now a fraction of the result window's distance spread, not a flat 0.1. On
voyage-code-3the flat boost was a whole window, so the nearest chunk could fall off the page, and results changed with-m. nx searchline numbers point at the right file (nexus-zdzm5). Prose results get line numbers from the printed file. When the printed file opens, the line comes from that file, never from another document. The silent-zero hint never suggests a threshold below the top distance.
Changed
- The test suite provisions its ONNX models on a fresh host without prompting, honours XDG directories, and shards substrate ports by worker count (nexus-wvyvn). CI routes the engine release's mac-arm64 legs to a self-hosted runner, and the PG-bundle cache seed covers both mac cache keys (nexus-yd9po, nexus-n7q28). None of this changes what ships.