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
- Inspect the row's created_at value and repair or delete the corrupt object
- Ensure external writers use RFC3339Nano timestamps
- 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.