diff --git a/src/plugin.ts b/src/plugin.ts index 54f3ea5..56efbb9 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -499,7 +499,14 @@ export function legacySubtitleMigration(existingMeta: Record | const langs = legacyCsvMembers(existingMeta, 'subtitleLanguages'); if (langs) { deletes.push('subtitleLanguages'); - for (const l of langs.map(toLang3)) if (l !== 'und') sets[`subtitleLanguages/${l}`] = 'true'; + for (const l of langs.map(toLang3)) { + if (l === 'und') continue; + sets[`subtitleLanguages/${l}`] = 'true'; + // …and the union (§9 rule #7). The live write path below already + // does this; the migration path did not, so records that only ever + // went through it were left half-written. + sets[`languages/${l}`] = 'true'; + } } const subs = legacyCsvMembers(existingMeta, 'subtitles'); diff --git a/test/extractor.test.ts b/test/extractor.test.ts index d8cf9cf..0bb4d56 100644 --- a/test/extractor.test.ts +++ b/test/extractor.test.ts @@ -310,7 +310,13 @@ describe('legacySubtitleMigration', () => { subtitles: 'cidS', })).toEqual({ deletes: ['extractedSubtitles', 'subtitleLanguages', 'subtitles'], - sets: { 'subtitleLanguages/eng': 'true', 'subtitleLanguages/fre': 'true', 'subtitles/und/cidS': 'true' }, + sets: { + 'subtitleLanguages/eng': 'true', + 'languages/eng': 'true', + 'subtitleLanguages/fre': 'true', + 'languages/fre': 'true', + 'subtitles/und/cidS': 'true', + }, }); });