_build_hebbian_clusters() only used hebbian edges, but 97% of hebbian
edges are self-loops from reinforce_record(). Only 7 are cross-record.
temporal_next edges (140) provide the cross-record connectivity needed
to form clusters >= CLUSTER_MIN_SIZE. Without them, consolidation never
creates summaries, no consolidated_from edges exist, and the graph
remains fragmented with 514 isolated nodes and max CC=58.
The Qdrant _TableShim returned updated_at as ISO strings (not datetime
objects), causing str.replace(tzinfo=...) to fail with
"str.replace() takes no keyword arguments". Parse strings via
datetime.fromisoformat() before timezone handling.
Also add missing delete(where) and update(where=, values=) methods to
_TableShim so the LanceDB-compatible shim works with Qdrant's payload
collection, plus a _parse_where() helper to convert where clauses to
Qdrant Filters.