# Independent audit of the bitGAN Act 1 data rebuild

Audit run 14 September 2026. Every figure below was recomputed from the primary
sources named in the brief. Nothing was run against a wallet and no money was spent.

## What I worked from

I downloaded Pindar's properties sheet from Arweave and confirmed its MD5. I
enumerated his ArDrive with Arweave GraphQL and downloaded all seven drop
archives plus `nounganziptest.zip` (about 3.5 GB in total), then unpacked and
hashed all 512 GIFs and parsed each one's frames, delays and XMP block myself. I
pulled the chain metadata for every mint slot from the OpenSea metadata endpoint
that the shared storefront's `tokenURI` points at, and the transfer histories
from Blockscout. I read journal pages 002, 003 and 015 from bitgans.com. I then
pulled `/api/tags` and `/api/pieces` from the site and compared tag by tag.

One note on method. Blockscout's cached `metadata` object is incomplete: 111 of
the 512 tokens came back with no traits at all. The OpenSea metadata endpoint
(the actual `tokenURI` target) returns the full record for every one of them.
Anyone reproducing this work from Blockscout alone will get a badly wrong answer.

## Verdict by claim

### 2a. Byte-level confirmation against Arweave

**1. All 512 GIFs byte-identical to the files we serve — DISAGREE (511 of 512).**
I hashed all 512 files out of the six drop archives and compared them to
`https://api.bitganspuzzlebook.com/media/gifs/{n}.gif`. 511 are byte-identical.
Piece **#251** is not served at all: that URL returns HTTP 404. Neighbouring
pieces #250 and #252 serve normally, so this is a gap in our media store, not a
naming problem. The claim cannot be true as written until #251 is uploaded.

The loose ArDrive files I checked on a sample rather than in full: 36 loose data
transactions covering the 19 duplicated ghost uploads, plus 24 more drawn at
random from the ghost and review folders. Every one is byte-identical to its
archive copy. One of the 24 first read as different, but that was a gateway
returning a one-byte body; refetching it from two other gateways gave the right
bytes.

**2. The properties sheet is byte-identical to our copy — AGREE.**
The Arweave copy is 42,509 bytes with MD5 `fb7333323f53ec176e264bb58fa6101c`,
and `arweave_bitgan_properties.csv` in the bundle has the same MD5.

**3. The only unmatched Arweave GIFs are two studies of piece #0 — DISAGREE.**
Three things are wrong here. First, `nounganziptest.zip` is not in the drive the
brief names. It sits in a **second ArDrive** owned by the same wallet, drive id
`e9723b32-dda2-4138-bca0-5842cd6f4e37`, named `noungans`. Second, the two GIFs
inside it are `00_c_blue_2.gif` and `01_c_red_2.gif`, and they are byte-identical
duplicates of the first two files in `00_noungans.zip`, which itself holds **64**
NounGAN GIFs that match none of the 512. So the number of distinct Arweave GIF
byte-sequences with no match among the 512 is 64, not two. Third, these are
studies for the NounGAN series, not studies of piece #0, the Pandimensional
skullGAN. Their on-chain names read "Noun GAN Study (0/63)" and "(1/63)".

**4. #14 and #75 are one byte sequence under two filenames — AGREE.**
`014_rainbow_skull.gif` and `075_flaming_glitch.gif` share SHA-256
`606221621b71c414…`, and it is the only repeated byte sequence in all 512 files.

**5. Every piece's filename is the name in Pindar's archive — AGREE on the
filenames, with three exceptions to the stated conventions.**
All 512 filenames I read out of the archives appear in `arweave_filenames.json`,
and no entry there lists a name I did not find. The conventions hold with three
breaks the brief does not mention:

- `02_robotgans/14_00110.gif` (piece #143). The binary half is five digits, not
  six. Position 14 is `001110`; the filename drops one `1`.
- `01_skullgans/49_s_flaming_smoke.gif` (piece #49). Every other skull is padded
  to three digits; this one is two.
- `06_reprisedgans/449__reprise00.gif` (piece #449). A double underscore where
  every sibling has one.

### 2b. Mapping the sheet to piece numbers

**6. The Number column mapping — AGREE, with one correction to the wording.**
The sheet has 513 rows. Row position is the piece number for every row from 0 to
512, so nothing is lost and nothing is doubled. Skulls, solstice and ghost rows
carry the decimal piece number. Spookies carry octal `0o0` to `0o17` and map to
193 + value. The Review rows sit in order 445 to 512, and exactly fourteen carry
a different counter: #457–#466 and #497–#500, of which twelve are binary and two
are hex (`0x20`, `0x21` on #465 and #466).

The correction: the robo rows do **not** hold six-digit binary. They hold
**unpadded** binary — `0`, `1`, `10`, `11`, `100`, up to `111111`. Six-digit
padding is a filename convention, not a sheet one.

**7. Every piece has a chain record, found by mint slot — AGREE.**
I derived the slot-to-piece map independently, from the counter inside each
token's on-chain name rather than from `token_index.json`, and I recovered all
512 pieces with no gaps. The map agrees with `token_index.json` on every piece.
The fourteen odd-numbered Review pieces exist on chain at slots 597, 598, 600,
602, 603, 604, 605, 606, 607, 608 (for #457–#466) and at the slots carrying
`1001000/512` to `1001011/512` (for #497–#500). None of the fourteen shows any
sheet-versus-chain difference on any compared field.

### 2c. Sheet versus chain

**8. Exactly 29 pieces differ — AGREE on the list, with a definitional gap.**
Comparing Title (counter stripped), GANg, Type, SubType, Essence, Eyes,
Dimensions and Name, and skipping fields a whole drop lacks on chain, I get 32
pieces: the 29 listed, plus **#268, #379 and #401**. Those three are exactly the
pieces of claim 13, where the sheet leaves Name blank and the chain carries one.
So the two claims are consistent in substance but not in wording: claim 8 says
Name is compared, and claim 13 shows three pieces where it differs. The fix is to
say that a blank-on-one-side Name is counted separately. The site itself is
consistent — `chain:sheet_chain_any` holds 26 pieces (the 29 minus the three
pure-rename ones) and `chain:named_on_chain_only` holds the three.

The fields a drop wholly lacks on chain are Essence for skulls and spookies, and
Name for spookies. That matches the brief.

**9. Five Twin→Twins renames, leaving 26 — AGREE.**
Twin on the sheet and Twins on the chain on #47, #59, #73, #121 and #124. On #47,
#59 and #121 it is the only difference.

**10. The four piles — AGREE.**
Sheet corrects a chain error: 4, 16, 48, 58, 62, 66, 73, 81, 88, 97, 100, 124,
309 (13). Substituted word describes the art: 17, 39, 44, 66, 173, 281, 509 (7).
Sheet introduces the error: 123, 128, 175 (3). Undecided: 33, 290, 315, 383 (4).
#66 is in two piles, so the four piles sum to 27 slots over 26 pieces. The site's
tag description gives the four counts without saying they overlap, so a reader
who adds them gets 27 and cannot tell why.

I confirmed the journal witness independently: page 003 says "#39 the
cyclopsGAN", which is why #39's chain GANg is treated as the right side. I also
confirmed #73's "Gltich" spelling appears in both the sheet and the filename
`073_twin_gltich.gif`, which is why the chain's correct spelling is the odd one.

**11. The kinds of move — AGREE, with one wording fix.**
Every move listed is real and lands on the piece named. The one loose description
is "#81 a cut suffix". The chain title is "Silver Ghost GAN" against the sheet's
"Silver Ghost skullGAN": the word `skull` is removed from **inside** the final
word, leaving `GAN`. #97 ("Slender Glitch") and #309 ("Frosty Ghost") really are
cut suffixes; #81 is not the same move.

A second detail on #58. The chain record does not simply lose SubType. The `Type`
key appears **twice**, holding `Glitch` and `Rainbow`, and there is no `SubType`
key at all. The card evidence reads "Type: Glitch (sheet) · Rainbow (chain)",
which makes it look as though the chain says only Rainbow.

**12. #383 carries the misspelled trait key `Subtype` — AGREE.**
It is the only such key in all 512 chain records.

**13. #268, #379, #401 carry a Name on chain that the sheet leaves blank — AGREE.**
41 pieces have a Name trait on chain, 38 have one in the sheet, and the three
extras are exactly these.

**14. Seven pieces carry a non-boilerplate on-chain description — DISAGREE (15).**
Normalising the per-piece Arweave links out of each description and comparing
each piece with its own drop's majority text, I find **15** pieces that differ,
not seven. The seven claimed (130, 147, 228, 246, 264, 282, 512) are all genuine,
and they are the bespoke or commissioned texts. The eight not claimed are
boilerplate defects, which is the more interesting kind:

- **#301, #302** say "The theme of this set is **the Colors**" where the other
  142 ghost pieces say "Color", and they end "Permanent Decentralized Storage for
  this **Image**" instead of "this bitGAN".
- **#303, #304** are **missing the first two sentences** of the boilerplate
  entirely; they open at "Find out more about the bitGANs…". They also say "this
  Image".
- **#305, #306** carry the normal opening but also end with "this **Image**".
- **#400** has a **tab character** inserted before each of its six newlines.
- **#272** has an extra closing paragraph, "All bitGAN art and properties to date
  now stored permanently on the web with ARWEAVE at:", pointing at Arweave
  transaction `Tn-2Uclzan8-VqcitD9pfnYpRPRCjX8RoE4h3wKnCng` — a **different**
  transaction from the Act 1 archive link every other piece carries.

The `chain:description_anomaly` tag therefore has eight members missing.

**15. #390 is minted twice — AGREE, with a difference worth recording.**
Slots 519 and 583 both carry "Frozen ghostGAN (90/144)". They are not identical
records. Slot 519 has **no traits at all** but does carry an `external_link` to
the piece's own Arweave GIF. Slot 583 carries the full seven traits and no
external link. The site treats 583 as the canonical mint; `token_index.json`
stores 519. Both first-transfer times differ (09:50 and 10:02 UTC on 3 Feb 2022),
and the card shows 583's.

### 2d. The hidden-type code

**16. The HiddenType letter is the piece's number class — AGREE.**
208 pieces carry the trait: all 128 skulls, all 64 robos, all 16 spookies. Using
Pindar's order from journal page 002 (Fibonacci, remaining primes, squares,
remaining odd, remaining even), and reading skulls by decimal number, robos by
six-bit binary position and spookies by octal position, the rule holds for every
piece except the eight palindromes and the five misfiles below. I re-read journal
002 from bitgans.com and it states the order exactly as the site does, and flags
#32 and #119 in Pindar's own words.

**17. The eight F robots are the binary palindromes — AGREE.**
Positions 0, 12, 18, 30, 33, 45, 51 and 63 (pieces #129, #141, #147, #159, #162,
#174, #180, #192), and each has a palindrome name: RoboboR, Dr Awkward, Taco Cat,
Dog God, Star Rats, Evil Olive, Flow Wolf, CalcuclaC. F appears nowhere else in
the robo drop.

**18. Exactly five misfiles — AGREE.**
#32 and #161 carry the literal text "32". #119 is odd (position 119) but filed as
`e`, even. #187 is even (robo position 58) but filed as `C`, square. #193 carries
F at spooky position 0, where the scheme gives A.

**19. 242 "even (remaining)" over 1–512 — AGREE.**
256 evens, minus the four even Fibonacci numbers 2, 8, 34, 144, minus the ten
even squares that are not Fibonacci (4, 16, 36, 64, 100, 196, 256, 324, 400,
484). The full split is Fibonacci 13, prime 91, square 20, odd 146, even 242.

### 2e. File facts measured from the GIFs

**20. 29 files differ from their drop's frame standard — AGREE.**
Robos (15): #129 at 108, #132 45, #146 63, #147 60, #155 45, #159 56, #162 66,
#163 53, #165 53, #166 45, #169 45, #180 66, #182 56, #183 65, #192 44.
Solstice (4): #228 at 120, #246 60, #264 60, #282 60.
Review (10): #445 88, #446 88, #467 81, #468 81, #469 81, #493 89, #494 89,
#495 89, #496 89, #512 63.

**21. Frame delays — AGREE.**
Ten files run every frame at 0 ms: #155, #176, #180, #182, #190, #446, #467,
#468, #469, #512. #228 runs 120 frames at 50 ms. Three files hold exactly one
frame at 100 ms in an otherwise 0 ms file: #479 at frame 27, #480 at frame 24,
#146 at frame 0. Every other skull file is 0 ms throughout and every other
later-drop file is 100 ms throughout.

**22. Four files carry colour-negative frames — AGREE.**
I rendered every frame of all 512 files and compared each frame, and its colour
inverse, against the frame before it. #231, #256 and #274 each carry the same
eleven: 37, 38, 43, 44, 47, 48, 50, 51, 52, 53, 54. #479 carries thirteen: 1, 2,
3, 4, 5, 7, 8, 11, 12, 17, 18, 26, 27. No other file has any. One footnote: on
#479 frame 0 is also the inverse of frame 1, so the run really begins at the
first frame; thirteen is right under the "compare with the previous frame"
definition because frame 0 has no predecessor.

**23. XMP, sessions, point releases, solo sessions — AGREE on all four counts.**
All 512 files carry a Photoshop XMP block, and all 512 `xmpMM:InstanceID` values
are UUID v1, so all 512 decode to a save time. Clustering those times at a
three-hour gap gives **39** sessions. **77** files were exported from a point
release: 22.3 (26 files), 22.5 (5), 23.0 (17), 23.1 (29). The bulk exports are
"Adobe Photoshop 2021 Windows" (180) and "Adobe Photoshop 2022 Windows" (255).
Exactly ten files sit in a session of one or two, and they are the ten claimed:
#1, #121, #152, #228, #300, #448, #467, #468, #469, #504.

**24. The 22.3 batch is the primes 7 to 127 minus #13 and #89 — AGREE.**
All 26 files were saved on 27 August 2021, and the set is exactly the 28 primes
from 7 to 127 with 13 and 89 removed. Both #13 and #89 were saved a week earlier
on 20 August with the plain 2021 build.

**25. #300 is the only file with document lineage — AGREE.**
It is the only one of the 512 carrying `xmpMM:OriginalDocumentID`, and the only
one whose `DerivedFrom` document id is a real Photoshop id of the form
`adobe:docid:photoshop:…`. Forty-seven other files have a `DerivedFrom` pointing
at an `xmp.did:` value, which is an image instance id, not a document.

**26. Filename words — AGREE on the numbers, DISAGREE on the stated rule.**
The counts are right: autumn 29, winter 26, summer 26, spring 20, update 9,
ancient 7, smooth 3, elder 1, over 86 pieces. The typos are right too: `gltich`
on #9 and #73, `raindow` on #128.

The rule as written does not produce them. "Seed-list words that are not a trait
value anywhere in the collection" would drop **autumn** (it is #126's Essence),
**ancient** (#69's Essence) and **elder** (#505's Essence), leaving five words
over 66 pieces. I reproduced the site's 86 pieces and 8 words exactly only by
excluding words that appear as a **GANg, SubType or Type** value anywhere, plus
words in the piece's own metadata. Essence values are not excluded
collection-wide. The rule needs restating to say that.

**27. Filename marks — AGREE.**
`s_` appears on exactly #4, #9, #16, #25, #36, #49, #64, #81, #100: the nine
square-numbered skulls that take letter `c`. #121 is the tenth such square and
its file `121_twin_smoke.gif` carries no mark. `smooth` appears only on #5, #13
and #89. Primordial is written `ancient` on #1, #7, #28, #44, #46, #78, #100,
#112 and `elder` on #16.

### 2f. Burns and transfers

**28. Thirty bitGANs in the burn wallet — AGREE.**
The wallet holds 32 ERC-1155 tokens. Thirty are bitGANs: #2, 9, 11, 20, 32, 33,
49, 66, 69, 74, 86, 87, 95, 111, 117, 123, 125, 135, 138, 144, 149, 153, 168,
194, 198, 204, 205, 206, 207, 208. The other two are "reneGANs 0110 - Cyber
roboGANs" and "Noun GAN Study (3/63)". #32 and #95 arrived in one transaction on
14 October 2021; #11, #20, #49 and #74 arrived in one transaction on 29 October
2021; #205 to #208 arrived in four separate transactions inside block 13425943.

**29. First transfer out of Pindar's wallet — AGREE.**
299 in 2021; 147 between the sheet (31 Jan 2022 19:42 UTC) and the clue (5 Feb);
one in January 2022 before the sheet (#272, on 4 January); #445 on 5 February
2022 at 11:12:14 UTC into `0x18f87ec9…478d`; one between February and August
(#453, on 14 August 2022); and 63 between 24 and 29 August 2022, which includes
all fourteen odd-numbered Review pieces and #512. That is 512 exactly.

**30. The ArDrive timeline — AGREE, with two small precisions.**
Archives 01 to 04 were uploaded on 1 January 2022. The sheet's own
`lastModifiedDate` is 31 January 2022 19:42:43 UTC. Its Arweave transaction was
signed at 19:48:56 and mined at 19:51:04, so "uploaded 19:51" is the mined time;
worth saying which, because the nine-minute gap is the kind of thing a reader
will otherwise trip over. The ghost and review archives went up on 31 January
(12:54 and 13:39). Journal page 015 was captured at 20:05:57 and mined at
20:12:45 under transaction `LvwCpQp6ctt-wRCG5eU4KR_j5-jHDjpAj_ugwoPgc5o`. There
is exactly one CSV in the drive and exactly one revision of it, so no earlier
sheet exists there.

On the modification check: in both 31 January archives every zip entry time
equals the file's Photoshop save time at UTC−6, to within one to three seconds,
**except #467, #468 and #469**, whose entries are stamped 1 January 2022 03:17
against October 2021 saves. That is exactly as claimed. The precision to add is
that the **solstice archive behaves the same way** — all 92 of its entry times
also match their save times at UTC−6 — so this is not a property unique to the
31 January uploads. Archives 01, 02 and 03 do not: they carry a single bulk
stamp.

One more observation about the drive, not claimed anywhere. **Seventeen ghost
GIFs were uploaded twice**, as separate ArDrive file entities with separate
File-Ids and separate data transactions: #307, 308, 309, 311, 312, 313, 315, 316,
317, 329, 336, 337, 338, 340, 341, 342, 344. The first batch went up around
15:16–15:21 on 31 January, the second around 18:45–18:53. I downloaded both
copies of all seventeen and every pair is byte-identical, and identical to the
archive copy. It looks like a re-upload, not a variant, but it means the drive
holds 161 loose ghost files for 144 pieces.

### 2g. Published traits and essences

**31. The ten colour words are each an essence exactly once — AGREE, with a
caveat about "the ten".**
black #262, blue #189, brown #378, gold #196, green #419, olive #174, orange
#164, pink #166, silver #145, yellow #338. Each appears exactly once.

The caveat: these are the ten basic colour terms on the list, not the only colour
words on it. BIP-39 also contains bronze, copper, coral, cream, ivory, lemon,
rose, salmon, sand and snow. **bronze is the essence of #493.** If the tag is
meant to capture "colour word", it is under-inclusive; if it means "basic colour
term", the description should say so.

**32. Essences out of sequence — AGREE.**
I computed the longest increasing run of wordlist indices in each drop. In the
skulls the run is 126 of 128 and the two outside it are **#21 bean** and **#57
mistake**. In the solstice drop the run is 90 of 92 and the two outside it are
**#259 bless** and **#268 bird**. The tag membership on the site is correct
(21, 57, 259, 268), but the tag's own **description says "#260 birth"** where it
should say "#259 bless". #260 only looks wrong because #259 sits above it; remove
#259 and the run is clean.

**33. Three essences are not plain lowercase seed words — AGREE.**
#191 `err0r` with a zero, #363 `TRUE`, #473 `FALSE`.

**34. 38 named pieces, 18 with a seed word — AGREE.**
Both figures reproduce exactly, and the site's membership for both tags matches
mine piece for piece.

## 3. The tag system

**35. Chain, File and Number tags have the predicted membership — AGREE with one
exception.**
I rebuilt the membership of every tag in those three groups from my own
measurements and compared sets. All 39 chain tags, all 48 file tags and all 22
number tags match exactly, piece for piece, with the single exception of
`chain:description_anomaly`, which should have 15 members rather than 7 (see
claim 14).

As a side benefit I also checked all 102 published trait tags against the sheet,
and every one is exact.

**36. Tag descriptions state a re-derivable rule — mostly, with six to fix.**

1. `published:essence_out_of_sequence` names "#260 birth" and should name "#259
   bless". Its membership is already right.
2. `file:filename_word:*` states the exclusion as "not a trait value anywhere in
   the collection". As written that rule gives 66 pieces and five words, not the
   86 and eight the tag actually holds. It must say GANg, SubType and Type
   values, not Essence.
3. `visual:naga_palindrome` says "Palindrome name, palindromic binary position…
   Eight robots", but the tag has **nine** members. The ninth is **#130**, the
   qubitGAN at binary position `000001`, which is neither a palindrome name nor a
   palindromic position, and which carries HiddenType `A` (Fibonacci), not F.
   Either the membership or the description is wrong.
4. `visual:fib_full_reverse` says "Eleven robots", but one of its eleven members,
   **#287**, is a solstice piece. Ten robots and one solstice piece.
5. `visual:entangled` says "Pindar's own 'Entangled' set of fifteen" and holds
   seventeen. The sheet has **sixteen** pieces with SubType Entangled; fifteen of
   them are tagged, **#235 is not**, and **#100 and #225** are tagged without the
   SubType. None of that is derivable from the description.
6. `chain:name_error_names` has one member (#404) but its description offers
   three examples — err0r, Not Found, Dog God. err0r is an essence (#191) and Dog
   God is a name (#159), and neither carries the tag.

Two smaller ones. `chain:sheet_chain_any` gives the four sub-counts 13, 7, 3 and
4 without noting they overlap on #66, so they sum to 27 over 26 pieces.
`number:prime_position_glitch` says the rule holds "in the skull and robo drops",
but all fifteen members are robos; the skull side of the rule lives in
`number:prime_rule_exception` (#5 and #47) and a reader cannot see that from
either description.

**37. No two tags share a meaning — four pairs to look at.**

- `file:filename_smooth` and `file:filename_word:smooth`: same three pieces, same
  fact, two tags.
- `file:filename_primordial:elder` and `file:filename_word:elder`: same one
  piece, same fact. (The `ancient` pair is not duplicative — it splits 8 against
  7 because #44's own title contains the word.)
- `number:hiddentype_meaning:palindrome` and `number:hiddentype_palindrome`: the
  same eight pieces and the same statement.
- `chain:substitution_art` and `visual:name_describes_visual`: the same seven
  pieces today. The visual tag's description says it is "wider", and the collector
  is still adjudicating, so this one is deliberate — but until that work lands a
  reader sees two identical sets.

There is also a family effect worth a decision: `visual:creature:whale`, `blob`,
`spirit` and `shark` are each exactly co-extensive with `gang:whaleGAN`,
`blobGAN`, `spiritGAN` and `sharkGAN`, and `cat`, `rat` and `sprite` with
`type:Rotator`, `type:Reviver` and `type:Sprite`. These are single-piece tags
restating a published trait as an eye observation.

**38. Evidence lines are consistent with their tags — AGREE, with two
exceptions.**
I did this mechanically rather than by sampling: for all 512 cards I re-derived
the mint slot, both number classes, the HiddenType letter, the first-transfer
timestamp, the archive filename, the frame count, the save time, the Photoshop
build and the session index and size, and compared each against the evidence
string. Two mismatches came out, and both are about #390's double mint, described
under claim 15. I also read all 26 sheet-versus-chain evidence lines: each shows
both values and which side is rarer, and each matches my own diff.

The two real problems are not in that mechanical set:

- **#142's evidence line is factually wrong.** It reads "sits at binary position
  13 in its name — a PRIME number that is NOT Fibonacci". 13 **is** a Fibonacci
  number. The tag's own description is careful about this and calls #142 out as a
  flagged question; the card contradicts it.
- **#58's evidence line** ("Type: Glitch (sheet) · Rainbow (chain)") does not
  convey that the chain record has a duplicated `Type` key holding both values
  and no `SubType` key at all.

**39. Visual descriptors are internally consistent — three exceptions.**
I did not re-adjudicate any visual judgement. Checking only for internal
consistency and for data claims a visual tag cannot make, three fail: the naga
palindrome, fib_full_reverse and entangled tags described under claim 36. The
naga one is the serious case, because "palindromic binary position" and
"palindrome name" are both data facts and both are false for #130.

For contrast, `visual:bg_dotted` is a good example of the pattern working: its
description claims "every spaceGAN plus the Lunar skullGAN #300", and its
seventeen members are exactly the sixteen pieces with GANg `spaceGAN` plus #300.

## Things we found that are not tagged or claimed

1. **Piece #251's GIF is missing from our media server** (404). Everything else
   serves.
2. **Eight more on-chain description defects**: #272, #301, #302, #303, #304,
   #305, #306, #400. Details under claim 14. Three distinct defect types are in
   there — a changed noun ("the Colors", "this Image"), a truncated opening, and
   injected tab characters — and none of them is currently in the anomaly ledger.
3. **Three archive filename defects**: the five-digit binary on `14_00110.gif`
   (#143), the unpadded `49_s_flaming_smoke.gif` (#49), and the double underscore
   on `449__reprise00.gif` (#449). `file:filename_typo` covers only misspellings,
   so these have nowhere to live.
4. **Seventeen ghost GIFs were uploaded to ArDrive twice** (claim 30). All pairs
   are byte-identical.
5. **The two mints of #390 are not the same record.** One has all seven traits
   and no external link; the other has no traits and an external link to the
   piece's Arweave GIF.
6. **A second ArDrive exists**, `noungans`, drive id
   `e9723b32-dda2-4138-bca0-5842cd6f4e37`, holding `nounganziptest.zip` and one
   loose GIF. The brief's source table lists `noungans` as a folder inside the
   bitGAN drive; it is not.
7. **#272's appended Arweave link points somewhere else.** Every other piece that
   carries an archive link points at `LvwCpQp6…`, the Act 1 capture. #272 points
   at `Tn-2Uclzan8-VqcitD9pfnYpRPRCjX8RoE4h3wKnCng`.
8. **bronze is a colour word on the BIP-39 list and is the essence of #493.**
   Whether that belongs with the ten is a judgement, but the current description
   does not let a reader make it.

## Two notes for whoever reproduces this

Blockscout's cached token metadata is incomplete and silently so. Use the
OpenSea metadata endpoint that `tokenURI` resolves to.

The brief's gateway advice needs updating, and gateways need verifying.
`arweave.net` served the 95 MB archive whole at 6 MB/s but returned HTTP 502 on
every larger one. `ar-io.dev` served ranged requests free at 8 MB/s and was the
fastest of the four I tried, though it did return HTTP 402 Payment Required on
one individual transaction, so the brief's warning is right per-transaction
rather than across the board. `permagate.io` timed out on everything I asked for.
Chunked ranged downloads across `ar-io.dev` and `arweave.fllstck.dev` fetched all
3.5 GB with no bad chunk.

Verify what a gateway hands back. `arweave.fllstck.dev` returned an HTTP 200 with
a one-byte body for one transaction, which would have read as a byte mismatch if
I had not checked the length against the ArDrive metadata.
