Summary
The 9 E2E storylines (IDs 34-42) were created via Foundry scripts, bypassing the web UI's inline indexer which sets genre and language. As a result, all stories show "Uncategorized" and the language filter doesn't work for non-English stories.
Root Cause
- Genre and language are off-chain metadata passed via the web UI to
/api/index/storyline
- The backfill cron only indexes on-chain data — does NOT set genre/language
- Foundry-created storylines skip the UI entirely
Genre Mapping (must match lib/genres.ts GENRES list exactly)
| ID |
Title |
Genre (intended) |
Genre (matching list) |
Language |
| 34 |
The Last Signal |
Sci-Fi |
Science Fiction |
English |
| 35 |
The Holloway Manuscript |
Mystery |
Mystery |
English |
| 36 |
The Ember Throne |
Fantasy |
Fantasy |
English |
| 37 |
Still Life with Shadows |
Literary Fiction |
Contemporary Lit |
English |
| 38 |
붉은 달의 아이 |
Horror |
Horror |
Korean |
| 39 |
風鈴の夏 |
Slice of Life |
Contemporary Lit |
Japanese |
| 40 |
碧血剑影 |
Wuxia |
Historical Fiction |
Chinese |
| 41 |
El Jardín de las Mariposas Eternas |
Magical Realism |
Others |
Spanish |
| 42 |
L'Heure Bleue |
Existential |
Contemporary Lit |
French |
Fix
Create migration 00026_backfill_e2e_genre_language.sql:
UPDATE storylines SET genre = 'Science Fiction', language = 'English' WHERE storyline_id = 34 AND lower(contract_address) = lower('0x9D2AE1E99D0A6300bfcCF41A82260374e38744Cf');
UPDATE storylines SET genre = 'Mystery', language = 'English' WHERE storyline_id = 35 AND lower(contract_address) = lower('0x9D2AE1E99D0A6300bfcCF41A82260374e38744Cf');
UPDATE storylines SET genre = 'Fantasy', language = 'English' WHERE storyline_id = 36 AND lower(contract_address) = lower('0x9D2AE1E99D0A6300bfcCF41A82260374e38744Cf');
UPDATE storylines SET genre = 'Contemporary Lit', language = 'English' WHERE storyline_id = 37 AND lower(contract_address) = lower('0x9D2AE1E99D0A6300bfcCF41A82260374e38744Cf');
UPDATE storylines SET genre = 'Horror', language = 'Korean' WHERE storyline_id = 38 AND lower(contract_address) = lower('0x9D2AE1E99D0A6300bfcCF41A82260374e38744Cf');
UPDATE storylines SET genre = 'Contemporary Lit', language = 'Japanese' WHERE storyline_id = 39 AND lower(contract_address) = lower('0x9D2AE1E99D0A6300bfcCF41A82260374e38744Cf');
UPDATE storylines SET genre = 'Historical Fiction', language = 'Chinese' WHERE storyline_id = 40 AND lower(contract_address) = lower('0x9D2AE1E99D0A6300bfcCF41A82260374e38744Cf');
UPDATE storylines SET genre = 'Others', language = 'Spanish' WHERE storyline_id = 41 AND lower(contract_address) = lower('0x9D2AE1E99D0A6300bfcCF41A82260374e38744Cf');
UPDATE storylines SET genre = 'Contemporary Lit', language = 'French' WHERE storyline_id = 42 AND lower(contract_address) = lower('0x9D2AE1E99D0A6300bfcCF41A82260374e38744Cf');
Acceptance Criteria
Summary
The 9 E2E storylines (IDs 34-42) were created via Foundry scripts, bypassing the web UI's inline indexer which sets genre and language. As a result, all stories show "Uncategorized" and the language filter doesn't work for non-English stories.
Root Cause
/api/index/storylineGenre Mapping (must match
lib/genres.tsGENRES list exactly)Fix
Create migration
00026_backfill_e2e_genre_language.sql:Acceptance Criteria
lib/genres.tsGENRES listlib/genres.tsLANGUAGES list