JuliusBrussee/caveman · error

ccr summary: %w

Error message

ccr summary: %w

What it means

Store.Summary's aggregate query over the recoveries table failed before any rows were read. The wrapped error is the underlying SQLite query failure; totals are not partially reported.

Source

Thrown at engine/ccr/store_sqlite.go:671

		ObjectTaskDecision, decisionID,
	))
	if errors.Is(err, sql.ErrNoRows) {
		return Object{}, ErrNotFound
	}
	if err != nil {
		return Object{}, fmt.Errorf("ccr task decision find: %w", err)
	}
	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 {

View on GitHub (pinned to 766dce6b13)

Solutions

  1. Check the wrapped error
  2. Retry the summary once the database is quiet
  3. Recreate the store if the recoveries table is corrupt
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at engine/ccr/store_sqlite.go:671 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/0a052acfeb04c753. Report an issue: GitHub.