JuliusBrussee/caveman · error

ccr typed object collision lookup: %w

Error message

ccr typed object collision lookup: %w

What it means

Wraps time.Parse(RFC3339Nano) failure on the created_at column while scanning a typed-object row in scanObject. The stored timestamp is not valid RFC3339Nano — corrupted or foreign-written row — so the object cannot be materialized.

Source

Thrown at engine/ccr/store_sqlite.go:539

		ON CONFLICT(object_id) DO NOTHING`,
		obj.ID, obj.Type, obj.ContentHash, obj.Source, obj.CreatedAt.Format(time.RFC3339Nano),
		obj.RepositoryState, obj.SessionID, obj.TransformVersion, obj.Currentness,
		obj.Lifecycle, string(deps), obj.OriginalByteLength, obj.StoredByteLength, obj.Data,
	)
	if err != nil {
		if isFull(err) {
			return "", fmt.Errorf("ccr typed object put: %w", ErrBudgetExceeded)
		}
		return "", fmt.Errorf("ccr typed object put: %w", err)
	}
	inserted, err := result.RowsAffected()
	if err != nil {
		return "", fmt.Errorf("ccr typed object put rows: %w", err)
	}
	if inserted == 0 {
		existing, err := s.GetObject(obj.ID)
		if err != nil {
			return "", fmt.Errorf("ccr typed object collision lookup: %w", err)
		}
		if !sameImmutableObject(existing, obj) {
			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
	}

View on GitHub (pinned to 766dce6b13)

Solutions

  1. Inspect the row's created_at value and repair or delete the corrupt object
  2. Ensure external writers use RFC3339Nano timestamps
  3. Re-create the affected object via PutObject so a valid timestamp is stored
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at engine/ccr/store_sqlite.go:539 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/08ddb280139bd15a. Report an issue: GitHub.