Retention knobs for [cleanup_all_tables]. At least one must be set or
nothing is cleaned. If both are set, Lance applies them as AND (a manifest
is kept if it satisfies either — i.e. only manifests older than BOTH the
time cutoff AND the version cutoff are removed).
A declared index the builder could not materialize on this pass. Today the
only such case is a vector (IVF) column with no trainable vectors yet
(KMeans needs >=1 vector), e.g. the load-before-embed window. Reported, not
fatal: a later ensure_indices/optimize retries once the column is
buildable, and reads stay correct via brute-force meanwhile. Surfacing
pending index status rather than failing the operation is the database
norm (Postgres indisvalid, LanceDB list_indices).
Per-table outcome of cleanup_all_tables. error is Some when this
table’s version GC failed; cleanup is fault-isolated per table, so a single
table’s failure is recorded here rather than aborting the whole sweep.
Per-table outcome of optimize_all_tables. This is a returned result type,
not built by callers, so it is #[non_exhaustive]: future fields stay
non-breaking and downstream code reads fields rather than constructing it.