# November 1 performance update — RustSearch 0.6.0

This build adds a bounded reverse lookup for item identifiers and an ASCII text
normalization shortcut in ordinary Rust. The Unicode routine, schema-7 index
format, visibility predicates, queue acknowledgement and worker schedules retain
their existing contracts. The KPZ filename and SHA-256 identify the exact build.

## Changes

- Item-ID requests use sorted item/document pairs to narrow candidates before
  applying the existing item visibility, availability, branch and date predicates.
  The active cache has a 250,000-pair budget. Segments that do not fit use the
  original native scanner. Older pinned snapshots may retain their arrays until
  readers finish; this budget does not bound the whole decoded-item cache.
- Verified ASCII strings use Rust's lowercase conversion. All non-ASCII strings
  use the original Unicode normalization body in a separate function. There is no
  handwritten assembly or new CPU instruction requirement.

The local x86-64 investigation measured about 97% less warm item-ID latency at
50,000 records/150,000 items. At one million items, budget fallback reduced that
improvement to about 20%. These are synthetic native-handler measurements, not
Koha/browser latency or a universal capacity guarantee. The selected normalizer
matched canonical text and token positions/offsets on 80,173 strings, including
30,130 real catalog strings. Its isolated ASCII/mixed-text gains do not establish
a whole-import gain: real Koha loading and MARC preparation remain substantial.

The evidence and limits are retained in `experiments/performance-followup/` in
the source repository. The current publication receipt is under
`benchmarks/performance-release-20261101/`.

## New installations

Use the latest KPZ's bundled server setup. When an engine is missing, setup
builds the included engine source with the existing native CPU build safeguards.
Validate your library's workflows before production use. SELECT RUSTSEARCH IN
SEARCHENGINE to search through RustSearch; the separate OPAC flag still applies.

## Existing installations

Uploading the KPZ alone does not replace a running Rust executable. Normal setup
and `--existing-engine` deliberately preserve a compatible installed executable;
they therefore do not install these engine optimizations on their own.

The schema and projections have not changed, so these optimizations do not
require a full reindex of a compatible schema-7 installation. An administrator
must build the new bundled engine and perform a coordinated binary refresh using
the actual instance's service, user, endpoint and index paths. Preserve the old
binary for rollback, probe the candidate in disposable indexes, and validate
counts, item-ID/availability/visibility searches and ordinary queries after the
restart. The existing legacy schema-6 updater remains a separate workflow and
must not be used to bypass its schema-7 refusal.

To obtain the source without running installation, copy the KPZ's protected
`setup` resource directory as described in Configuration, then run its launcher
with `--extract-only`. It prints the private extracted folder. Build there using
`sh engine/scripts/build-native.sh` as the ordinary SSH user. Do not guess a
service name or overwrite an arbitrary executable: multi-instance mappings can
use different paths, and replacing the KPZ does not identify the active binary.

This publication does not change a live service, SEARCHENGINE selection, OPAC
setting, batch size, queue limit or indexing schedule.
