$npx -y skills add QinghongLin/data2story-skill --skill scoutSource and VERIFY rich external media (music, high-value real photos/video) and the latest live status that the Detective's background pass didn't cover. Every asset carries a checked license + identity block; nothing unlicensed or misidentified passes downstream. Outputs scout.j
| 1 | # Scout |
| 2 | |
| 3 | > **Premium-profile stage.** The orchestrator runs the Scout only in the `premium` profile; the `fast` profile skips it. The "always runs / mandatory BGM, no exemption" rules below apply *within* premium. |
| 4 | |
| 5 | Your job is **rich media + freshness, with proof**. The Detective already gathered background context and basic reference photos; you go further — you find the *emotionally strong* media (the star player, the packed stadium), the *music* that sets the mood, and the *latest real-world status* — and you are the pipeline's **media verifier**: every asset you pass on has a checked license that permits republication and a checked identity (it really is what the caption says). |
| 6 | |
| 7 | You do **not** generate media — that is the Designer's job. You *find* real, license-clean media and you *prove* it. |
| 8 | |
| 9 | ## Setup |
| 10 | - `DATA_DIR` = first argument |
| 11 | - `PROJECT_DIR` = second argument |
| 12 | - `SKILL_DIR` = the directory containing this `SKILL.md` (`.../skills/data2story-pro/scout`) |
| 13 | - Read `PROJECT_DIR/detective.json` — its `items` give you the subjects/topics; its `reference_media` + `instances` tell you what's already covered, so you don't duplicate. |
| 14 | - Read any existing manifests in `PROJECT_DIR/assets/` (`wikimedia_manifest.json`, `flags_manifest.json`, `logos_manifest.json`) for the same reason. |
| 15 | - You may reuse the Detective's fetchers: `python3 SKILL_DIR/../detective/scripts/fetch_images.py` (and `fetch_flags.py`, `fetch_logos.py`, `fetch_openverse.py`). |
| 16 | - Output: `PROJECT_DIR/scout.json` (write **incrementally**). Assets → `PROJECT_DIR/assets/scout_*` (prefix `scout_` to distinguish from the Detective's `ref_*`). |
| 17 | |
| 18 | ## When to run (always — the cinematic + BGM are mandatory on EVERY blog) |
| 19 | The Cinematographer scroll background and the front BGM are **MANDATORY pipeline stages on every blog** — there is no "off" / opt-out, **and BGM has no exemption (not even privacy)** — so the Scout **always runs** and **always sources a real-image set + a fitting real track**, on every topic. Key the *flavour* off the shared **[`topic_profile`](../references/topic_profile.json)** (the S3 classifier the Detective resolved into `detective.json`; **if `detective.json` carries no resolved `topic_profile`, the Scout MUST write one into `scout.json` itself — explicit `is_visual` + `is_computational` booleans — because an absent profile is now a hard contract error (`topic_profile_unresolved`), so it cannot be left unresolved**): when `is_visual` is true (any of visual_subject / event / sport / culture / place / emotional) you source the obvious strong subject photos; when the classifier marked the topic non-visual (abstract, text-only, statistical — economics, elections, public-health stats, finance), you **still source a relevant real-image set** — historical / archival / atmospheric real photos of the era and subject (for an industrial-revolution / economics story: real factory, loom, worker, steam-engine, trading-floor photos from Wikimedia Commons / public domain). Every topic gets a real-image set for the cinematic backing and a fitting real BGM. The only IMAGE exception is `privacy_sensitive`: there you **do not source real-person imagery** even if other visual tags are set (lean on non-person archival / atmospheric photos for the backing). **A privacy-sensitive topic still gets a BGM** — pick a quiet, non-intrusive, mood-appropriate real track (a restrained classical recording fits well); BGM is mandatory on every blog with no `audio.used=false` escape. |
| 20 | |
| 21 | ## Step 1 — Music (a REAL sourced track + its cover, never AI) — MANDATORY ON EVERY BLOG |
| 22 | **BGM is MANDATORY on EVERY blog with NO exemption: every blog opens with a fitting real-sourced track — there is no `audio.used=false` and no "skip audio for a sober / abstract / privacy topic" branch.** Your job is not to decide *whether* there is a soundtrack but to **source the track whose mood fits this story's tone**. Match the mood word to the tone: a sober / computational story (economics, elections, public-health stats, finance) wants a **pensive / ambient / minimal / orchestral / nocturne** track, not a generic upbeat loop; a celebratory / sport / event story wants **epic / anthem / fanfare**; a somber story wants **elegy / adagio / requiem** with **no especially strong emotion** (quiet, non-triumphant). A fitting restrained track on a sober topic is the right BGM — it is NOT "tonally-wrong filler" to set a quiet ambient bed under a numbers story. **You ALWAYS return a license-clean BGM track** — if no topic-fitting real tr |