missions hero audit — 2026-06-15
Generated by scripts/audit-heroes.ts (#5 Phase 1). Rubric locked in chat 2026-06-12; see commit footer for the principles.
Summary
- ✓ clean: 12
- ⇄ swap proposals: 3
- ⊘ needs sourcing: 65
- ✋ accepted overrides: 18
⇄ Swap proposals
Each entry's 01.jpg is currently flagged by the rubric AND an alternate slot in the same gallery scored cleanly. Review then apply (script TBD in Phase 4).
| id | hero reasons | propose → | alt rationale |
|---|---|---|---|
| maven | subject: matches test[-\s]?stand | test[-\s]?fixture | test[-\s]?article; subject names a different entity than maven |
| hope-probe | subject: matches mock[-\s]?up | mockup | scale\s+(?:\S+\s+){0,2}model |
| blue-moon-mk1 | subject names a different entity than blue-moon-mk1 | 04.jpg | score 6 · zero rubric flags |
⊘ Needs sourcing
Hero is flagged by the rubric and no clean alternate exists in the gallery. Either source a better image (agency-first fetcher pattern) or add an explicit entry to static/data/missions-hero-overrides.json if the current pick is genuinely the canonical option (Soviet-era / crashed-mission cohort).
| id | reasons |
|---|---|
| mariner4 | category: diagram — not a hero candidate; score: 2 < threshold 6; vision-rejected: category-diagram |
| luna9 | subject names a different entity than luna9 |
| apollo11 | category: people-only — no asset visible; score: 2 < threshold 6; vision-rejected: category-people; subject names a different entity than apollo11 |
| apollo13 | subject names a different entity than apollo13 |
| luna16 | not-scored |
| luna17 | score: 4 < threshold 6; vision-rejected: score-below-threshold; subject names a different entity than luna17 |
| mars3 | score: 2 < threshold 6; vision-rejected: score-below-threshold |
| apollo17 | subject names a different entity than apollo17 |
| luna21 | not-scored |
| pioneer-11 | category: people-only — no asset visible; score: 2 < threshold 6; vision-rejected: category-people; subject names a different entity than pioneer-11 |
| viking1 | subject names a different entity than viking1 |
| luna24 | score: 5 < threshold 6; subject names a different entity than luna24 |
| clementine | category: people-only — no asset visible; vision-rejected: category-people |
| messenger | subject names a different entity than messenger |
| chandrayaan1 | subject names a different entity than chandrayaan1 |
| lro | subject names a different entity than lro |
| change3 | not-scored |
| schiaparelli | not-scored |
| change4 | subject names a different entity than change4 |
| beresheet | not-scored |
| change5 | subject: matches mock[-\s]?up |
| tianwen1 | subject: matches mock[-\s]?up |
| change6 | subject: matches mock[-\s]?up |
| slim | subject: matches mock[-\s]?up |
| artemis2 | subject names a different entity than artemis2 |
| mmx | subject names a different entity than mmx |
| artemis3 | subject names a different entity than artemis3 |
| vega-1 | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold; subject names a different entity than vega-1 |
| vega-2 | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold; subject names a different entity than vega-2 |
| ulysses | subject names a different entity than ulysses |
| juice | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold |
| apollo7 | not-scored |
| apollo9 | not-scored |
| apollo8 | not-scored |
| apollo10 | not-scored |
| apollo12 | category: people-only — no asset visible; vision-rejected: category-people; subject names a different entity than apollo12 |
| apollo14 | subject names a different entity than apollo14 |
| apollo15 | subject names a different entity than apollo15 |
| apollo16 | subject names a different entity than apollo16 |
| luna10 | not-scored |
| lunar-prospector | not-scored |
| smart-1 | not-scored |
| change1 | not-scored |
| freedom-7 | not-scored |
| liberty-bell-7 | not-scored |
| friendship-7 | not-scored |
| aurora-7 | not-scored |
| sigma-7 | not-scored |
| faith-7 | not-scored |
| vostok-1 | not-scored |
| voskhod-2 | not-scored |
| apollo-1 | not-scored |
| apollo-soyuz | not-scored |
| shenzhou-1 | subject: matches \bon (?:museum )?display |
| vostok-2 | category: people-only — no asset visible; score: 2 < threshold 6; vision-rejected: category-people; subject names a different entity than vostok-2 |
| vostok-4 | category: people-only — no asset visible; score: 2 < threshold 6; vision-rejected: category-people; subject names a different entity than vostok-4 |
| vostok-5 | category: people-only — no asset visible; score: 2 < threshold 6; vision-rejected: category-people; subject names a different entity than vostok-5 |
| vostok-6 | subject: matches press release |
| voskhod-1 | category: people-only — no asset visible; score: 2 < threshold 6; vision-rejected: category-people |
| skylab-2 | category: people-only — no asset visible; score: 3 < threshold 6; vision-rejected: category-people; subject names a different entity than skylab-2 |
| skylab-3 | category: people-only — no asset visible; score: 3 < threshold 6; vision-rejected: category-people; subject names a different entity than skylab-3 |
| otv-4 | subject names a different entity than otv-4 |
| otv-5 | subject names a different entity than otv-5 |
| otv-6 | subject names a different entity than otv-6 |
| mariner10 | subject names a different entity than mariner10 |
✋ Accepted overrides
| id | reason |
|---|---|
| voyager-2 | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold |
| galileo | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold; subject names a different entity than galileo |
| cassini | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold |
| mars-express | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold |
| new-horizons | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold |
| dawn | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold |
| juno | url: artwork/illustration/render/scale-model in source URL; category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold |
| mangalyaan | subject names a different entity than mangalyaan |
| perseverance | subject names a different entity than perseverance |
| chandrayaan3 | subject names a different entity than chandrayaan3 |
| starship-demo | subject names a different entity than starship-demo |
| bepicolombo | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold |
| vostok-3 | category: people-only — no asset visible; score: 2 < threshold 6; vision-rejected: category-people |
| skylab-4 | category: people-only — no asset visible; score: 2 < threshold 6; vision-rejected: category-people |
| inspiration4 | category: people-only — no asset visible; score: 2 < threshold 6; vision-rejected: category-people |
| polaris-dawn | category: people-only — no asset visible; score: 1 < threshold 6; vision-rejected: category-people |
| otv-3 | subject names a different entity than otv-3 |
| otv-7 | subject names a different entity than otv-7 |
✓ Clean
12 entries currently pass the rubric. Not enumerated here — they're the silent majority. Run with --list-clean if you want them.