Repository navigation
v7.55.2
Fixed
-
PDF extraction: duplicated content on multi-page documents. MinerU's
end_page_idis inclusive, and nexus was passing a half-open range end. With the default one-page batching, every page but the first and last was extracted twice and both copies were concatenated into the document text. Documents indexed before this release carry the duplicate text: it is chunked, embedded and searchable, so the same passage can be returned more than once and crowd out other results. Nothing is lost or corrupted — identical chunk text collapses to a single stored row — so the symptom is a document whose chunk count exceeds its distinct chunks. To correct an affected document, re-index it (nx index pdf --force, ornx dt index --forcefor DEVONthink records); re-embedding is skipped for any chunk whose text is unchanged. -
The MCP stdio connection died whenever a request was cancelled. The
mcpSDK'sRequestResponder.cancel()answers a request it has just cancelled, but the client has already discarded that id, so the reply arrives as an unknown message id and the client tears down the whole transport — every tool on the server at once, with no auto-reconnect for stdio. Measured across 121 client log files: ten teardowns, five of them carryingRequest cancelled. nexus now corrects the SDK at server startup so a cancelled request is answered with silence, which is what the SDK's ownrespond()already assumed. The patch verifies the defect is present before applying and no-ops if a future SDK fixes it. (nexus-rjmyk) -
Aspect rows built in batches carried no
source_uri, so 481 of 2232 matched nothing. The two single-document builders minted the URI and the batch builder did not, because it was written as a transform of the response entry andsource_uriis derived rather than returned. The aspect operators re-derive that key and match it byte-equal, so an absent one reported as a content verdict — "does not match" — rather than as an error. (nexus-vnz3d) -
A failed taxonomy rebuild left a collection with no centroids and no signal.
rebuild_taxonomydeleted the existing centroids before computing the plan that replaces them, so any raise in between emptied the collection permanently. The empty state reports healthy through every layer: the nearest-centroid query returns no rows, the unmatched-chunk list is computed from chunk existence rather than assignment and so comes back empty, and the client tripwire only fires on a non-empty list. -
nx mineru statusprinted?for every count: it read anactive_taskskey the MinerU server's/healthhas never sent, while the server servesprocessing_tasks,queued_tasksandcompleted_tasks. The test fixture invented the same key, so the suite stayed green. -
A development checkout no longer sends the anonymous install ping.
install_pinghad three off-switches —NX_NO_TELEMETRY,telemetry.enabledand the 24h throttle — and none asked whether the process was running out of a git checkout, whichnexus.db.service_endpoint.is_dev_checkout_process()already answers for the production-write guard. Container-based test harnesses run an installed wheel rather than a checkout, soNX_NO_TELEMETRY=1remains required there and is enforced by a lint over everydocker runundertests/e2e. (nexus-6doho)
Changed
- The install shell under
src/nexus/_install/now dispatches to stdlib-only Python cores instead of restating their logic.layout.sh,census.sh,gc.shandshims.shbecome thin dispatchers overlayout_core.py,census_core.py,gc_core.pyandshims_core.py; the cores import nothing from nexus, because the installer runs with nothing installed. The duplication being removed was not theoretical — collapsing it fixed a source-classification rule that had no Python twin at all, a census that under-reported holders for a relative path, and a shim pruner that treated a hostile-named shim as owned and so kept it forever while the writer refused to write it andnx doctornever walked it. (nexus-utpuw)
Engine
- Pinned engine identity unchanged:
engine-service-v0.1.129.