# Subtitle Sync Verification Implementation Plan > **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. **Goal:** Replace the no-op `test:subtitle` lane with real automated subtitle-sync verification that reuses the maintained subsync tests and documents the real contributor workflow. **Architecture:** Repoint the subtitle verification command at the existing source-level subsync tests instead of inventing a second hidden suite. Add one focused ffsubsync failure-path test so the subtitle lane explicitly covers both engines plus a non-happy path, then update contributor docs to describe the dedicated subtitle lane and how it relates to `test:core`. **Tech Stack:** TypeScript, Bun test, Node test/assert, npm package scripts, Markdown docs. --- ### Task 1: Lock subtitle lane to real subsync tests **Files:** - Modify: `package.json` **Step 1: Write the failing test** Define the intended command shape first: `test:subtitle:src` should run `src/core/services/subsync.test.ts` and `src/subsync/utils.test.ts`, `test:subtitle` should invoke that real source lane, and no placeholder echo should remain. **Step 2: Run test to verify it fails** Run: `bun run test:subtitle` Expected: It performs a build and prints `Subtitle tests are currently not configured`, proving the lane is still a no-op. **Step 3: Write minimal implementation** Update `package.json` so: - `test:subtitle:src` runs `bun test src/core/services/subsync.test.ts src/subsync/utils.test.ts` - `test:subtitle` runs the new source lane directly - `test:subtitle:dist` is removed if it is no longer the real verification path **Step 4: Run test to verify it passes** Run: `bun run test:subtitle` Expected: PASS with Bun executing the real subtitle-sync test files. ### Task 2: Add explicit ffsubsync non-happy-path coverage **Files:** - Modify: `src/core/services/subsync.test.ts` - Test: `src/core/services/subsync.test.ts` **Step 1: Write the failing test** Add a test that runs `runSubsyncManual({ engine: 'ffsubsync' })` with a stub ffsubsync executable that exits non-zero and writes stderr, then assert: - `result.ok === false` - `result.message` starts with `ffsubsync synchronization failed` - the failure message includes command details surfaced to the user **Step 2: Run test to verify it fails** Run: `bun test src/core/services/subsync.test.ts` Expected: FAIL because ffsubsync failure propagation is not asserted yet. **Step 3: Write minimal implementation** Keep production code unchanged unless the new test exposes a real bug. If needed, tighten failure assertions or message propagation in `src/core/services/subsync.ts` without changing successful behavior. **Step 4: Run test to verify it passes** Run: `bun test src/core/services/subsync.test.ts` Expected: PASS with both alass and ffsubsync paths covered, including a non-happy path. ### Task 3: Make contributor docs match the real verification path **Files:** - Modify: `README.md` - Modify: `package.json` **Step 1: Write the failing test** Use the repository state as the failure signal: README currently advertises subtitle sync as a feature but does not tell contributors that `bun run test:subtitle` is the real verification lane. **Step 2: Run test to verify it fails** Run: `bun run test:subtitle && bun test src/subsync/utils.test.ts` Expected: Tests pass, but docs still do not explain the lane; this is the remaining acceptance-criteria gap. **Step 3: Write minimal implementation** Update `README.md` with a short contributor-facing verification note that: - points to `bun run test:subtitle` for subtitle-sync coverage - states that the lane reuses the maintained subsync tests already included in broader core coverage - avoids implying there is a separate hidden subtitle test harness beyond those tests **Step 4: Run test to verify it passes** Run: `bun run test:subtitle` Expected: PASS, with docs and scripts now aligned around the same subtitle verification strategy. ### Task 4: Verify matrix integration stays clean **Files:** - Modify: `package.json` (only if Task 1/3 exposed cleanup needs) **Step 1: Write the failing test** Treat duplication as the failure condition: confirm the dedicated subtitle lane reuses the same maintained files already present in `test:core:src` rather than creating a second divergent suite. **Step 2: Run test to verify it fails** Run: `bun run test:subtitle && bun run test:core:src` Expected: If file lists diverge unexpectedly, this review step exposes it before handoff. **Step 3: Write minimal implementation** If needed, do the smallest script cleanup necessary so subtitle coverage remains explicit without hiding or duplicating existing core coverage. **Step 4: Run test to verify it passes** Run: `bun run test:subtitle && bun run test:core:src` Expected: PASS, confirming the dedicated lane and the broader core suite agree on subtitle coverage.