v5.9.3
Catalog moved behind the T2 daemon (RDR-146), closing the GH #1046 starvation.
Fixed
- Interactive
nx dt indexno longer starved by background indexing
(#1046)..catalog.dbwas the last shared-state store still on the
direct-sqlite3model, so a foreground catalog write could wait ~30 min
behind a hook-spawnednx index repocontending on the one SQLite writer
lock. The T2 daemon now hosts the single richCatalog(sole.catalog.db
writer) behind a write-only op whitelist; every consumer write routes
through it via typedmake_catalog_reader/make_catalog_writerfactories
(reads stay local), enforced by the storage-boundary lint.
Changed
- Interactive-vs-batch catalog-write fairness (RDR-146). Inside the single
daemon, an interactive write (foregroundnx dt index/capture/
incorporate, MCPstore_put) opens a short priority window; the background
indexer polls it and yields over a bounded budget so interactive writes are
never starved.nx index --on-locked=skipnow also defers a yielded catalog
write to the next idempotent pass; the per-repo advisory lock keeps its
separate two-same-repo job. NewNX_WRITE_PRIORITY=interactive|batch
overrides the tty-based default. - Bounded catalog graph traversal.
_LinkOps.graph()BFS replaced with a
singleWITH RECURSIVESQL query (depth cap, cycle detection).