v7.36.0
Pairs with engine-service-v0.1.108 (additive).
Catalog: trash and restore (nexus-dkymw, nexus-xavu7)
nx catalog trash [--limit N]lists this tenant's tombstoned documents;
nx catalog restore TUMBLER_OR_TITLEclears a tombstone (title
resolution falls back to the trash listing when the live resolver
misses it). Closes nexus-xavu7: three operator-facing sites told a user
to "restore the trashed document(s)" with no surface to do it. Engine:
POST /v1/catalog/restore,GET /v1/catalog/trash, the first callers of
the RDR-156 P1.2nexus.document_restorefunction since it shipped._resolve_restore_targetno longer resolves a title present both live
and in the trash to the live copy and hides the restorable one — it now
refuses as ambiguous and names every tombstoned tumbler.nx t3 gc's orphan-sweep alive-set now protects a tombstoned-but-not-yet-
purged document's chashes, superseding nexus-mqd6t's original immediate-
exclusion filter for that one read (Sam's second 2026-09-07 ruling on
nexus-dkymw): its independent chunk-indexed_atclock can no longer
reap a just-tombstoned document's chunks insidenx catalog restore's
recovery window. The MCPstore_deletetool andnx collection delete/prunestill bypass the window entirely (they never tombstone,
or hard-delete in the same call); docs narrowed to name exactly those
two remaining carve-outs.
CLI: nx catalog setup retired from every remaining remedy (nexus-owna8)
The SessionStart RDR hook, mcp_infra, health, enrich, dt, t3,
doctor, upgrade, and catalog no longer point an operator at the
retired verb — the service owns the catalog now; populate with
nx index repo / nx store put.
PDF and MinerU
- Auto PDF-extraction mode skips the Docling pass once the quick formula
screen has already routed a document to MinerU, instead of running both
and discarding Docling's output — measured 24s saved ahead of a 32s
MinerU run on a 6-page paper (nexus-m5ym5). nx mineru stopnow signals the PID file's whole process group (so
MinerU's multiprocessing workers and their resource trackers exit too),
refuses to signal a PID the OS has recycled for something other than
mineru-api, and leaves an inconclusive command read alone rather than
orphaning a server that may still be ours (nexus-5yrob, nexus-aabdr,
nexus-ajfld, nexus-8sb6x).nx doctor/ the post-upgrade sweep now
re-check the live command before treating a PID-file MinerU server as
real, and flag one whose interpreter lies outside the current
generation as stale — a server spawned from a develop checkout's
.venvpreviously survived three generation flips unnoticed
(nexus-ho9d2, nexus-ydqwo).
Aspects
Aspect extraction runs on the model each row is stamped with (haiku for
scholarly-paper-v1) and logs its actual cost and model per document
(nexus-oc98c, nexus-3ygp3). nx enrich aspects and nx enrich aspects-list --missing refuse a collection name the catalog does not know instead of
reporting a clean, empty run or false full coverage (nexus-ngpx0).
DEVONthink: nx dt index page coverage and metadata (nexus-i0cwh)
nx dt index checks page coverage against DEVONthink's pageCount
(--allow-page-gap to accept a gap), records DEVONthink url, year and
pageCount on the catalog row, and gains the /conexus:devonthink-index
command.
Index
nx index repo registers docs/rdr collections with the effective
write-time embedding model instead of a hardcoded voyage-context-3,
closing a 422 a local-mode (bge) install would otherwise hit the moment
the engine started enforcing profile-vs-write-model agreement
(nexus-ft04v.34).
RDR lifecycle: gate loop, fix surface, and one round table (nexus-zbdm0, nexus-g7zgw, nexus-dv7gw, nexus-yxo2l)
nx rdr preamble rdr-fix <id>is the new fix step: prints the latest
gate's findings with theirSites:lists, the diff range and fix
commits since the gated commit, whether a fix-check record exists for
the file's current tip, the pre-edit research title, and the fix rules;
/conexus:rdr-fixand therdr-fixskill wrap it.nx rdr preamble rdr-verdict <id> <critique-title>computes a gate's
outcome from the stored critique instead of by hand: Critical and
Significant issue blocks andShip-blocker: yesmarks are counted, the
larger of each self-reported and counted number wins, and
review-rounds.toml's round-numbered rdr-gate rule decides
PASSED/BLOCKED.nx rdr preamble rdr-gate's re-gate block now fires after every prior
gate record, PASSED or BLOCKED, surfaces the prior round's findings via
a Layer 0 sweep, and adds a diff-scoped Fix check layer ahead of Layernx rdr preamble rdr-auditleads with a Gate loop health block:
rounds and Criticals per round per gated RDR, flagging a loop that ran
past the round cap.
src/nexus/tables/review-rounds.tomlis now the single statement of
the code-review, plan-audit, and rdr-gate round bounds; the surfaces
that used to hardcode them cite it instead.
Developer tooling
- One engine build lease per box, shared across worktrees via the git
common dir, and a content-keyed cache for the stamped gate jar, so a
fresh worktree with an unchangedservice/tree gets a copy instead of
a nine-minute rebuild (nexus-g6xpa). - Raw-SQL test-tree conversions onto typed jOOQ DSL continued (batches
9-12, nexus-cbo4a): the tree-wide raw-SQL ceiling fell from 1661 to
1245 sites across batches 9-11, with batch 12 continuing the trend.
Role-levelsearch_pathreliance was deleted from the test tree
entirely (Sam's directive, nexus-zrcj7), surfacing one real production
bug along the way —CatalogRepository.deferManifestChunkFkran an
unqualifiedSET CONSTRAINTSname that only resolved via search_path. - The recall-parity gate now accepts a documented, measured cost: the
tail-ranking swap a split embedding-model group shows against
pre-batching fan-out (nexus-atylb, test-only).