Withdraw Series Three art: invented faces, not likenesses - #12
Merged
Conversation
…enesses
The first art pass generated every portrait from a text prompt alone. The model
was never shown a photograph, so it produced a plausible-looking stranger for
each name rather than the actual person — Jeremiah Grossman's card in particular
looks nothing like him, and Whitfield Diffie's is not far off a generic
long-haired archetype.
For a set that presents itself as documented, sourced history, an invented face
attributed to a living person is the same class of defect as the fabricated
quotes this set was already built to avoid. It is arguably worse: the scouting
reports are all checkable, and the picture beside them was not.
So all 50 faces are withdrawn from the site and the 50 source portraits are
deleted rather than kept, because their only use would be re-rendering the same
wrong likenesses.
What replaces them, in a follow-up:
- Generation conditioned on a real, freely-licensed reference photo, with the
photographer credited. A survey of the roster finds ~37 of 50 have a usable
photo on Wikimedia Commons, though several Wikidata matches point at the
wrong human (Michael Howard resolves to the British politician) so each
identity has to be verified rather than trusted.
- Anyone with no free reference photo gets no face at all, not an invented one.
Card pages are gated on art existing, so `generateStaticParams` now filters on
`front` instead of prerendering 404s for every slug.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014htrUgbnoKQt9iT4G7hUpy
ThreatCrush Security Scan4 finding(s) MEDIUM: 4
Snippets are redacted; ThreatCrush never prints matched credential material. |
This was referenced Sep 8, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The first art pass generated every portrait from a text prompt alone. The model was never shown a photograph, so it produced a plausible-looking stranger for each name rather than the actual person. Jeremiah Grossman's card looks nothing like him; Diffie's is close to a generic long-haired archetype.
For a set that presents itself as documented, sourced history, an invented face attributed to a living person is the same class of defect as the fabricated quotes this set was explicitly built to avoid — arguably worse, since every scouting report is checkable and the picture next to it was not.
This PR
public/cards/security/.assets/portraits/security-pros/. Keeping them would only enable re-rendering the same wrong likenesses.front/backon all 50 entries, so the roster falls back to monogram plates and the set reads as unillustrated again.generateStaticParamsfilters onfrontrather than prerendering a 404 for every slug.What replaces it
A follow-up conditions generation on a real, freely-licensed reference photo and credits the photographer.
A survey of the roster against Wikidata/Commons found:
🤖 Generated with Claude Code
https://claude.ai/code/session_014htrUgbnoKQt9iT4G7hUpy