JuliusBrussee/caveman · error

ccr typed object created_at: %w

Error message

ccr typed object created_at: %w

What it means

scanObject could not parse the created_at column of a typed_objects row as RFC3339Nano. The stored timestamp is corrupt or in an unexpected format, so the row cannot be reconstructed into an Object; callers include GetObject, ListSessionObjects, and FindTaskDecision.

Source

Thrown at engine/ccr/store_sqlite.go:560

			return "", errors.New("ccr: typed object id collision")
		}
	}
	return obj.ID, nil
}

func scanObject(scanner interface{ Scan(...any) error }) (Object, error) {
	var obj Object
	var created, deps string
	if err := scanner.Scan(
		&obj.ID, &obj.Type, &obj.ContentHash, &obj.Source, &created, &obj.RepositoryState,
		&obj.SessionID, &obj.TransformVersion, &obj.Currentness, &obj.Lifecycle, &deps,
		&obj.OriginalByteLength, &obj.StoredByteLength, &obj.Data,
	); err != nil {
		return Object{}, err
	}
	parsed, err := time.Parse(time.RFC3339Nano, created)
	if err != nil {
		return Object{}, fmt.Errorf("ccr typed object created_at: %w", err)
	}
	obj.CreatedAt = parsed
	if err := json.Unmarshal([]byte(deps), &obj.Dependencies); err != nil {
		return Object{}, fmt.Errorf("ccr typed object dependencies decode: %w", err)
	}
	return obj, nil
}

const objectColumns = `object_id, object_type, content_hash, source, created_at,
 repository_state, session_id, transform_version, currentness, lifecycle,
 dependencies_json, original_byte_length, stored_byte_length, data`

func (s *Store) GetObject(id string) (Object, error) {
	obj, err := scanObject(s.db.QueryRow(`SELECT `+objectColumns+` FROM typed_objects WHERE object_id = ?`, id))
	if errors.Is(err, sql.ErrNoRows) {
		return Object{}, ErrNotFound
	}
	if err != nil {

View on GitHub (pinned to 766dce6b13)

Solutions

  1. Inspect the typed_objects row's created_at value directly in SQLite to see the corrupt timestamp
  2. Repair or delete the affected row so its created_at conforms to RFC3339Nano
  3. If rows were imported from another tool, re-run the import with correct timestamp formatting
Defensive patterns

Strategy: validation

When it happens

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