<!-- source-hash: 192500e77aad1a0a4024a9e7d8dfcfec -->
Provides the lib-side default implementation of `buildProductReleaseCardProps` for chat dispatch, satisfying the three fields required by the compact (`size='sm'`) `<ProductReleaseCard>` variant without requiring hub-side extras.

## Key Components

### Interfaces
- **`ReleaseLike`** — Loosely typed shape for raw API row data, covering image URLs, video URLs, and release date fields
- **`DerivedSmProps`** — Output shape containing only the three sm-relevant props: `coverImage`, `hasVideoCover`, and `formattedDate`

### Functions
- **`pickCover(item)`** — Resolves the best cover image URL by mirroring the hub's `resolveReleaseCover` precedence: video thumbnails take priority when a video is set, falling back to `featured_image` then `og_image_url`
- **`defaultBuildProductReleaseCardProps(item)`** — Main export; builds the `DerivedSmProps` bundle from an unknown API row, using `formatReleaseDate` for TZ-safe date formatting

## Usage Example

```typescript
import { defaultBuildProductReleaseCardProps } from './product-release-card-defaults'

// Used as fallback when opts.extras.buildProductReleaseCardProps is not supplied
const props = defaultBuildProductReleaseCardProps(apiRow)
// → { coverImage: 'https://...', hasVideoCover: true, formattedDate: 'Jan 15, 2025' }

// Hub-side embedders override with their richer builder via extras:
const cardProps = (opts.extras?.buildProductReleaseCardProps ?? defaultBuildProductReleaseCardProps)(row)
```

## Notes

- Uses `formatReleaseDate` (not `new Date().toLocaleDateString`) to avoid UTC off-by-one day shifts on date-only `YYYY-MM-DD` strings
- Produces an empty string for `formattedDate` when `release_date` is absent, rather than throwing
- lg-only fields (`changelogCounts`, badge color, view count) are intentionally omitted — hub embedders supply those via `extras`