git-subtree-dir: aiui git-subtree-mainline:0c4826f8ccgit-subtree-split:e30ac1d106
32 lines
1.0 KiB
Plaintext
32 lines
1.0 KiB
Plaintext
---
|
||
description: Expert rules for Song content extraction, display, and surfacing
|
||
globs: "**/useContentPanel.ts,**/SongCard.vue,**/SongGrid.vue,**/SongDetail.vue,**/mocks/songs*"
|
||
alwaysApply: false
|
||
---
|
||
|
||
# Songs Content Surface
|
||
|
||
## Extraction Priority
|
||
|
||
1. Tagged: `[[song:s123]]` or `[[song_ext:Title|Artist|YYYY]]`
|
||
2. Library match: title + artist within 120 chars
|
||
3. Patterns: `"Title" by Artist`, `Title – Artist`, `**Title** by Artist`
|
||
|
||
## looksLikeSong Rejection
|
||
|
||
Reject when title/artist contains: news phrases, "BIP", "protocol", "web search", "mailing list", "training cutoff", etc. See `looksLikeSong()` blocklist.
|
||
|
||
- Max length: title 55 chars, artist 40 chars
|
||
|
||
## Edge Cases
|
||
|
||
- If `extractFilmIds` or `extractPodcastIds` found → return [] (don't mix film/podcast with song patterns)
|
||
- If `isNewsLikeResponse` → return [] (news bullets often look like "X – Y")
|
||
- Skip if title/artist is 4-digit year
|
||
- Skip if contains `[[film` or `[[song` tags
|
||
- Dedupe by `title|artist` lowercase
|
||
|
||
## Strip Rules
|
||
|
||
- `stripSongTags` removes song tags before displaying text
|