contextlake 8.10.1
Fixed
-
kb index --workspaceno longer breaks its worker pool. The cause was
RepoTooLarge, the exception 8.10.0 added for the memory budget: it could not be
unpickled. A worker that refuses a repository sends the exception back to the parent,
and Python rebuilds an exception ascls(*args), whereargsheld only the formatted
message this class passes toException.__init__. The rebuild was three arguments
short and raisedTypeErrorinsideProcessPoolExecutor's manager thread, which has
no future to attribute a failure to, so it broke the whole executor: every healthy
worker was sent SIGTERM and every pending repository failed withA process in the process pool was terminated abruptly. One refused repository ended a 656-repository
run in about a minute.pickle.dumpssucceeded on the exception throughout. Only the parent's unpickle
failed, which is why nothing caught it. The same 17-repository cluster that broke the
pool twice now completes at--workers 4with 0 failures, the over-budget repository
reported as a skip, and all four workers exiting 0. -
Five more exceptions had the same defect and are fixed with it.
GrammarNotInstalledis raised on the same indexing path and would break a pool the
same way when an optional grammar is absent.McpToolError,CircuitOpenError,
StoreBusyandRunBusyare off that path today. Every exception in the package that
defines its own__init__now defines__reduce__, and a test walks the package to
assert each one survives a round trip, so the next one cannot ship without a sample. -
A broken worker pool now falls back to serial indexing. That fallback was written
for this failure and was unreachable:BrokenProcessPoolsubclassesRuntimeError, so
the per-repositoryexcept Exceptioncaught it, counted one failure against whichever
repository raised it, and continued, and the handler that re-runs the work-list serially
never ran once. The failure counters are reset before the serial pass, so a repository
that genuinely failed before the break is not counted again by it. -
The reason a pool broke is now reported.
str(BrokenProcessPool)is a fixed
sentence naming no cause, and the real reason is attached as__cause__, which was
discarded. Reporting only the fixed sentence is why three candidate causes stayed
unseparated across several investigations.