dagger/dagger · error

decode persisted file blob lazy: %w

Error message

decode persisted file blob lazy: %w

What it means

Wraps json.Unmarshal failure in decodePersistedFileLazy for the blob lazy kind: the stored payload for a lazy blob-backed File does not match persistedFileBlobLazy's schema, so the lazy blob cannot be restored.

Source

Thrown at core/file.go:418

		payload, err := lazy.EncodePersisted(ctx, cache)
		return persistedFileLazyKindWithReplaced, payload, err
	case *FileWithTimestampsLazy:
		payload, err := lazy.EncodePersisted(ctx, cache)
		return persistedFileLazyKindWithTimestamps, payload, err
	case *FileChownLazy:
		payload, err := lazy.EncodePersisted(ctx, cache)
		return persistedFileLazyKindChown, payload, err
	default:
		return "", nil, fmt.Errorf("encode persisted file lazy: unsupported lazy type %T", lazy)
	}
}

func decodePersistedFileLazy(ctx context.Context, dag *dagql.Server, lazyKind string, payload json.RawMessage) (Lazy[*File], error) {
	switch lazyKind {
	case persistedFileLazyKindBlob:
		var persisted persistedFileBlobLazy
		if err := json.Unmarshal(payload, &persisted); err != nil {
			return nil, fmt.Errorf("decode persisted file blob lazy: %w", err)
		}
		return &FileBlobLazy{
			LazyState:   NewLazyState(),
			Filename:    persisted.Filename,
			Contents:    slices.Clone(persisted.Contents),
			Permissions: persisted.Permissions,
		}, nil
	case persistedFileLazyKindDirectoryFile:
		var persisted persistedFileSubfileLazy
		if err := json.Unmarshal(payload, &persisted); err != nil {
			return nil, fmt.Errorf("decode persisted file subfile lazy: %w", err)
		}
		parent, err := loadPersistedObjectResultByResultID[*Directory](ctx, dag, persisted.ParentResultID, "file subfile parent")
		if err != nil {
			return nil, err
		}
		return &FileSubfileLazy{LazyState: NewLazyState(), Parent: parent, Path: persisted.Path}, nil
	case persistedFileLazyKindContainerFile:

View on GitHub (pinned to 82ba2681db)

Solutions

  1. Re-run the operation to re-encode the lazy File
  2. Invalidate the corrupted persisted result
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at core/file.go:418 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05). Data as JSON: /api/errors/d99da3962b30f3f5. Report an issue: GitHub.