fleet 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: 61
- ⇄ swap proposals: 6
- ⊘ needs sourcing: 125
- ✋ accepted overrides: 53
⇄ 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 |
|---|---|---|---|
| crew-dragon | subject: matches press release | press conference | press kit; category: people-only — no asset visible; score: 2 < threshold 6; vision-rejected: category-people |
| kourou-ela-2 | subject names a different entity than kourou-ela-2 | 02.jpg | score 6 · zero rubric flags |
| osiris-rex | subject names a different entity than osiris-rex | 04.jpg | score 8 · zero rubric flags |
| spitzer | subject: matches awards? ceremony | gala | stamp |
| vega-1 | subject: matches \bon (?:museum )?display | exhibition | placards?\b; subject names a different entity than vega-1 |
| voskhod | subject names a different entity than voskhod | 05.jpg | score 8 · 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/fleet-hero-overrides.json if the current pick is genuinely the canonical option (Soviet-era / crashed-mission cohort).
| id | reasons |
|---|---|
| a7l | subject names a different entity than a7l |
| a7lb | category: people-only — no asset visible; vision-rejected: category-people; subject names a different entity than a7lb |
| aces | category: people-only — no asset visible; score: 2 < threshold 6; vision-rejected: category-people; subject names a different entity than aces |
| akatsuki | not-scored |
| antares | not-scored |
| ariane-6 | subject names a different entity than ariane-6 |
| atlas-lv-3b | category: diagram — not a hero candidate; vision-rejected: category-diagram; subject names a different entity than atlas-lv-3b |
| atv | category: diagram — not a hero candidate; score: 1 < threshold 6; vision-rejected: category-diagram |
| axemu | category: people-only — no asset visible; score: 4 < threshold 6; vision-rejected: category-people |
| baikonur-1-5 | not-scored |
| baikonur-31-6 | not-scored |
| beidou | subject: matches mock[-\s]?up |
| bepicolombo | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold |
| blue-moon-mk1 | subject: matches test[-\s]?stand |
| cape-canaveral-slc-40 | not-scored |
| change-2 | category: diagram — not a hero candidate; vision-rejected: category-diagram; subject names a different entity than change-2 |
| change-3 | category: diagram — not a hero candidate; vision-rejected: category-diagram; subject names a different entity than change-3 |
| change-4 | score: 4 < threshold 6; vision-rejected: score-below-threshold; subject names a different entity than change-4 |
| change-5 | subject names a different entity than change-5 |
| compton-gro | subject names a different entity than compton-gro |
| dart | category: people-only — no asset visible; score: 2 < threshold 6; vision-rejected: category-people; subject names a different entity than dart |
| emu | category: people-only — no asset visible; score: 2 < threshold 6; vision-rejected: category-people |
| energia | url: artwork/illustration/render/scale-model in source URL; score: 4 < threshold 6; vision-rejected: score-below-threshold |
| euclid | not-scored |
| exomars-tgo | not-scored |
| gaia | subject: matches awards? ceremony |
| galileo-gnss | subject: matches mock[-\s]?up |
| glonass | subject: matches mock[-\s]?up |
| goes-noaa | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold; subject names a different entity than goes-noaa |
| gps-gnss | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold; subject names a different entity than gps-gnss |
| hakuto-r | subject: matches mock[-\s]?up |
| hayabusa-2 | subject names a different entity than hayabusa-2 |
| hitomi | subject names a different entity than hitomi |
| hope | not-scored |
| htv | subject names a different entity than htv |
| htv-x | subject names a different entity than htv-x |
| hubble | subject names a different entity than hubble |
| im-1-odysseus | subject names a different entity than im-1-odysseus |
| inmarsat | category: render on FLOWN/ACTIVE asset; score: 5 < threshold 6; vision-rejected: score-below-threshold; subject names a different entity than inmarsat |
| iridium-next | subject: matches \bon (?:museum )?display |
| iss | subject names a different entity than iss |
| jiuquan-slc-43 | not-scored |
| juice | subject names a different entity than juice |
| jwst | category: people-only — no asset visible; score: 2 < threshold 6; vision-rejected: category-people; subject names a different entity than jwst |
| kourou-ela-3 | not-scored |
| kourou-ela-4 | not-scored |
| krechet-94 | subject names a different entity than krechet-94 |
| landsat | subject names a different entity than landsat |
| lc-39a | not-scored |
| lc-39b | not-scored |
| luna-16 | subject: matches press release |
| luna-9 | subject: matches awards? ceremony |
| lunokhod-1 | subject names a different entity than lunokhod-1 |
| lunokhod-2 | category: diagram — not a hero candidate; score: 3 < threshold 6; vision-rejected: category-diagram |
| mangalyaan | category: diagram — not a hero candidate; score: 2 < threshold 6; vision-rejected: category-diagram; subject names a different entity than mangalyaan |
| mars-2 | vision-rejected: score-below-threshold |
| mars-3 | vision-rejected: score-below-threshold |
| maven | not-scored |
| mercury-capsule | subject: matches press release |
| messenger | score: 4 < threshold 6; vision-rejected: score-below-threshold |
| mir | subject names a different entity than mir |
| molniya | score: 5 < threshold 6; subject names a different entity than molniya |
| n1 | subject names a different entity than n1 |
| o3b-mpower | score: 4 < threshold 6; vision-rejected: score-below-threshold |
| oneweb | score: 3 < threshold 6; vision-rejected: score-below-threshold; subject names a different entity than oneweb |
| orion | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold |
| phoenix | subject names a different entity than phoenix |
| planet-labs | subject names a different entity than planet-labs |
| plesetsk-43 | not-scored |
| progress-m | subject names a different entity than progress-m |
| r-7-vostok | vision-rejected: score-below-threshold |
| salyut-6 | subject: matches mock[-\s]?up |
| salyut-7 | url: artwork/illustration/render/scale-model in source URL; category: diagram — not a hero candidate; score: 2 < threshold 6; vision-rejected: category-diagram; subject names a different entity than salyut-7 |
| schiaparelli | score: 4 < threshold 6; vision-rejected: score-below-threshold; subject names a different entity than schiaparelli |
| sentinel-copernicus | subject names a different entity than sentinel-copernicus |
| shenzhou | subject names a different entity than shenzhou |
| shenzhou-iva | category: people-only — no asset visible; score: 2 < threshold 6; vision-rejected: category-people |
| skylab | category: people-only — no asset visible; score: 3 < threshold 6; vision-rejected: category-people; subject names a different entity than skylab |
| slim | vision-rejected: score-below-threshold |
| sls-block-1 | subject names a different entity than sls-block-1 |
| soyuz-2 | not-scored |
| soyuz-7k-ok | url: artwork/illustration/render/scale-model in source URL; category: diagram — not a hero candidate; score: 2 < threshold 6; vision-rejected: category-diagram |
| soyuz-ms | subject names a different entity than soyuz-ms |
| soyuz-t | subject: matches awards? ceremony |
| soyuz-tm | vision-rejected: score-below-threshold; subject names a different entity than soyuz-tm |
| spektr-rg | subject: matches mock[-\s]?up |
| sriharikota-slp | not-scored |
| starbase-orbital-a | not-scored |
| starliner | category: diagram — not a hero candidate; score: 1 < threshold 6; vision-rejected: category-diagram |
| starliner-suit | category: people-only — no asset visible; score: 2 < threshold 6; vision-rejected: category-people |
| starship | score: 2 < threshold 6; vision-rejected: score-below-threshold |
| tanegashima-yoshinobu | not-scored |
| tess | subject: matches mock[-\s]?up |
| tiangong-1 | subject names a different entity than tiangong-1 |
| tiangong-2 | url: artwork/illustration/render/scale-model in source URL; score: 4 < threshold 6; vision-rejected: score-below-threshold |
| tianwen-1 | not-scored |
| tianzhou | subject names a different entity than tianzhou |
| tundra-sirius | subject: matches \bon (?:museum )?display |
| vandenberg-slc-4e | not-scored |
| venera-7 | subject names a different entity than venera-7 |
| vikram-cy3 | subject: matches mock[-\s]?up |
| vostok | subject: matches awards? ceremony |
| vulcan | not-scored |
| wenchang-lc-101 | not-scored |
| xichang-lc-2 | category: diagram — not a hero candidate; score: 4 < threshold 6; vision-rejected: category-diagram |
| xichang-lc-3 | url: text/logo/PDF/infographic in source URL; category: diagram — not a hero candidate; score: 2 < threshold 6; vision-rejected: category-diagram; subject names a different entity than xichang-lc-3 |
| xmm-newton | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold; subject names a different entity than xmm-newton |
| luna10 | subject: matches \bon (?:museum )?display |
| luna24 | subject: matches \bon (?:museum )?display |
| lunar-prospector | vision-rejected: score-below-threshold; subject names a different entity than lunar-prospector |
| change1 | score: 4 < threshold 6; vision-rejected: score-below-threshold; subject names a different entity than change1 |
| change6 | subject: matches mock[-\s]?up |
| viking2-lander | not-scored |
| mars3-orbiter | subject names a different entity than mars3-orbiter |
| mars6 | subject: matches \bon (?:museum )?display |
| beagle2 | not-scored |
| exomars-rosalind-franklin | subject: matches mock[-\s]?up |
| salyut-2 | category: diagram — not a hero candidate; score: 2 < threshold 6; vision-rejected: category-diagram; subject names a different entity than salyut-2 |
| salyut-3 | url: artwork/illustration/render/scale-model in source URL; category: diagram — not a hero candidate; score: 2 < threshold 6; vision-rejected: category-diagram |
| lc-34 | subject names a different entity than lc-34 |
| mars2-orbiter | subject: matches awards? ceremony |
| lc-14 | category: diagram — not a hero candidate; score: 4 < threshold 6; vision-rejected: category-diagram; subject names a different entity than lc-14 |
| vostok-k | subject: matches \bon (?:museum )?display |
| voskhod-11a57 | category: diagram — not a hero candidate; score: 2 < threshold 6; vision-rejected: category-diagram |
| cape-canaveral-lc-36b | not-scored |
✋ Accepted overrides
| id | reason |
|---|---|
| apollo-csm-block-ii | subject names a different entity than apollo-csm-block-ii |
| ariane-1 | score: 4 < threshold 6; vision-rejected: score-below-threshold; subject names a different entity than ariane-1 |
| atlantis | subject names a different entity than atlantis |
| atlas-slv-3d | subject names a different entity than atlas-slv-3d |
| beresheet | category: diagram — not a hero candidate; score: 5 < threshold 6; vision-rejected: category-diagram; subject names a different entity than beresheet |
| buran | subject names a different entity than buran |
| cargo-dragon-v1 | subject names a different entity than cargo-dragon-v1 |
| cassini | subject names a different entity than cassini |
| chandra | subject names a different entity than chandra |
| clementine | vision-rejected: score-below-threshold; subject names a different entity than clementine |
| columbia | subject names a different entity than columbia |
| crew-dragon-iva | category: people-only — no asset visible; score: 3 < threshold 6; vision-rejected: category-people |
| dawn | vision-rejected: score-below-threshold |
| discovery | subject names a different entity than discovery |
| endeavour | subject names a different entity than endeavour |
| falcon-9 | category: people-only — no asset visible; score: 2 < threshold 6; vision-rejected: category-people |
| feitian | category: people-only — no asset visible; vision-rejected: category-people; subject names a different entity than feitian |
| galileo | category: diagram — not a hero candidate; score: 2 < threshold 6; vision-rejected: category-diagram |
| gemini | category: people-only — no asset visible; vision-rejected: category-people |
| juno | category: render on FLOWN/ACTIVE asset; score: 4 < threshold 6; vision-rejected: score-below-threshold |
| long-march-3b | category: diagram — not a hero candidate; score: 4 < threshold 6; vision-rejected: category-diagram |
| lvm3 | subject names a different entity than lvm3 |
| magellan | subject names a different entity than magellan |
| mars-express | score: 2 < threshold 6; vision-rejected: score-below-threshold |
| mars-polar-lander | score: 4 < threshold 6; vision-rejected: score-below-threshold; subject names a different entity than mars-polar-lander |
| mro | subject names a different entity than mro |
| new-shepard | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold; subject names a different entity than new-shepard |
| opportunity | score: 3 < threshold 6; vision-rejected: score-below-threshold; subject names a different entity than opportunity |
| phobos-2 | not-scored |
| pioneer-10 | score: 4 < threshold 6; vision-rejected: score-below-threshold; subject names a different entity than pioneer-10 |
| pioneer-11 | subject names a different entity than pioneer-11 |
| pragyan | category: diagram — not a hero candidate; score: 2 < threshold 6; vision-rejected: category-diagram; subject names a different entity than pragyan |
| progress-ms | subject names a different entity than progress-ms |
| rosetta | vision-rejected: score-below-threshold; subject names a different entity than rosetta |
| saturn-ib | category: diagram — not a hero candidate; score: 3 < threshold 6; vision-rejected: category-diagram |
| saturn-v | category: diagram — not a hero candidate; score: 2 < threshold 6; vision-rejected: category-diagram |
| spirit | category: diagram — not a hero candidate; score: 3 < threshold 6; vision-rejected: category-diagram; subject names a different entity than spirit |
| taiyuan-lc-9 | url: text/logo/PDF/infographic in source URL; score: 1 < threshold 6; vision-rejected: score-below-threshold |
| vega-2 | score: 5 < threshold 6 |
| viking-1 | subject names a different entity than viking-1 |
| voyager-2 | subject names a different entity than voyager-2 |
| x37b | subject names a different entity than x37b |
| yutu | category: diagram — not a hero candidate; score: 2 < threshold 6; vision-rejected: category-diagram; subject names a different entity than yutu |
| yutu-2 | subject names a different entity than yutu-2 |
| smart-1 | url: artwork/illustration/render/scale-model in source URL; vision-rejected: score-below-threshold; subject names a different entity than smart-1 |
| chandrayaan1 | category: diagram — not a hero candidate; score: 2 < threshold 6; vision-rejected: category-diagram |
| lro | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold; subject names a different entity than lro |
| mars-odyssey | category: render on FLOWN/ACTIVE asset; vision-rejected: score-below-threshold |
| lunar-orbiter-5 | subject names a different entity than lunar-orbiter-5 |
| salyut-4 | category: diagram — not a hero candidate; score: 2 < threshold 6; vision-rejected: category-diagram |
| salyut-5 | score: 3 < threshold 6; vision-rejected: score-below-threshold; subject names a different entity than salyut-5 |
| lc-5 | subject names a different entity than lc-5 |
| apollo-csm-block-i | category: people-only — no asset visible; score: 4 < threshold 6; vision-rejected: category-people; subject names a different entity than apollo-csm-block-i |
✓ Clean
61 entries currently pass the rubric. Not enumerated here — they're the silent majority. Run with --list-clean if you want them.