apiVersion: naftiko.dev/v1 kind: Capability metadata: name: media-center-scrobbling provider: trakt description: Drive the Trakt scrobble lifecycle from a media center (Plex/Kodi/Jellyfin/native) so playback start, pause, and stop translate into accurate watch history with deduplication and 80% completion semantics. spec: shared: - trakt-shared workflow: - step: on-playback-start operation: scrobbleStart input: - movie_or_episode_ids - progress: 0.5 - step: on-pause operation: scrobblePause input: - movie_or_episode_ids - progress: ${current_progress} - step: on-stop-or-end operation: scrobbleStop input: - movie_or_episode_ids - progress: ${final_progress} semantics: - "progress >= 80 -> action=scrobble (added to history)" - "1 <= progress < 80 -> action=pause (sync/playback resumes later)" - "progress < 1 -> 422 (ignored)" - "Same item rescrobbled within window -> 409 (returns watched_at + expires_at)" resilience: - on409: action: skip-with-log - on429: action: backoff-and-retry successCriteria: - "Every completed playback recorded once in /sync/history." - "Resume position is correctly stored when the user pauses."