0xacc74b39…c22csent to0x2cdeb0d2…7c00·#25,663,013·0x2ee771af…fafd93
# JOKER 2
Proposal #1 dealt this DAO a joker — the index card, reversed. The card never turned face up: its art page was encoded raw instead of ABI-wrapped, so `heads(253)` reverts on every read, and any Noun that rolls head #253 (1-in-254 per mint) would render nothing — no art, no attributes, on any site or marketplace, forever.
JOKER 2 turns the card over, and deals a second one. Every deck carries two.
## Actions
1. `setArtDescriptor(JokerFix)` — hands the art contract's descriptor role to a single-purpose fixer contract.
2. `JokerFix.fix()` — rebuilds the head trait in one transaction: pages 0-5 are re-attached via their existing on-chain SSTORE2 pointers (byte-identical art, heads #0-252 untouched, read costs unchanged), and the broken 23-byte final page is replaced by a 256-byte page carrying the joker twice — #253 fixed, #254 new. The descriptor role is handed straight back inside the same call; if any check fails, the whole transaction reverts and nothing changes.
The fixer holds no funds, owns nothing, and is inert once used. If the proposal passes but `fix` is somehow never run, anyone can call `abort()` to return the descriptor role untouched.
## The art
The joker is the index card (head #237) rotated 180° — 23 bytes of RLE, three colors already in the palette (cream, red rule, blue rules). Both jokers are the same card: reversed, identical, and this time they decode.

## Verification
After execution, these calls must return bytes instead of reverting:
- `art.heads(253)`
- `art.heads(254)`
- `descriptor.generateSVGImage(seed with head 253 or 254)`
JokerFix: `0x4e1f20ca484941aafd70018dada692cb8b333226` — [source](https://raw.githubusercontent.com/snaveoguh/prop-assets/main/joker2/JokerFix.sol), verified on Sourcify
Payload: everything except the 39-byte joker page already lives on chain — the fixer references the six live SSTORE2 pointers and carries the new page inline, so the proposal itself is a few hundred bytes.