| 42-wallpapers-social-format-conversion-voice |
01 |
api |
| file-type |
| xlsx |
| csv-parse |
| pandoc |
| libreoffice |
| content-jobs |
| renderers |
| typescript |
|
| phase |
provides |
| 40-content-job-infra |
content_jobs table, renderContent switch stub, async job pattern |
|
|
| WallpaperBundle, AppIconBundle, SocialPostBundle, ConvertBundle type definitions in types.ts |
| wallpaper, social-post, convert cases in renderContent switch |
| converter-capabilities.ts startup probe for pandoc/libreoffice with cached result |
| execFileNoThrow utility for safe binary execution |
| Stub renderers for wallpaper, social-post, convert (Plans 02-04 replace) |
|
| 42-02 (wallpaper renderer uses WallpaperBundle type) |
| 42-03 (social renderer uses SocialPostBundle type) |
| 42-04 (convert renderer uses ConvertBundle type, converter-capabilities) |
| 42-05 (voice renderer) |
| 42-06 (UI wiring) |
|
| added |
patterns |
| file-type@22.0.0 |
| xlsx@0.18.5 |
| csv-parse@6.2.1 |
|
| execFileNoThrow pattern for safe binary probing (no throw on exit code !=0) |
| Startup probe with module-level cache for binary availability |
|
|
| created |
modified |
| server/src/services/converter-capabilities.ts |
| server/src/services/renderers/wallpaper-renderer.ts |
| server/src/services/renderers/social-renderer.ts |
| server/src/services/renderers/convert-renderer.ts |
| server/src/utils/execFileNoThrow.ts |
|
| server/src/services/renderers/types.ts |
| server/src/services/content-job-runner.ts |
| server/package.json |
| pnpm-lock.yaml |
|
|
| execFileNoThrow utility created as new server/src/utils/ helper — plan referenced it as 'project standard' but it did not exist yet; created as Rule 2 (missing critical functionality) |
| Stub renderers import and return RenderResult type to satisfy tsc module resolution — Plans 02-04 replace with real implementations |
| converter-capabilities.ts caches capabilities in module-level variable after first probe |
|
| execFileNoThrow: safe binary probe returning status 0|1, never throwing — use for all optional binary checks |
| Startup probe pattern: probe() called lazily on first get(), result cached in module-level variable |
| Stub renderer pattern: export async function that throws 'Not implemented', satisfies tsc |
|
|
3min |
2026-04-04 |