Files
suaveplan/openspec/archive/2026-05-25-enterprise-video-thumbnails/tasks.md
2026-05-27 23:29:53 +01:00

2.9 KiB
Raw Blame History

Tasks: enterprise-video-thumbnails

1. Scaffold

  • 1.1 Create packages/media/video/video-thumbnails/ skeleton: package.json at 0.1.0, tsconfig.lib.json, vite.config.ts, vitest.config.ts, polyfills setup.
  • 1.2 Add video plugin to media super-category in scripts/folder-reorg/assignment.yml.

2. Error codes + error class

  • 2.1 src/error-codes/error-codes.ts — defineCodes("VIDEO_THUMBNAILS", [...]) for all nine codes.
  • 2.2 src/errors/video-thumbnails-error.ts — VideoThumbnailsError extends SuaveplanError<VideoThumbnailsCode>.
  • 2.3 Sibling .md for each.

3. Zod schemas

  • 3.1 src/schemas/schemas.ts — ThumbnailConfigSchema, ThumbnailOptionsSchema, SpriteSheetConfigSchema, VideoMetadataSchema, ThumbnailResultSchema, SpriteSheetResultSchema.
  • 3.2 Inferred types in schemas.types.ts.

4. Telemetry

  • 4.1 src/telemetry/telemetry.ts — getTelemetry() returns { extractDuration, extractTotal, spriteSheetDuration, spriteSheetFrames } lazily via metrics.getMeter.

5. Runner

  • 5.1 src/runner/runner.ts — FfmpegRunner interface + ExtractInput/TileInput/ProbeResult.
  • 5.2 src/runner/fluent-ffmpeg-runner.ts — FluentFfmpegRunner default impl using fluent-ffmpeg + @ffmpeg-installer/ffmpeg; threads AbortSignal to command.kill("SIGKILL").

6. ThumbnailGenerator

  • 6.1 src/thumbnail-generator/thumbnail-generator.ts — generate, generateMultiple, extractSlidingWindow, getMetadata, isAvailable.
  • 6.2 Boundary Zod validation; OTel emission; AbortSignal propagation.

7. SpriteSheetGenerator

  • 7.1 src/sprite-sheet/sprite-sheet.ts — N×M tile via runner.tile; auto-detect duration via runner.probe.

8. Barrel + subpath exports

  • 8.1 src/index.ts explicit named exports.
  • 8.2 package.json exports map covers ., ./errors, ./schemas, ./runner, ./thumbnail-generator, ./sprite-sheet, ./telemetry.

9. Real-fixture test suite

  • 9.1 tests/setup/fixtures.ts synthesises a 5-second 320×240 MP4 via ffmpeg lavfi once per worker; cached temp path.
  • 9.2 Tests exercise every public surface (extract, multiple, sliding-window, sprite-sheet, getMetadata, isAvailable, abort, validation errors, every error code).

10. Docs

  • 10.1 Sibling .md for every .ts (≥200 words, 6 sections).
  • 10.2 README.md at package root with modules table.

11. MANIFEST refresh

  • 11.1 bun scripts/folder-reorg/generate-manifest.ts.

12. Ship gate

  • 12.1 bunx turbo lint typecheck test build --filter=@suaveplan/video-thumbnails green.
  • 12.2 bunx turbo test:coverage --filter=@suaveplan/video-thumbnails 100/100/100/100.
  • 12.3 Fold specs/video-thumbnails/spec.md into openspec/specs/video-thumbnails/spec.md.
  • 12.4 Move change folder to openspec/archive/2026-05-25-enterprise-video-thumbnails/.
  • 12.5 Flip STATUS.md row to ✅, update counters.