JuliusBrussee/caveman · error

ccr summary scan: %w

Error message

ccr summary scan: %w

What it means

Wraps a row Scan failure inside Store.Summary's aggregation loop. One content-type bucket row could not be scanned into its struct, usually a schema mismatch (columns added/changed by a foreign writer) or corrupt numeric values.

Source

Thrown at engine/ccr/store_sqlite.go:678

	}
	return obj, nil
}

// Summary aggregates stored recoveries into totals + per-content-type buckets.
func (s *Store) Summary() (Stats, error) {
	out := Stats{ByContentType: map[string]Bucket{}, Basis: "inferred"}
	rows, err := s.db.Query(
		`SELECT content_type, COUNT(*), COALESCE(SUM(tokens_before),0), COALESCE(SUM(tokens_after),0)
		 FROM recoveries GROUP BY content_type`)
	if err != nil {
		return out, fmt.Errorf("ccr summary: %w", err)
	}
	defer rows.Close()
	for rows.Next() {
		var ct string
		var b Bucket
		if err := rows.Scan(&ct, &b.Count, &b.TokensBefore, &b.TokensAfter); err != nil {
			return out, fmt.Errorf("ccr summary scan: %w", err)
		}
		b.Ratio = ratio(b.TokensBefore, b.TokensAfter)
		out.ByContentType[ct] = b
		out.Totals.Count += b.Count
		out.Totals.TokensBefore += b.TokensBefore
		out.Totals.TokensAfter += b.TokensAfter
	}
	if err := rows.Err(); err != nil {
		return out, fmt.Errorf("ccr summary rows: %w", err)
	}
	if err := rows.Close(); err != nil {
		return out, fmt.Errorf("ccr summary close: %w", err)
	}
	out.Totals.Ratio = ratio(out.Totals.TokensBefore, out.Totals.TokensAfter)
	used, err := s.storageBytes()
	if err != nil {
		return out, fmt.Errorf("ccr summary storage: %w", err)
	}

View on GitHub (pinned to 766dce6b13)

Solutions

  1. Check the wrapped error for the mismatched column
  2. Migrate or repair the recoveries table schema
  3. Recreate the store if the schema is unrepairable
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at engine/ccr/store_sqlite.go:678 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of JuliusBrussee/caveman@766dce6b13 (2026-08-18). Data as JSON: /api/errors/ebdd743e74827d28. Report an issue: GitHub.