package watch import ( "fmt" "github.com/david/knox/internal/db" ) // Reconcile rebuilds all derived state from the observation log: entries are // reconstituted via deterministic SQL aggregation, then the auto-threader // re-links/re-creates threads idempotently by cluster_key. Returns the threads // created and observations linked. func Reconcile(kdb *db.KnoxDB) (int, int, error) { if _, _, err := kdb.RebuildEntriesFromObservations(); err != nil { return 0, 0, fmt.Errorf("rebuild entries: %w", err) } threader := NewAutoThreader(kdb) created, linked, err := threader.AutoThread() if err != nil { return 0, 0, fmt.Errorf("auto-thread: %w", err) } return created, linked, nil }