← Parallax Metrology · Credit & provenance

Take It Out · labbook

An exact, owner-labelled generator and an instrument for taking a source out.

Built 2026-10-14 17:42 UTC from the project's result files by labbook/build_labbook.py (870ea564e602).

1. What we are doing

A generator whose every output pixel is an exact, owner-labelled blend of training pixels, and an instrument around it that lets the viewer take a source out and watch the picture change. The viewer brings a drawing, generates from a small owned corpus (six public-domain artists plus a museum pool), reads the receipt, switches any artist or sheet off, and regenerates with the same noise. The instrument shows the difference map and pays contributors three ways side by side: by use (what the receipt says was copied), by leave-one-out (what changed when that one source was removed), and by Shapley (average change over all orders of removal). The viewer's own drawing is its own line in the receipt, because it steers the output more than any corpus source.

Working name: Take It Out.

Source: BRIEF.md (sections 0 and 1), read at build time.

2. Status

ItemWhatStateNote
M0Brief, log, source registrydoneBRIEF.md, LOG.md
M1Engine port, float64 reference, testsdone: 51/51 tests passreconciled with Riley's repository, 2026-10-01 (measure/riley_reconcile.py)
M2Corpus, dedupe, paper decision, controls, commons verified, paid-artist works excludeddonepaper verdict: NOT OVER-CREDITED: no policy
O12Marks resolved at the demo scalepixel criterion: failed for all 6 crops (area-weighted; design error); edge criterion: passed for 64 px marksgates everything shown to others
Commons licenceMet records matched by image filename99/99 matchednot public domain: 0
M3Removal instrument, exact artist Shapleyfirst run done: checks hold; 6 of 10 predictions holdconstant control earned 3 to 7%
M4The viewer's drawing as a paid partyD1, D3 hold; D2, D4 failthe drawing out-earns every artist even at low strength; post hoc: mostly for its paper tone
T0FIXRemove the t = 1 head-count vote (schedule S1)all 6 predictions hold; K2 held in float64: S1 adoptedconstant control 0 to 0.36%
M5Speed and 64 pxmeasured: certified pruning 1.05 to 1.10x (oracle 1.4x); 64 px 13x the 32 px costpruning retired as the speed lever; larger receipts precomputed
M6, M6bPage, receipts, verifierreceipts format 3 (context, planted controls); verifier V1 to V7; tamper suite 8/8paid receipts on the 86-pool: controls pass 4/4 (10-pool demo: 2 of 4 fail)
O6Cost by resolution and pool sizemeasured 2026-10-02: 32 px 11 to 21 s per picture (pool 10 to 86), 64 px 148 to 258 s; 1.1 / 2.2 GBmeasure/o6_cost.json
SPLITDrawing as paper and linesL1 to L3 holdsplitting a party moves others' pay; split is description only
POOLUse vs Shapley gap by pool sizeP1, P3 hold; P2 failsuse and leave-one-out err in opposite directions
ATTN1, ATTN2Stage-two attention testsATTN1 Q1, Q3 hold, Q2 fails; ATTN2 all holdglobal attention copies; frozen-attention receipts differ from the exact posterior
O9Runs elsewhereColab T4: receipt replay 0.005 of tolerance; payouts within 6e-7T3 float32 now reported, not pass/fail
O7Bridge to trained networksdone 2026-10-02: gate r 0.970; direction holds (p = 1/720); size and visibility failreplication with a second start seed open
O10Planted controls visiblein every receipt and on the page
O11Stranger testnot run (needs three people)script: STRANGER_TEST.md

3. Engine

The generator is the patch-ledger ELS machine (Kamb and Ganguli 2025), ported with provenance and extended: explicit device and dtype, a true float64 CPU reference, float64 schedule arithmetic, an exact class sub-ledger and class removal. Every output pixel is an exact convex combination of training pixels, decomposed by owner: m(x) = Σc Wc(x) mc(x), Σc Wc(x) = 1.

Test run

51/51 passed in 13.2 s · torch 2.12.0.dev20260315 · backends cpu/float64, mps/float32 · engine/tests/last_run.json sha256 3b97fdf3f565

TestDetail
PASST1 [cpu/float64] binary pixelsmax |(|x|-1)| = 3.43e-13
PASST1 [cpu/float64] local majority consistency >= 0.99fraction = 0.9948
PASST1 [cpu/float64] novel (not a training image)8/8 samples are mixed mosaics
PASST2 [cpu/float64] ideal score memorisesmax distance to nearest training image 0.00e+00
PASST3 [cpu/float64] output = sum_c W_c m_cmax err 0.00e+00
PASST3 [cpu/float64] masses sum to 1 at every stepworst 1.92e-14
PASST4 [cpu/float64] brute-force match els abar=0.3 P=5output err 2.9e-15, mass err 3.7e-15
PASST4 [cpu/float64] brute-force match els abar=0.9 P=3output err 7.0e-15, mass err 6.0e-15
PASST4 [cpu/float64] brute-force match ls abar=0.3 P=5output err 3.1e-15, mass err 3.6e-15
PASST4 [cpu/float64] brute-force match ls abar=0.9 P=3output err 9.8e-15, mass err 1.2e-14
PASST4 [cpu/float64] brute-force match is abar=0.3 P=5output err 5.9e-15, mass err 1.6e-15
PASST4 [cpu/float64] brute-force match is abar=0.9 P=3output err 1.5e-14, mass err 1.2e-41
PASST5 [cpu/float64] duplicate == original at prior weight 2max diff 5.22e-15; unduplicated output moves by up to 1.04
PASST5 [cpu/float64] duplicate splits mass exactlymax |W_orig - W_copy| 0.00e+00
PASST6 [cpu/float64] Theorem B.3 approached under step refinementpixels at nearest-patch centre: 0.695 (50) -> 0.823 (400)
PASST7 [cpu/float64] coalition mask == removing contributorsmax diff 0.00e+00; mass on absent contributors 0.0e+00
PASST1 [mps/float32] binary pixelsmax |(|x|-1)| = 8.89e-04
PASST1 [mps/float32] local majority consistency >= 0.99fraction = 0.9948
PASST1 [mps/float32] novel (not a training image)8/8 samples are mixed mosaics
PASST2 [mps/float32] ideal score memorisesmax distance to nearest training image 0.00e+00
PASST3 [mps/float32] output = sum_c W_c m_cmax err 0.00e+00
PASST4 [mps/float32] brute-force match els abar=0.3 P=5output err 1.8e-06, mass err 1.3e-06
PASST4 [mps/float32] brute-force match els abar=0.9 P=3output err 3.4e-06, mass err 3.7e-06
PASST4 [mps/float32] brute-force match ls abar=0.3 P=5output err 1.5e-06, mass err 1.6e-06
PASST4 [mps/float32] brute-force match ls abar=0.9 P=3output err 2.9e-06, mass err 4.1e-06
PASST4 [mps/float32] brute-force match is abar=0.3 P=5output err 1.9e-06, mass err 1.3e-06
PASST4 [mps/float32] brute-force match is abar=0.9 P=3output err 6.0e-08, mass err 2.7e-33
PASST5 [mps/float32] duplicate == original at prior weight 2max diff 2.74e-06; unduplicated output moves by up to 1.04
PASST5 [mps/float32] duplicate splits mass exactlymax |W_orig - W_copy| 0.00e+00
PASST6 [mps/float32] Theorem B.3 approached under step refinementpixels at nearest-patch centre: 0.695 (50) -> 0.823 (400)
PASST7 [mps/float32] coalition mask == removing contributorsmax diff 0.00e+00; mass on absent contributors 0.0e+00
PASSN1 float64 reference keeps float64 end to enddtypes ['torch.float64']
PASSN1 float64 reference matches brute force to 1e-12max err 6.4e-15
PASSN2 exact removal is bit-for-bit on CPU float64 (O2)0 differing values; max diff 0.0e+00
PASSN3 [cpu/float64] same noise twice gives identical output and ledger0 output values and 0 mass values differ; max diff 0.0e+00
PASSN3 [mps/float32] same noise twice gives identical output and ledger0 output values and 0 mass values differ; max diff 0.0e+00
PASSN4 [mps/float32] agrees with the CPU float64 reference (<= 1% of values off by > 1e-3)max 2.3e-03, median 0.0e+00, fraction > 1e-3: 0.0013
PASSN5 port == ORIGINAL bit for bit on mps given the same schedule arithmetic0 output and 0 mass values differ; unpatched (float32 schedule) mass gap 2.0e-04
PASSN6 empty coalition raisesa coalition has no present contributor with images; its output is unde
PASSN7 Riley's weights == Kamb-Ganguli weights after rescaling (BRIEF 6.2)max diff 2.6e-15
PASSN8 [cpu/float64] class ledger and removal match brute force abar=0.3 P=5 drop=()max err 3.6e-15
PASSN8 [cpu/float64] class ledger and removal match brute force abar=0.9 P=3 drop=()max err 1.7e-14
PASSN8 [cpu/float64] class ledger and removal match brute force abar=0.5 P=3 drop=(0,)max err 1.8e-15
PASSN8 [cpu/float64] class ledger and removal match brute force abar=0.7 P=5 drop=(1,)max err 8.2e-15
PASSN8 [mps/float32] class ledger and removal match brute force abar=0.3 P=5 drop=()max err 1.9e-06
PASSN8 [mps/float32] class ledger and removal match brute force abar=0.9 P=3 drop=()max err 7.2e-06
PASSN8 [mps/float32] class ledger and removal match brute force abar=0.5 P=3 drop=(0,)max err 9.3e-07
PASSN8 [mps/float32] class ledger and removal match brute force abar=0.7 P=5 drop=(1,)max err 3.6e-06
PASSN9 [cpu/float64] class masses sum to contributor mass; tracking classes changes nothingsum err 6.1e-15; 0 output values differ
PASSN9 [mps/float32] class masses sum to contributor mass; tracking classes changes nothingsum err 1.7e-06; 0 output values differ
PASSN10 removing every candidate raisessome output pixel has no allowed training patch (every candi

Measurements recorded by the tests

MeasurementValue
T4 worst error cpu/float641.50e-14
T3_float32_mass_sum_error_mps/float325.25e-06
T4 worst error mps/float324.07e-06
N1 float64 brute-force error6.44e-15
N2 removal max diff cpu float640.000
N3 run-to-run differing output values cpu/float640
N3 run-to-run max diff cpu/float640.000
N3 run-to-run differing output values mps/float320
N3 run-to-run max diff mps/float320.000
N4 mps/float32 vs cpu/float64: output max diff0.002
N4 mps/float32 vs cpu/float64: output median diff0.000
N4 mps/float32 vs cpu/float64: fraction of values off by > 1e-30.001
N4 mps/float32 vs cpu/float64: final mass max diff0.002
N5 float32 schedule rounding alone: output max diff2.74e-06
N5 float32 schedule rounding alone: mass max diff1.95e-04
N8 class ledger float64 brute-force error1.73e-14

Cost of one exact 32 px generation

milliseconds per training image per generation (20 steps, ledger kept)mps_float32 · 64 images39.890 msmps_float32 · 256 images38.530 msmps_float32 · 436 images39.110 mscpu_float64 · 16 images109.130 mscpu_float64 · 64 images107.820 ms

Provenance of the ported code

Provenance of ORIGINAL/

Verbatim copies, never edited. Copied 2026-09-30T10:49:16Z from the earlier patch-ledger project.

filesha256
pl/__init__.pye3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
pl/machine.py2ee175aa061da6dc30fe932f9415ba7219f109b84c7f390493e08540c8b6e4b4
pl/corpus.py0dea3aaedcc892e93a34bd3be92e801e3dc6be5824349b0099c23317ee98836b
tests/test_machine.pyba583f25d321720c6f79a8c9fcdd9b4826d8f30bbceff4f914e594f790e7554b

Source hashes at copy time (must match):

4. Corpus

GroupSourcesLicence statusLicences
Cézanne15recorded from museum or Commons metadata by the hands corpus buildPublic domain (NGA Open Access, via Wikimedia Commons) (15)
Dürer13recorded from museum or Commons metadata by the hands corpus buildCC0 (Met Open Access) (7)
Public domain (PD-Art, via Wikimedia Commons) (4)
CC0 (AIC public domain) (1)
CC0 (Cleveland Open Access) (1)
Ingres20recorded from museum or Commons metadata by the hands corpus buildCC0 (Met Open Access) (14)
CC0 (NGA Open Access) (3)
CC0 (AIC public domain) (2)
CC0 (Cleveland Open Access) (1)
Kollwitz20recorded from museum or Commons metadata by the hands corpus buildPublic domain (Rijksmuseum) (11)
Public domain (Mia) (5)
Public domain (SMK open) (2)
CC0 (NGA Open Access) (1)
CC0 (Cleveland Open Access) (1)
Rembrandt12recorded from museum or Commons metadata by the hands corpus buildPublic domain (Rijksmuseum) (8)
CC0 (Met Open Access) (3)
CC0 (Cleveland Open Access) (1)
Van Gogh16recorded from museum or Commons metadata by the hands corpus buildPublic domain (PD-Art, via Wikimedia Commons) (7)
CC0 (AIC public domain) (4)
Public domain (Rijksmuseum) (3)
CC0 (Met Open Access) (2)
commons100verified after the build against Met object records: 99 matched, 0 not public domain (corpus/met_verification.json; the manifest keeps its build-time wording)Met Open Access assumed (100)
msv9work public domain; image source not recordedpublic domain by age (Cézanne d. 1906) (9)
CONTROL-duplicate1planted controlverbatim copy of du-01
CONTROL-scrambled1planted controlvg-01 with pixel positions permuted, numpy default_rng(7)
CONTROL-constant1planted controlconstant 4.0, outside the data range [-1, 1]

Rules

Build the Take It Out corpus (BRIEF.md M2).

Sources (read only, never edited):
  six artists   96 cleaned sheets from the hands books (five in hands/books, Rembrandt in know-between's book);
                metadata and licence from each book's things.json (museum-API or Commons records)
  commons       100 Met images in ZTOYBOX/Museum Pics named DP-*/DT-*.jpeg (Met image IDs). Verified afterwards against
                Met object records by corpus/verify_met.py (99 matched, all public domain; 1 duplicate download)
  msv           9 Cezanne Mont Sainte-Victoire paintings (Cezanne/CezanneReal; public domain by age;
                image source not recorded)

Rules (declared, deterministic):
  sheet crop    Book sheets still show the museum mount around the paper. Marks are pixels darker than the sheet's
                paper tone: the dark class of Otsu's two-class luminance split (guarded). The crop is the 1st to 99th percentile box of mark
                coordinates on each axis, grown by 2% of the image size and clipped. Paintings (commons, msv) are not
                cropped.
  views         As in patch-ledger (pl/corpus.py): from the crop, the centred square of its short side resized to a
                256 px master; view 0 is the master; views 1-3 are 128 px squares at positions drawn from
                numpy default_rng(crc32(id)); each view is resized to L (LANCZOS). Stored in [-1, 1].
  mark maps     The same crop and view geometry applied to the mark mask gives, per view and L, the fraction of each
                pixel covered by marks (for the blank-paper measurement).
  controls      CONTROL-duplicate: a verbatim copy of sheet du-01's views, a separate owner.
                CONTROL-scrambled: vg-01's views with pixel positions permuted (seed 7), colours kept, structure gone.
                CONTROL-constant: 4 constant images at value 4.0, outside the data range. At t = 1 the posterior is
                uniform over all patches, so every source touches every output at the first step; this control's
                influence is predicted to be that first-step share and essentially nothing after.

Sheet view profiles (paintings and the commons always use "half"):
  half          the patch-ledger rule above (view 0 = short-side square; views 1-3 = seeded half-side squares)
  marks64       the demo profile, chosen by the O12 tests (LOG.md 2026-09-30): 4 squares of side 64 source pixels
                (of the 1200 px book image), centres drawn inside the sheet crop box with probability proportional to
                the mark mask, from numpy default_rng(crc32("<id>|64|marks")); each resized to L. A declared choice
                that favours where the artist drew; stated on every receipt.

Outputs: corpus/build/L<res>/<id>.npy (half views, float32), <id>.marks.npy (mark fraction);
corpus/build/marks64/L<res>/<id>.npy and .marks.npy for sheets and controls; manifest.json; a contact sheet.
Run: python3 corpus/build_corpus.py

Every source, view 0 at 64 px

Contact sheet: six artists' sheets (rows 1 to 6), then the Met commons, then Mont Sainte-Victoire
Contact sheet: six artists' sheets (rows 1 to 6), then the Met commons, then Mont Sainte-Victoire corpus/contact_L64.png · sha256 a97d749a925c

Mark detection

fraction of each sheet (after crop) that is marks, by artist (Otsu split)00.20.390.590.790.99Cézanne0.1310.0360.1030.1680.1820.1660.1960.2120.1690.1760.0990.0690.0820.2050.100Dürer0.1150.1220.2060.0570.2440.0540.0700.1190.0980.1770.2030.3580.119Ingres0.1140.0900.0480.1040.0700.1040.1490.1300.1290.0780.0790.1050.0810.0860.0730.1050.0500.1200.1960.145Kollwitz0.8110.8970.6960.8700.7440.3550.5970.2850.4640.3590.5650.5880.2790.2780.3520.2730.2490.5280.4330.640Rembrandt0.1700.2160.5670.2060.2530.2460.2770.1830.2100.1560.3110.240Van Gogh0.7610.4740.4910.4290.3040.2460.1880.3330.4150.3220.4620.5860.3480.6110.3200.149
Top: view 0. Bottom: mark mask (black = mark). Faintest graphite (cz-02, in-17), typical pen (du-01, rb-06), darkest lithographs (kk-02, kk-12), Van Gogh (vg-01, vg-16)
Top: view 0. Bottom: mark mask (black = mark). Faintest graphite (cz-02, in-17), typical pen (du-01, rb-06), darkest lithographs (kk-02, kk-12), Van Gogh (vg-01, vg-16) corpus/mask_check.png · sha256 dd63a36e44f9

5. Source IDs and verification

Every source with its identifiers. Sheets: licence and accession recorded from museum or Commons metadata when the hands corpus was built. Commons: matched to Met object records by exact image filename (corpus/verify_met.py); unmatched files stay unverified. The last column is the first 10 hex digits of the source file's SHA-256.

Met verification (scope: cache only), 6615 object records: 99 files matched, 1 duplicate download(s), 0 unmatched, 0 matched but not public domain.

IDGroupTitleIdentifierLicenceStatusRecordFile
cz-01CézanneLandscape Near Aix-en-Provence
1877–1880
National Gallery of Art, Washington · 1992.51.9.dPublic domain (NGA Open Access, via Wikimedia Commons)recordedrecord2c6af99a78
cz-02CézanneKerosene Lamp
1878–1881
National Gallery of Art, Washington · 1992.51.9.jPublic domain (NGA Open Access, via Wikimedia Commons)recordedrecord65b48cddbf
cz-03CézanneStudy of Houses
1879–1882
National Gallery of Art, Washington · 1992.51.9.ePublic domain (NGA Open Access, via Wikimedia Commons)recordedrecordd980c3cbe9
cz-04CézanneStudy of "Venus de Milo"
1881–1884
National Gallery of Art, Washington · 1992.51.9.pppPublic domain (NGA Open Access, via Wikimedia Commons)recordedrecorddc31fb6889
cz-05CézannePine Tree
1882–1885
National Gallery of Art, Washington · 1992.51.9.iiPublic domain (NGA Open Access, via Wikimedia Commons)recordedrecord97fc634e3f
cz-06CézanneNear the Pool at Jas de Bouffan
1883–1887
National Gallery of Art, Washington · 1992.51.9.eeePublic domain (NGA Open Access, via Wikimedia Commons)recordedrecorde4d5a30c64
cz-07CézanneTrees and Shrubs
1883–1887
National Gallery of Art, Washington · 1992.51.9.rrrPublic domain (NGA Open Access, via Wikimedia Commons)recordedrecordace4a4f96f
cz-08CézanneMadame Cézanne
1886–1889
National Gallery of Art, Washington · 1992.51.9.lPublic domain (NGA Open Access, via Wikimedia Commons)recordedrecord869ae59734
cz-09CézanneBellows in Front of a Fireplace
1887–1892
National Gallery of Art, Washington · 1992.51.9.wPublic domain (NGA Open Access, via Wikimedia Commons)recordedrecord5db2f66282
cz-10CézanneHead of the Artist's Son
1888–1889
National Gallery of Art, Washington · 1992.51.9.ggPublic domain (NGA Open Access, via Wikimedia Commons)recordedrecord7f4390811e
cz-11CézanneThe Plaster Mill (La Moulin à plâtre)
1889–1892
National Gallery of Art, Washington · 1992.51.9.aPublic domain (NGA Open Access, via Wikimedia Commons)recordedrecord4d8bd97a99
cz-12CézanneHouse Surrounded by Vegetation
1889–1892
National Gallery of Art, Washington · 1992.51.9.cccPublic domain (NGA Open Access, via Wikimedia Commons)recordedrecordd9081ee8d0
cz-13CézanneSelf-Portrait
c. 1895
National Gallery of Art, Washington · 1992.51.9.mPublic domain (NGA Open Access, via Wikimedia Commons)recordedrecord781993a775
cz-14CézanneStudy of Puget's "Milo of Crotona"
1895–1898
National Gallery of Art, Washington · 1992.51.9.bPublic domain (NGA Open Access, via Wikimedia Commons)recordedrecord3b65590822
cz-15CézanneLandscape with Trees
1895–1898
National Gallery of Art, Washington · 1992.51.9.fPublic domain (NGA Open Access, via Wikimedia Commons)recordedrecordbd1f47d78c
du-01DürerSelf-portrait, Study of a Hand and a Pillow (recto); Six Studies of Pillows (verso)
1493
The Metropolitan Museum of Art · 1975.1.862CC0 (Met Open Access)recordedrecordb5b145bc23
du-02DürerMy Agnes (Agnes Dürer)
1494
Albertina, Vienna · 3063Public domain (PD-Art, via Wikimedia Commons)recordedrecorddb2e7d7a0c
du-03DürerYoung Bull
c. 1496
Art Institute of Chicago · 1965.408CC0 (AIC public domain)recordedrecord8bcd8d2dd0
du-04DürerFemale Nude Praying
1497/1500
National Gallery of Art, Washington · 1999.31.1Public domain (PD-Art, via Wikimedia Commons)recordedrecord83e4af9441
du-05DürerFortuna in a Niche
1498
The Metropolitan Museum of Art · 1975.1.861CC0 (Met Open Access)recordedrecord7a52960d84
du-06DürerMale Nude Holding a Mirror
c. 1500
National Gallery of Art, Washington · 1991.182.11.aPublic domain (PD-Art, via Wikimedia Commons)recordedrecord10a9245431
du-07DürerMale Nude with a Lion
c. 1500
National Gallery of Art, Washington · 1991.182.11.bPublic domain (PD-Art, via Wikimedia Commons)recordedrecordf6e33d2916
du-08DürerStanding Male Nude Holding a Bow ("Poynter Apollo")
1501–3
The Metropolitan Museum of Art · 63.212CC0 (Met Open Access)recordedrecord1e425e6848
du-09DürerThe Holy Family in an Enclosed Garden
1512
The Metropolitan Museum of Art · 1975.1.860CC0 (Met Open Access)recordedrecorda87ad7c374
du-10DürerAscension of Christ
c. 1515
Cleveland Museum of Art · 1952.530CC0 (Cleveland Open Access)recordedrecordc9e012fde7
du-11DürerMusic-Making Angels
1521
The Metropolitan Museum of Art · 61.257CC0 (Met Open Access)recordedrecord780f477362
du-12DürerKnight on Horseback and Landsknecht
1485–1528
The Metropolitan Museum of Art · 47.100.1283CC0 (Met Open Access)recordedrecord2079553d76
du-13DürerSaint Catherine of Alexandria
1490–1528
The Metropolitan Museum of Art · 19.75CC0 (Met Open Access)recordedrecord011141f355
in-01IngresMadame Guillaume Guillon Lethière, née Marie-Joseph-Honorée Vanzenne, and her son Lucien Lethière
1808
The Metropolitan Museum of Art · 29.100.191CC0 (Met Open Access)recordedrecorda62b2433a6
in-02IngresCharles François Mallet, Civil Engineer
1809
Art Institute of Chicago · 1938.166CC0 (AIC public domain)recordedrecord80b92826be
in-03IngresPortrait of a Man
1814
The Metropolitan Museum of Art · 19.125.1CC0 (Met Open Access)recordedrecordb64dc4f1ce
in-04IngresMadame Jean-Auguste-Dominique Ingres, née Madeleine Chapelle
1814
The Metropolitan Museum of Art · 2004.475.2CC0 (Met Open Access)recordedrecord886c71d03c
in-05IngresMadame Alexandre Lethière, née Rosa Meli, and Her Daughter, Letizia
1815
The Metropolitan Museum of Art · 2012.150.10CC0 (Met Open Access)recordedrecordd843be389d
in-06IngresLady Mary Cavendish-Bentinck (?-1843)
1816
The Metropolitan Museum of Art · 43.85.6CC0 (Met Open Access)recordedrecorddcb693c0f9
in-07IngresMrs. Charles Badham
1816
National Gallery of Art, Washington · 1991.217.20CC0 (NGA Open Access)recordedrecorde85b3868de
in-08IngresThe Kaunitz Sisters (Leopoldine, Caroline, and Ferdinandine)
1818
The Metropolitan Museum of Art · 1998.21CC0 (Met Open Access)recordedrecord7b656cbf92
in-09IngresGeneral Louis-Étienne Dulong de Rosnay
1818
The Metropolitan Museum of Art · 2012.150.9CC0 (Met Open Access)recordedrecord6b4f739ea5
in-10IngresUrsin-Jules Vatinelle (1798–1881)
1820
The Metropolitan Museum of Art · 43.85.9CC0 (Met Open Access)recordedrecordfbd3e8feed
in-11IngresSelf-Portrait
1822
National Gallery of Art, Washington · 1995.47.51CC0 (NGA Open Access)recordedrecord14666d2c8c
in-12IngresMadame Désiré Raoul-Rochette
1830
Cleveland Museum of Art · 1927.437CC0 (Cleveland Open Access)recordedrecord267174e39a
in-13IngresThe Lawyer Paul Grand
1834
The Metropolitan Museum of Art · 2012.150.11CC0 (Met Open Access)recordedrecord8195e88a14
in-14IngresThe Architect Charles-Victor Famin
1836
The Metropolitan Museum of Art · 2012.150.15CC0 (Met Open Access)recordedrecord4c423304d6
in-15IngresCharles Gounod
1841
Art Institute of Chicago · 1964.77CC0 (AIC public domain)recordedrecordaea7b65b2e
in-16IngresMadame Armand Bertin, née Marie-Anne-Cécile Dollfuss
1843
The Metropolitan Museum of Art · 2012.150.14CC0 (Met Open Access)recordedrecordb1b42e18a6
in-17IngresPortrait of Madame Paul Meurice, née Palmyre Granger
ca. 1845–50
The Metropolitan Museum of Art · 2016.20CC0 (Met Open Access)recordedrecord1aa8a98d15
in-18IngresDr. François Mêlier
1849
The Metropolitan Museum of Art · 1975.1.648CC0 (Met Open Access)recordedrecorde1bff4a60c
in-19IngresStudy of Hands for "Christ Among the Doctors"
1852–62
The Metropolitan Museum of Art · 2022.25.11CC0 (Met Open Access)recordedrecordac73ff1b32
in-20IngresHenri Labrouste
1852
National Gallery of Art, Washington · 1995.47.52CC0 (NGA Open Access)recordedrecord9696a631f7
kk-01KollwitzEin Weberaufstand
1897
Rijksmuseum, Amsterdam · RP-P-OB-53.192Public domain (Rijksmuseum)recordedrecord25ead336d0
kk-02KollwitzDe dood haalt een man uit zijn gezin
1897
Rijksmuseum, Amsterdam · RP-P-1947-312Public domain (Rijksmuseum)recordedrecordabdb2faa45
kk-03KollwitzOutbreak (Losbruch), study
1898–1903
Rijksmuseum, Amsterdam · RP-T-1960-79Public domain (Rijksmuseum)recordedrecord151d9927ea
kk-04KollwitzBeratung
1898
Rijksmuseum, Amsterdam · RP-P-1947-313Public domain (Rijksmuseum)recordedrecordd2b8c46ea0
kk-05KollwitzPflugzieher und Weib
1902
Minneapolis Institute of Art · 2016.136.2Public domain (Mia)recordedrecord335682b478
kk-06KollwitzTwo Studies of a Woman's Head
c. 1903
Minneapolis Institute of Art · 71.65Public domain (Mia)recordedrecorda3a8a849ae
kk-07KollwitzMother with Dead Child
1911
Minneapolis Institute of Art · 91.131.2Public domain (Mia)recordedrecord6196e545cf
kk-08KollwitzMutter mit Kind auf dem Arm
1916
SMK, National Gallery of Denmark · KKS14595Public domain (SMK open)recordedrecord805a0991bd
kk-09KollwitzMütter
1919
Rijksmuseum, Amsterdam · RP-P-1954-574Public domain (Rijksmuseum)recordedrecorde7c1b6172b
kk-10KollwitzNachdenkende Frau
1920
Rijksmuseum, Amsterdam · RP-P-1952-120Public domain (Rijksmuseum)recordedrecord45ac92f476
kk-11KollwitzVrouw en de dood
in of na 1923 - in of voor 1924
Rijksmuseum, Amsterdam · RP-P-1974-242Public domain (Rijksmuseum)recordedrecorda514807c05
kk-12KollwitzBeggars
1924
National Gallery of Art, Washington · 1943.3.5219CC0 (NGA Open Access)recordedrecordd9fe011e49
kk-13KollwitzPrisoners Listening to Music
1925
Minneapolis Institute of Art · 2000.283.9Public domain (Mia)recordedrecord5ed9ddf827
kk-14KollwitzPortret van een kind, waarschijnlijk Lotte Nagel
1925
Rijksmuseum, Amsterdam · RP-P-1942-305Public domain (Rijksmuseum)recordedrecorde0f450d938
kk-15KollwitzPregnant Woman Contemplating Suicide
c. 1926
Cleveland Museum of Art · 1962.291.aCC0 (Cleveland Open Access)recordedrecord7b7532e912
kk-16KollwitzZuhörende
1927
Rijksmuseum, Amsterdam · RP-P-1952-481Public domain (Rijksmuseum)recordedrecord4e733ce2f7
kk-17KollwitzZelfportret en profil
in or after 1929 - in or before 1930
Rijksmuseum, Amsterdam · RP-P-1951-310Public domain (Rijksmuseum)recordedrecordb021e02003
kk-18KollwitzSelvportræt
1934
SMK, National Gallery of Denmark · KKS19214Public domain (SMK open)recordedrecordfdb6c85f28
kk-19KollwitzTod
in or after 1934 - in or before 1937
Rijksmuseum, Amsterdam · 8/8Public domain (Rijksmuseum)recordedrecorded834d6456
kk-20KollwitzSelbstbildnis im Profil nach rechts (Self-Portrait in Profile towards Right)
1938
Minneapolis Institute of Art · P.93.25Public domain (Mia)recordedrecord6b0a581741
rb-01RembrandtSeated Actor in the Role of Capitano
c. 1634 - c. 1636
Rijksmuseum, Amsterdam · RP-T-1961-76(R)Public domain (Rijksmuseum)recordedrecordb6dd711427
rb-02RembrandtTwo Studies of a Woman Reading
1635–40
The Metropolitan Museum of Art · 29.100.932CC0 (Met Open Access)recordedrecordd8f0339ca2
rb-03RembrandtA Cow in a Shed
c. 1640
Rijksmuseum, Amsterdam · RP-T-1930-59Public domain (Rijksmuseum)recordedrecorda0b68c4d1b
rb-04RembrandtBoaz and Ruth
c. 1645
Rijksmuseum, Amsterdam · RP-T-1930-9Public domain (Rijksmuseum)recordedrecord59d03d8ba6
rb-05RembrandtThree Orientals Conversing
c. 1645
Rijksmuseum, Amsterdam · RP-T-1930-47Public domain (Rijksmuseum)recordedrecord7a49962f14
rb-06RembrandtCottage with White Paling among Trees
c. 1648
Rijksmuseum, Amsterdam · RP-T-1981-1Public domain (Rijksmuseum)recordedrecord74d21a793d
rb-07RembrandtCottage among Trees
ca. 1650
The Metropolitan Museum of Art · 29.100.939CC0 (Met Open Access)recordedrecorded729c725b
rb-08RembrandtWalking Man in a High Cap
c. 1655 - c. 1660
Rijksmuseum, Amsterdam · RP-T-1930-40Public domain (Rijksmuseum)recordedrecord0cdb720b4e
rb-09RembrandtRecumbent Lion
c. 1660
Rijksmuseum, Amsterdam · RP-T-1901-A-4524Public domain (Rijksmuseum)recordedrecord247ff6702e
rb-10RembrandtNude Woman Lying on a Pillow
c. 1661 - c. 1662
Rijksmuseum, Amsterdam · RP-T-1917-1Public domain (Rijksmuseum)recordedrecord710a44d86b
rb-11RembrandtThe Meeting of Christ with Martha and Mary after the Death of Lazarus
c. 1662–65
Cleveland Museum of Art · 1962.116CC0 (Cleveland Open Access)recordedrecorded80f47e44
rb-12RembrandtWoman Reading
1606–69
The Metropolitan Museum of Art · 26.208CC0 (Met Open Access)recordedrecord6923241b66
vg-01Van GoghAvenue of Pollard Birches and Poplars
March 1884
Art Institute of Chicago · 2022.74CC0 (AIC public domain)recordedrecord9531a10d4d
vg-02Van GoghRoad behind the Parsonage Garden in Nuenen
1884-03
Rijksmuseum, Amsterdam · SK-A-2225Public domain (Rijksmuseum)recordedrecord5a692c3d4d
vg-03Van GoghPollard Birches with Shepherd
March 1884
Van Gogh Museum, Amsterdam · F1240Public domain (PD-Art, via Wikimedia Commons)recordedrecorde1895de2e9
vg-04Van GoghTetards (Pollards)
1884
Art Institute of Chicago · 1969.268CC0 (AIC public domain)recordedrecordb9286729af
vg-05Van GoghFarm in Provence
c. 1888-06
Rijksmuseum, Amsterdam · SK-A-2226Public domain (Rijksmuseum)recordedrecorde5983205a7
vg-06Van GoghHill with the ruins of Montmajour
1888
Rijksmuseum, Amsterdam · RP-T-1962-65Public domain (Rijksmuseum)recordedrecord34a2ed534f
vg-07Van GoghWheat Field
July 1888
The Metropolitan Museum of Art · 64.125.3CC0 (Met Open Access)recordedrecordb2c050fe4f
vg-08Van GoghStreet in Saintes-Maries-de-la-Mer
ca. July 15, 1888
The Metropolitan Museum of Art · 48.190.1CC0 (Met Open Access)recordedrecord2a0be6b9d7
vg-09Van GoghLa Crau seen from Montmajour
July 1888
Van Gogh Museum, Amsterdam · (F1420)Public domain (PD-Art, via Wikimedia Commons)recordedrecord7fc80d2aa6
vg-10Van GoghRocky Hill with Trees, Montmajour
July 1888
Van Gogh Museum, Amsterdam · Public domain (PD-Art, via Wikimedia Commons)recordedrecorde4dde87795
vg-11Van GoghGarden of the Hospital in Arles
April 1889
Van Gogh Museum, Amsterdam · Public domain (PD-Art, via Wikimedia Commons)recordedrecord1e4fa2826b
vg-12Van GoghFountain in the Garden of Saint-Paul Hospital
May 1889
Van Gogh Museum, Amsterdam · Public domain (PD-Art, via Wikimedia Commons)recordedrecord5a7c8d70a7
vg-13Van GoghTrees with Ivy and a Bench in the Garden of Saint-Paul Hospital
May 1889
Van Gogh Museum, Amsterdam · Public domain (PD-Art, via Wikimedia Commons)recordedrecorde977654e22
vg-14Van GoghWeeping Tree
1889
Art Institute of Chicago · 1945.31CC0 (AIC public domain)recordedrecord9ee63355c0
vg-15Van GoghCypresses
1889
Art Institute of Chicago · 1927.543CC0 (AIC public domain)recordedrecord6d7d1d9c90
vg-16Van GoghThe Enclosed Wheatfield after a Storm
July 1889
Van Gogh Museum, Amsterdam · d0336V1962 (F1547)Public domain (PD-Art, via Wikimedia Commons)recordedrecorda920da7777
met-dp-12952-001commonsBroken Eggs
Jean-Baptiste Greuze 1756
objectID 436579 · 20.155.8Met Open Access assumedmatchedrecord1f4b11f001
met-dp-1411-001commonsBaron Alexander von Humboldt (1769–1859)
Julius Schrader 1859
objectID 437640 · 89.20Met Open Access assumedmatchedrecord458839c0d5
met-dp-14201-001commonsThe Shepherd's Song
Pierre Puvis de Chavannes 1891
objectID 437344 · 06.177Met Open Access assumedmatchedrecord96bf6c0d8b
met-dp-14345-001commonsThe Natchez
Eugène Delacroix 1823–24 and 1835
objectID 436180 · 1989.328Met Open Access assumedmatchedrecord4b4da22dd7
met-dp-14936-033commonsDancers, Pink and Green
Edgar Degas ca. 1890
objectID 436140 · 29.100.42Met Open Access assumedmatchedrecorde962620c60
met-dp-14976-001commonsReclining Nude
Auguste Renoir 1883
objectID 438013 · 2003.20.12Met Open Access assumedmatchedrecord8d70b168ac
met-dp-15576-001commonsThe Hall of Antiquities at Charlottenborg Palace, Copenhagen
Adam August Müller 1830
objectID 780292 · 2018.280Met Open Access assumedmatchedrecord308760419d
met-dp-17451-001commonsBeaulieu: The Bay of Fourmis
Eugène Boudin 1892
objectID 435750 · 39.65.2Met Open Access assumedmatchedrecord792a6390b6
met-dp-17679-001commonsThe Dead Christ with Angels
Edouard Manet 1864
objectID 436950 · 29.100.51Met Open Access assumedmatchedrecord617aa480a5
met-dp-19488-001commonsThe Net Mender (Garnbinderen)
Christian Krohg 1879
objectID 839045 · 2020.84.3Met Open Access assumedmatchedrecord7564041f46
met-dp-19540-001commonsA Deerhound
Sir Edwin Henry Landseer 1826
objectID 782306 · 2018.289.4Met Open Access assumedmatchedrecordc18c64792a
met-dp-19709-001commonsAntoine Laurent Lavoisier (1743–1794) and Marie Anne Lavoisier (Marie Anne Pierrette Paulze, 1758–1836)
Jacques Louis David 1788
objectID 436106 · 1977.10Met Open Access assumedmatchedrecorda495ecee1e
met-dp-20099-001commonsMont Sainte-Victoire and the Viaduct of the Arc River Valley
Paul Cézanne 1882–85
objectID 435877 · 29.100.64Met Open Access assumedmatched excluded: paid artist in the unpaid poolrecordbdf7852793
met-dp-20101-001commonsThe Dance Class
Edgar Degas 1874
objectID 438817 · 1987.47.1Met Open Access assumedmatchedrecord524fd2c885
met-dp-20645-001commonsGoing Home
Fritz von Uhde ca. 1889
objectID 437860 · 17.120.203Met Open Access assumedmatchedrecord2bca70575b
met-dp-21954-001commonsBarges at Pontoise
Camille Pissarro 1876
objectID 437302 · 1979.135.16Met Open Access assumedmatchedrecord68c524be33
met-dp-21955-001commonsWasherwoman, Study
Camille Pissarro 1880
objectID 437303 · 56.184.1Met Open Access assumedmatchedrecord64f01bc35d
met-dp-22432-001commonsThe Birth of Venus
Alexandre Cabanel 1875
objectID 435831 · 94.24.1Met Open Access assumedmatchedrecordcbbdd6cda1
met-dp-23372-001commonsStudy of a Nude Man
Pierre Narcisse Guérin ca. 1810–20
objectID 436406 · 52.71Met Open Access assumedmatchedrecord05c23e03a4
met-dp-25035-001commonsStudy of a Nude Man
Gustave Courbet early 1840s
objectID 848137 · 2021.30Met Open Access assumedmatchedrecord235f237d72
met-dp-25446-001commonsThe Singer in Green
Edgar Degas ca. 1884
objectID 436159 · 61.101.7Met Open Access assumedmatchedrecord4cacf3c5f8
met-dp-25466-001commonsBoating
Edouard Manet 1874
objectID 436947 · 29.100.115Met Open Access assumedmatchedrecord3ec0e52843
met-dp-25649-001commonsMademoiselle V. . . in the Costume of an Espada
Edouard Manet 1862
objectID 436945 · 29.100.53Met Open Access assumedmatchedrecord423e398a85
met-dp123961commonsA Limier Briquet Hound
Rosa Bonheur ca. 1856
objectID 435704 · 87.15.77Met Open Access assumedmatchedrecordf250751e23
met-dp124808commonsFirst Steps, after Millet
Vincent van Gogh 1890
objectID 436526 · 64.165.2Met Open Access assumedmatched excluded: paid artist in the unpaid poolrecordc0e41b79fb
met-dp131000commonsRace Horses
Edgar Degas ca. 1885–88
objectID 437994 · 1999.288.3Met Open Access assumedmatchedrecord676a51753b
met-dp136056commonsLandscape
Carl Rottmann ca. 1835–45
objectID 438849 · 2006.116Met Open Access assumedmatchedrecordb49278a284
met-dp136266commonsView of the Seacoast near Wargemont in Normandy
Auguste Renoir 1880
objectID 437426 · 56.135.7Met Open Access assumedmatchedrecord7bf0883b1d
met-dp154560commonsSaint Peter Martyr Healing the Leg of a Young Man
Antonio Vivarini ca. 1450
objectID 437909 · 37.163.4Met Open Access assumedmatchedrecord2056ad5abb
met-dp160821commonsFrieda Schiff (1876–1958), Later Mrs. Felix M. Warburg
Anders Zorn 1894
objectID 437964 · 1988.72Met Open Access assumedmatchedrecord1d1c14e136
met-dp169319commonsWoman Standing Beside a Balustrade with a Poodle
Paul Ranson ca. 1895
objectID 496203 · 2008.660Met Open Access assumedmatchedrecordc840407734
met-dp169386commonsPallas Athena and the Herdsman's Dogs
Briton Riviere 1876
objectID 437467 · 1980.510.3Met Open Access assumedmatchedrecord80d9530c9b
met-dp169404commonsHarbor Scene: An English Ship with Sails Loosened Firing a Gun
Peter Monamy
objectID 437103 · 60.94.2Met Open Access assumedmatchedrecord4a1e8d3bd2
met-dp169441commonsEdge of a Wood
Théodore Caruelle d'Aligny ca. 1850
objectID 438618 · 2003.42.1Met Open Access assumedmatchedrecord786af30c9d
met-dp169460commonsAn Ottoman Man in the Artist's Studio
Auguste-Xavier Leprince ca. 1823–26
objectID 438662 · 2003.42.39Met Open Access assumedmatchedrecorda87d8e7fdf
met-dp169651commonsKynance
John Brett 1888
objectID 435775 · 1974.289.2Met Open Access assumedmatchedrecordc590d806ce
met-dp170905commonsThe Drummond Children
Sir Henry Raeburn ca. 1808–9
objectID 437354 · 50.145.31Met Open Access assumedmatchedrecordefe6ff1e45
met-dp207320commonsGathering Wood
Anton Mauve
objectID 437041 · 43.86.8Met Open Access assumedmatchedrecord552e36456c
met-dp232029commonsTwo Dancers, Half-length
Edgar Degas
objectID 436167 · 1974.356.31Met Open Access assumedmatchedrecordb3fc8cee5d
met-dp253480commonsWoman Having Her Hair Combed
Edgar Degas ca. 1886–88
objectID 436173 · 29.100.35Met Open Access assumedmatchedrecord02ad1124fe
met-dp253483commonsWoman Bathing in a Shallow Tub
Edgar Degas 1885
objectID 436127 · 29.100.41Met Open Access assumedmatchedrecordf65319a623
met-dp267027commonsA Spanish Garden
Martín Rico y Ortega 1871
objectID 437462 · 81.1.666Met Open Access assumedmatchedrecorda982b21a81
met-dp273105commonsMoonlight, Strandgade 30
Vilhelm Hammershøi 1900–1906
objectID 441933 · 2012.203Met Open Access assumedmatchedrecord418da7d5d0
met-dp273977commonsYoung Lady in 1866
Edouard Manet 1866
objectID 436964 · 89.21.3Met Open Access assumedmatchedrecorda9769c4d71
met-dp318843commonsThe Dream of the Shepherd (Der Traum des Hirten)
Ferdinand Hodler 1896
objectID 634108 · 2013.1134Met Open Access assumedmatchedrecord59bfb40e65
met-dp320128commonsMadame Cézanne (Hortense Fiquet, 1850–1922) in a Red Dress
Paul Cézanne 1888–90
objectID 435876 · 62.45Met Open Access assumedmatched excluded: paid artist in the unpaid poolrecordb239355055
met-dp346474commonsIrises
Vincent van Gogh 1890
objectID 436528 · 58.187Met Open Access assumedmatched excluded: paid artist in the unpaid poolrecord2f7cf0ebbf
met-dt10159commonsThe Empress Eugénie (Eugénie de Montijo, 1826–1920, Condesa de Teba)
Franz Xaver Winterhalter 1854
objectID 437942 · 1978.403Met Open Access assumedmatchedrecordcd210f6195
met-dt1027commonsStill Life with Teapot and Fruit
Paul Gauguin 1896
objectID 437999 · 1997.391.2Met Open Access assumedmatchedrecord50fa62c222
met-dt10724commonsGeneral Garibaldi's Residence at Caprera
Frederick Richard Lee 1865
objectID 436863 · 1974.159Met Open Access assumedmatchedrecord2d4c21ded8
met-dt1396commonsL'Arlésienne: Madame Joseph-Michel Ginoux (Marie Julien, 1848–1911)
Vincent van Gogh 1888–89
objectID 436529 · 51.112.3Met Open Access assumedmatched excluded: paid artist in the unpaid poolrecordc5d5973175
met-dt1479commonsThe Annunciation
Petrus Christus ca. 1445
objectID 435899 · 32.100.35Met Open Access assumedmatchedrecord08375c7fbd
met-dt1494commonsOleanders
Vincent van Gogh 1888
objectID 436530 · 62.24Met Open Access assumedmatched excluded: paid artist in the unpaid poolrecord605609e76c
met-dt1500commonsThe Englishman (William Tom Warrener, 1861–1934) at the Moulin Rouge
Henri de Toulouse-Lautrec 1892
objectID 437835 · 67.187.108Met Open Access assumedmatchedrecord76a1b52f25
met-dt1556commonsA Cowherd at Valhermeil, Auvers-sur-Oise
Camille Pissarro 1874
objectID 437300 · 56.182Met Open Access assumedmatchedrecord88785ad72e
met-dt1558commonsHonfleur
Johan Barthold Jongkind 1865
objectID 436785 · 16.39Met Open Access assumedmatchedrecordd544183805
met-dt1559commonsThe Garden of the Tuileries on a Winter Afternoon
Camille Pissarro 1899
objectID 437314 · 66.36Met Open Access assumedmatchedrecord583edf5b87
met-dt1565commonsThe Rehearsal of the Ballet Onstage
Edgar Degas ca. 1874
objectID 436155 · 29.160.26Met Open Access assumedmatchedrecord3d406ad139
met-dt1859commonsJalais Hill, Pontoise
Camille Pissarro 1867
objectID 437299 · 51.30.2Met Open Access assumedmatchedrecorddd9ddf92c6
met-dt1879commonsThe Daughters of Catulle Mendès, Huguette (1871–1964), Claudine (1876–1937), and Helyonne (1879–1955)
Auguste Renoir 1888
objectID 438014 · 1998.325.3Met Open Access assumedmatchedrecord5e8fa87960
met-dt1882commonsEugène Murer (Hyacinthe-Eugène Meunier, 1841–1906)
Auguste Renoir 1877
objectID 438011 · 2003.20.9Met Open Access assumedmatchedrecord3c7fa544d4
met-dt1883commonsThe Dance Lesson
Edgar Degas ca. 1879
objectID 436132 · 1971.185Met Open Access assumedmatchedrecorddd3af064d9
met-dt1910commonsA Woman Ironing
Edgar Degas 1873
objectID 436174 · 29.100.46Met Open Access assumedmatchedrecord32a867627e
met-dt1912commonsPortrait of a Woman in Gray
Edgar Degas ca. 1865
objectID 436152 · 57.171Met Open Access assumedmatchedrecordb80c134682
met-dt1917commonsWoman Combing Her Hair
Edgar Degas ca. 1888–90
objectID 436170 · 56.231Met Open Access assumedmatchedrecordc249bfbf61
met-dt1924commonsThe Sofa
Henri de Toulouse-Lautrec ca. 1894–96
objectID 437837 · 51.33.2Met Open Access assumedmatchedrecord3d828b5aa4
met-dt1926commonsMadame Jacques-Louis Leblanc (Françoise Poncelle, 1788–1839)
Jean Auguste Dominique Ingres 1823
objectID 436703 · 19.77.2Met Open Access assumedmatched excluded: paid artist in the unpaid poolrecordac469f3697
met-dt1927commonsThe Pink Dress (Albertie-Marguerite Carré, later Madame Ferdinand-Henri Himmes, 1854–1935)
Berthe Morisot ca. 1870
objectID 438009 · 2003.20.8Met Open Access assumedmatchedrecord7505dd7d09
met-dt1933commonsA Matador
Edouard Manet 1866–67
objectID 436960 · 29.100.52Met Open Access assumedmatchedrecord2bdcf7f320
met-dt1939commonsDish of Apples
Paul Cézanne ca. 1876–77
objectID 437989 · 1997.60.1Met Open Access assumedmatched excluded: paid artist in the unpaid poolrecorda556f0fa8f
met-dt1943commonsThe House with the Cracked Walls
Paul Cézanne 1892–94
objectID 435874 · 1993.400.2Met Open Access assumedmatched excluded: paid artist in the unpaid poolrecordbef3b0ad21
met-dt1947commonsShoes
Vincent van Gogh 1888
objectID 436533 · 1992.374Met Open Access assumedmatched excluded: paid artist in the unpaid poolrecord5499ad3457
met-dt1952commonsThe Siesta
Paul Gauguin ca. 1892–94
objectID 436449 · 1993.400.3Met Open Access assumedmatchedrecordb4d895bf46
met-dt1954commonsThree Tahitian Women
Paul Gauguin 1896
objectID 438000 · 1997.60.3Met Open Access assumedmatchedrecord1bf199a61c
met-dt1973commonsThe Calm Sea
Gustave Courbet 1869
objectID 436005 · 29.100.566Met Open Access assumedmatchedrecord796e854b59
met-dt1977commonsAntoine Dominique Sauveur Aubert (born 1817), the Artist's Uncle, as a Monk
Paul Cézanne 1866
objectID 435869 · 1993.400.1Met Open Access assumedmatched excluded: paid artist in the unpaid poolrecordcd79f3d4fc
met-dt1978commonsWoman with a Rake
Jean-François Millet probably 1856–57
objectID 437099 · 38.75Met Open Access assumedmatchedrecord169729cbd3
met-dt1980commonsStill Life with Flowers and Fruit
Henri Fantin-Latour 1866
objectID 436293 · 1980.3Met Open Access assumedmatchedrecorde24aa4f698
met-dt2000commonsJerusalem from the Mount of Olives
Charles-Théodore Frère by 1880
objectID 436418 · 87.15.106Met Open Access assumedmatchedrecordc42f82703d
met-dt2006commonsAlfred Dedreux (1810–1860) as a Child
Théodore Géricault ca. 1819–20
objectID 436454 · 41.17Met Open Access assumedmatchedrecordc69932db0a
met-dt2010commonsReverie
Camille Corot 1857 or later
objectID 435981 · 29.100.563Met Open Access assumedmatchedrecord04f53867aa
met-dt2013commonsHagar in the Wilderness
Camille Corot 1835
objectID 435962 · 38.64Met Open Access assumedmatchedrecord1bbaeb9d8e
met-dt209324commonsGraziella
Jules-Joseph Lefebvre 1878
objectID 436866 · 87.15.111Met Open Access assumedmatchedrecordbcac368124
met-dt2130commonsStill Life with Ham
Philippe Rousseau 1870s
objectID 437513 · 1982.320Met Open Access assumedmatchedrecord97beb5eee6
met-dt2141commonsThe Laundress
Honoré Daumier 186[3?]
objectID 436091 · 47.122Met Open Access assumedmatchedrecord637a1c8a25
met-dt2159commonsVase of Flowers (Pink Background)
Odilon Redon ca. 1906
objectID 437382 · 59.16.3Met Open Access assumedmatchedrecord339ae1e7b3
met-dt2163commonsPeasant Woman Cooking by a Fireplace
Vincent van Gogh 1885
objectID 436531 · 1984.393Met Open Access assumedmatched excluded: paid artist in the unpaid poolrecord8f59706385
met-dt2167commonsAlbert (René) Grenier (1858–1925)
Henri de Toulouse-Lautrec 1887
objectID 437836 · 1979.135.14Met Open Access assumedmatchedrecord84520ae294
met-dt224757commonsPenelope
Charles-François Marchal ca. 1868
objectID 436970 · 17.138.2Met Open Access assumedmatchedrecordfd6cf52aa2
met-dt234058commonsAn Egyptian Peasant Woman and Her Child
Léon Bonnat 1869–70
objectID 435711 · 87.15.97Met Open Access assumedmatchedrecord3bfe905d4d
met-dt2553commonsCountess Alexander Nikolaevitch Lamsdorff (Maria Ivanovna Beck, 1835–1866)
Franz Xaver Winterhalter 1859
objectID 437943 · 67.187.119Met Open Access assumedmatchedrecord331fe265bb
met-dt2566commonsBreton Brother and Sister
William Bouguereau 1871
objectID 435754 · 87.15.32Met Open Access assumedmatchedrecord86fa556118
met-dt403commonsJacques-Louis Leblanc (1774–1846)
Jean Auguste Dominique Ingres 1823
objectID 436706 · 19.77.1Met Open Access assumedmatched excluded: paid artist in the unpaid poolrecordca3d7f8b5d
met-dt4937commonsView near Rouen
Richard Parkes Bonington ca. 1825
objectID 438449 · 2001.45Met Open Access assumedmatchedrecord5b1d49dab6
met-dt50commonsThe Repast of the Lion
Henri Rousseau (le Douanier) ca. 1907
objectID 438822 · 51.112.5Met Open Access assumedmatchedrecord5b6b198a25
met-dt8475commonsIn the Studio
Alfred Stevens 1888
objectID 437755 · 1986.339.2Met Open Access assumedmatchedrecord507558dec2
met-dt872-1commonsIn the Studio
Alfred Stevens 1888
objectID 437755 · 1986.339.2Met Open Access assumedduplicate download of met-dt872 excluded (duplicate)recordb71e270b9b
met-dt872commonsPortrait of a Child
Camille Corot ca. 1835
objectID 435980 · 29.100.564Met Open Access assumedmatchedrecord86082595a8
met-dt9199commonsAsters and Fruit on a Table
Henri Fantin-Latour 1868
objectID 437997 · 2001.202.3Met Open Access assumedmatchedrecord36f8196a1f
met-dp130799commonsThe Spanish Singer
Edouard Manet 1860
objectID 436944 · 49.58.2Met Open Access assumedmatchedrecord136b67c645
msv-amsvA. Toward Mont Sainte-Victoire (Vers la Montagne Sainte-Victoire)
· public domain by age (Cézanne d. 1906)work PD, image source unrecorded9c74829cea
msv-bmsvB. Mont Sainte-Victoire and the Viaduct of the Arc River Valley
· public domain by age (Cézanne d. 1906)work PD, image source unrecorded9b441655ee
msv-cmsvC. Montagne Sainte-Victoire with Large Pine
· public domain by age (Cézanne d. 1906)work PD, image source unrecordedd666f41552
msv-dmsvD. Montagne Sainte-Victoire
· public domain by age (Cézanne d. 1906)work PD, image source unrecordedd6c558055b
msv-emsvE. Mont Sainte-Victoire (La Montagne Sainte-Victoire)
· public domain by age (Cézanne d. 1906)work PD, image source unrecorded9a58d78169
msv-fmsvF. Mont Sainte-Victoire
· public domain by age (Cézanne d. 1906)work PD, image source unrecorded5e805cebce
msv-gmsvG. Mont Sainte-Victoire
· public domain by age (Cézanne d. 1906)work PD, image source unrecordedb7ced7b516
msv-hmsvH. Mont Sainte-Victoire
· public domain by age (Cézanne d. 1906)work PD, image source unrecorded43a8611a09
msv-imsvI. Mont Sainte-Victoire
· public domain by age (Cézanne d. 1906)work PD, image source unrecordedd9711b06f6

6. Duplicates

20910 pairs compared. Identical files: 0. Identical pixels: 0. Near-duplicates (normalised RMS distance below 0.35):

Pair-distance percentiles: 0.1th 0.6008, 1st 0.8021, 5th 0.9919, median 1.2973.

Interpretation. The one near-duplicate is the same painting saved as two differently encoded files. Hash and pixel checks miss it, and because views are seeded from the id, the two copies even produce different training views. Dedupe now runs on the source image. This is the duplicate-gaming case of the brief, met naturally.

7. Measurement: does use-based credit over-pay blank paper?

Rule fixed in LOG.md before the run: F ≥ 2 in 3 of 4 seeds, pool paper use mass; F ≤ 1 in 3 of 4, no policy; otherwise inconclusive.

SeedPaper share of artists' useRemoval effect, paperRemoval effect, marksF
50000.8010.2160.0180.334
50010.6900.1450.0200.298
50020.7210.1460.0170.301
50030.6330.1530.0280.318
F = (use ratio paper/mark) / (removal ratio paper/mark), four seeds00.440.881.31.82.2over-credit factor F0.3340.2980.3010.3180.334, 0.298, 0.301, 0.318F = 2: pool paper

Verdict: NOT OVER-CREDITED: no policy

Paper fraction of each artist's use mass, per seed

Artist5000500150025003
Cézanne0.8230.8170.8220.751
Dürer0.9010.8280.8430.810
Ingres0.9060.9030.9070.883
Kollwitz0.6160.4780.5180.429
Rembrandt0.8020.6720.7090.637
Van Gogh0.7140.6200.6280.571
Seeds 5000 (top) and 5003. Left: full corpus. Middle: all paper patches removed. Right: all mark patches removed.
Seeds 5000 (top) and 5003. Left: full corpus. Middle: all paper patches removed. Right: all mark patches removed. measure/paper_credit_outputs.png · sha256 d484aa606928

Interpretation. Paper is not over-credited; by consequence it is under-credited. The reason matters more than the verdict: at 32 px a pen or graphite stroke is under one pixel wide, so the outputs are paper-toned blotches and removing every mark barely changes them. At this scale the instrument would pay artists for the colour of their paper. This became requirement O12.

8. Test: can a tighter crop make the marks matter (O12)?

Rule fixed in LOG.md before the run: a configuration passes if Q = Rmark / Rpaper ≥ 1 in at least 3 of 4 seeds; among passing ones prefer the largest crop, then uniform placement.

ConfigurationQ per seedMark share of artists' useO12
crop 256 px, uniform0.086, 0.135, 0.118, 0.1760.206, 0.312, 0.287, 0.372fail
crop 256 px, marks0.129, 0.174, 0.167, 0.2290.266, 0.374, 0.341, 0.423fail
crop 128 px, uniform0.097, 0.139, 0.115, 0.1860.224, 0.332, 0.306, 0.400fail
crop 128 px, marks0.171, 0.223, 0.211, 0.3280.351, 0.451, 0.428, 0.512fail
crop 64 px, uniform0.102, 0.170, 0.130, 0.2060.249, 0.372, 0.339, 0.438fail
crop 64 px, marks0.253, 0.294, 0.336, 0.4180.450, 0.529, 0.514, 0.594fail
Q = removal effect of marks / removal effect of paper (log scale)0.010.11crop 256 px, uniform0.0860.1350.1180.176crop 256 px, marks0.1290.1740.1670.229crop 128 px, uniform0.0970.1390.1150.186crop 128 px, marks0.1710.2230.2110.328crop 64 px, uniform0.1020.1700.1300.206crop 64 px, marks0.2530.2940.3360.418Q = 1

Choice: None

Rows: the six configurations in table order. Columns: view 0 of the first 24 sheets.
Rows: the six configurations in table order. Columns: view 0 of the first 24 sheets. measure/crop_scale_views.png · sha256 60c56510494d

Interpretation (written after the result). The crops worked on the training data: at 64 px strokes are several pixels wide, and the marks' share of use rises from about 0.2 to 0.6 with tighter, mark-centred crops. Q stays below 1 because the criterion compares removing all paper with removing all marks under pixel MSE, which weights area; even a resolved drawing is mostly paper. The criterion measured whether marks dominate the area, not whether they carry the hand. A measurement-design error in O12 as written.

Second test: the edge value function (designed after the first test, registered before it ran)

Same corpus builds, seeds and conditions for the two 64 px configurations; removal effect measured on Sobel edge maps of luminance instead of pixels. Pass: Qedges ≥ 1 in at least 3 of 4 seeds.

ConfigurationQ edges per seedQ pixel per seedPixel Q reproduces test 1Result
crop 64 px, marks1.462, 1.065, 1.920, 1.8910.253, 0.294, 0.336, 0.418yespass
crop 64 px, uniform0.744, 0.882, 0.878, 1.0890.102, 0.170, 0.130, 0.206yesfail
Q by value function (log scale): marks' removal effect over paper's0.1110crop 64 px, marks · edges1.4621.0651.9201.891crop 64 px, marks · pixels0.2530.2940.3360.418crop 64 px, uniform · edges0.7440.8820.8781.089crop 64 px, uniform · pixels0.1020.1700.1300.206Q = 1
Per row, one seed and configuration (64 marks: rows 1 to 4; 64 uniform: rows 5 to 8). Left: full. Middle: paper removed. Right: marks removed.
Per row, one seed and configuration (64 marks: rows 1 to 4; 64 uniform: rows 5 to 8). Left: full. Middle: paper removed. Right: marks removed. measure/crop_scale_edges.png · sha256 4a7dbe74e4e4

Confirmation on the final corpus (paid-artist works removed from the commons)

Registered before it ran: the chosen configuration re-run on the corpus as it now stands, same seeds, same rule. The pixel Q is expected to differ from the first test here, because the corpus changed.

ConfigurationCommons sizeQ edges per seedQ pixel per seedResult
crop 64 px, marks861.598, 1.142, 2.391, 2.1710.272, 0.316, 0.353, 0.460pass

Exclusions in force: 14 (met-dp-20099-001, met-dp124808, met-dp320128, met-dp346474, met-dt1396, met-dt1494, met-dt1926, met-dt1939, met-dt1943, met-dt1947, met-dt1977, met-dt2163, met-dt403, met-dt872-1).

Seeds 5000 to 5003 on the final corpus. Left: full. Middle: paper removed. Right: marks removed.
Seeds 5000 to 5003 on the final corpus. Left: full. Middle: paper removed. Right: marks removed. measure/crop_scale_edges_confirm.png · sha256 0dd01b0f8465

9. M3: the removal instrument's first run

Protocol measure/M3_PROTOCOL.md, frozen before any run (measure/m3_freeze.json). Game A: the six artists, commons as baseline. Games B and C: planted controls with and without the duplicate. Seeds 6000 to 6003; exact Shapley over all 64 coalitions.

IDResultNumbers
K1 efficiencyholdsmax error 5.6e-17
K2 symmetry du-01 == duplicateholdsmax relative difference 9.3e-05
T1holdstv use shapley [0.400, 0.346, 0.488, 0.297]
median 0.373
T1eholdstv use shapley [0.363, 0.308, 0.346, 0.323]
median 0.335
T2afailsmost substitutable pair per seed [[ingres, vangogh], [cezanne, ingres], [rembrandt, vangogh], [cezanne, ingres]]
T2bfailsloo below shapley for both per seed [False, False, True, True]
T4failspaper fraction of artist use [0.297, 0.371, 0.168, 0.434]
median 0.334
T5bholdspair over alone [2.021, 2.003, 2.008, 1.974]
median 2.006
T5choldsscrambled share pixel [0.000, 0.000, 0.000, 0.000]; edges [0.015, 0.000, 0.000, 0.000]; blur [0.000, 0.000, 0.000, 0.000]; colour [0.000, 0.000, 0.000, 0.000]
T5dfailsconstant share pixel [0.052, 0.056, 0.064, 0.052]; edges [0.029, 0.026, 0.044, 0.034]; blur [0.054, 0.058, 0.067, 0.054]; colour [0.058, 0.056, 0.066, 0.051]
T6aholdstop artist per seed [ingres, ingres, vangogh, ingres]
T6bholdsranking per seed [[ingres, cezanne, durer, vangogh, rembrandt, kollwitz], [ingres, cezanne, durer, rembrandt, kollwitz, vangogh], [vangogh, ingres, durer, cezanne, rembrandt, kollwitz], [ingres, cezanne, durer, rembrandt, vangogh, kollwitz]]

Shares by rule, edges value function, four seeds

share of the artists' credit (Shapley, leave-one-out, use); one dot per seed00.0880.180.270.350.44Cézanne · shapley0.2000.2110.1380.249Dürer · shapley0.1650.1570.1570.146Ingres · shapley0.2820.2800.1740.342Kollwitz · shapley0.0750.1210.0870.057Rembrandt · shapley0.1260.1240.1160.138Van Gogh · shapley0.1520.1060.3280.068Cézanne · loo0.2030.2160.1600.239Dürer · loo0.1600.1430.1420.163Ingres · loo0.2890.2670.2120.328Kollwitz · loo0.1370.1510.1320.099Rembrandt · loo0.1040.1250.0780.087Van Gogh · loo0.1080.0970.2760.084Cézanne · use0.0850.1010.0340.128Dürer · use0.1070.1280.0680.129Ingres · use0.0920.1110.0390.157Kollwitz · use0.3100.2490.4020.248Rembrandt · use0.1740.2080.1470.161Van Gogh · use0.2320.2030.3100.178

Post hoc: how visible is removing one artist?

SeedCézanneDürerIngresKollwitzRembrandtVan GoghAll six
60006.06 (27%)4.55 (17%)8.15 (42%)2.78 (8%)3.0 (8%)2.15 (4%)30.4 (88%)
60017.17 (34%)5.07 (19%)9.29 (50%)2.98 (7%)3.17 (9%)2.39 (6%)37.54 (98%)
60025.63 (20%)4.41 (13%)7.5 (34%)3.04 (8%)2.69 (6%)3.26 (10%)27.87 (94%)
60036.53 (28%)4.55 (14%)9.13 (48%)2.42 (6%)2.31 (5%)1.9 (4%)38.57 (98%)

Mean absolute change in 0 to 255 levels (fraction of values changing by more than 8 levels). Not predicted; computed after the verdicts.

Seeds 6000 (top) and 6002. Full output, then without Cézanne, Dürer, Ingres, Kollwitz, Rembrandt, Van Gogh.
Seeds 6000 (top) and 6002. Full output, then without Cézanne, Dürer, Ingres, Kollwitz, Rembrandt, Van Gogh. measure/m3/A_panel.png · sha256 340b5af2fcd5

Interpretation. The instrument measures exactly (efficiency to 1e-16, the duplicate symmetric) and separates use from consequence by about a third of the money. The constant control earning 3 to 7% shows removal credit paying for trajectory perturbation through the t = 1 average; that needs a design fix, registered before testing, before any payout is shown. Single artists move the picture only a few levels; the page shows the difference map with an adjustable gain.

10. The t = 1 vote and its fix (T0FIX)

M3's constant control (a source of nonsense images) earned 3 to 7% of the credit. Two exploratory diagnostics, then a protocol frozen before its run (measure/T0FIX_PROTOCOL.md).

Diagnostic 1: how much of a source's removal effect enters at t = 1?

SourceShare explained by step 0 (seeds 6000 to 6003)
CONTROL-constant1.00, 1.00, 1.00, 1.00
CONTROL-scrambled0.08, 0.51, 0.18, 0.65
du-010.52, 0.53, 0.60, 0.50

Interpretation. At t = 1 the posterior ignores the picture: every source votes by head count in a blind average, and the trajectory carries the shift. All of the constant's effect, and half of a real sheet's, is that vote.

Diagnostic 2: chaos floor, leave-one-out effects (pixel MSE)

ScheduleSeedConstantScrambleddu-01Chaos floor
S060004.05e-043.18e-044.28e-052.39e-12
S060014.90e-045.17e-055.17e-051.45e-12
S060026.55e-042.16e-043.85e-051.92e-12
S060034.07e-044.10e-055.52e-053.17e-12
S160001.90e-091.40e-041.92e-053.02e-12
S160011.52e-093.14e-051.09e-042.14e-12
S160022.29e-121.78e-047.93e-062.81e-12
S160031.47e-071.46e-052.45e-052.17e-12

T0FIX results (schedule S1, paired with M3)

IDResultNumbers
K1 efficiencyholdsmax error 2.8e-17
K2 symmetryfailsmax relative difference 1.4e-04
F1holdsconstant share pixel [1.4e-04, 1.4e-04, 4.8e-06, 0.003]; edges [1.2e-04, 5.2e-05, 3.9e-06, 7.1e-04]; blur [1.6e-04, 1.6e-04, 5.6e-06, 0.004]; colour [7.8e-04, 1.7e-05, 0.000, 0.003]
F2holdsscrambled share pixel [0.000, 0.000, 0.000, 0.000]; edges [0.008, 0.000, 0.003, 0.004]; blur [0.000, 0.000, 0.000, 0.000]; colour [0.000, 0.000, 0.000, 0.000]
F3holdspair over alone [2.018, 1.890, 2.043, 1.903]
median 1.960
F4holdstv use shapley [0.383, 0.334, 0.380, 0.295]
median 0.357
F5holdstop artist [ingres, ingres, vangogh, ingres]
F6holdstv S0 S1 [0.099, 0.101, 0.187, 0.138]
median 0.119
Change in each artist's Shapley share from S0 to S1 (edges), magnitude, one dot per seed00.0260.0530.0790.110.13Kollwitz0.0350.0140.0370.021Rembrandt0.0110.0300.0300.045Van Gogh0.0530.0370.1200.073Cézanne (loses)0.0250.0250.0600.048Ingres (loses)0.0640.0760.0820.064Dürer (mixed sign)0.0100.0200.0450.027

K2 re-check on the float64 reference (registered after the results, before running)

QuantityValue
seed6002
scheduleS1
dtypefloat64 CPU
seconds1712.900
max_abs_output_difference_symmetric_pairs6.3e-14
phi_du01_minus_phi_duppixel 3.4e-18; edges 9.5e-18; blur 4.2e-19; colour 0.000
relative_to_float32_phi_du01pixel 1.7e-14; edges 2.6e-14; blur 2.2e-15; colour 0.000
holdsTrue

HOLDS: S1 adopted (instrument/config.py)

11. How big a pool can the demo keep?

Rule fixed in LOG.md before the run: an artist is visible at pool size N if its median removal change is at least 5 levels of 255; choose the largest N with at least 4 of 6 visible, else the smallest tested. Schedule S1, seeds 8000 to 8003.

Pool NCézanneDürerIngresKollwitzRembrandtVan GoghVisibleArtists' use
863.592.824.722.692.202.3800.47, 0.54, 0.44, 0.44
434.223.235.533.962.593.0010.64, 0.71, 0.61, 0.61
214.883.306.335.542.713.5020.77, 0.84, 0.78, 0.75
104.843.236.506.752.784.1720.87, 0.92, 0.88, 0.86
median change when one artist is removed (levels of 255), one dot per artist01.534.55.97.4pool 863.5942.8184.7212.6872.1992.376pool 434.2193.2285.5313.9652.5913.002pool 214.8783.3056.3255.5382.7123.500pool 104.8363.2286.5006.7522.7834.167visible: 5 levels

Choice: pool of 10 (none passed: smallest N)

Seed 8000; rows: pool 86, 43, 21, 10; columns: full, then without each artist.
Seed 8000; rows: pool 86, 43, 21, 10; columns: full, then without each artist. measure/commons_size.png · sha256 763c64dabd50

Interpretation. A smaller pool raises the artists' share of the picture from about half to about nine tenths, but a single artist's removal levels off at 3 to 7 levels: the other five hands fill in. The page shows single removals through the difference map, with the gain stated.

12. Receipts, verifier and the page

Receipts (receipt/make.py, format take-it-out-receipt/1) record generator and corpus hashes, the request, every coalition's value and output hash, and the credit, under a SHA-256 seal. The verifier (receipt/verify.py) is written independently of the instrument. The page (page/, served on 127.0.0.1:7472) reads sealed receipts only.

Tamper tests

TestDetail
PASSE1 untouched receipt passes V1 to V5 (full replay, bit-identical)fails: []
PASSE2 edited share, old seal: V1 catches itfails: ['V1 seal', 'V4 credit recomputed from v (permutation Shapley, LOO, shares, efficiency)']
PASSE3 edited share, re-sealed: V4 catches itfails: ['V4 credit recomputed from v (permutation Shapley, LOO, shares, efficiency)']
PASSE4 forged v (consistent, re-sealed): V1 to V4 pass, full replay V5 catches itwithout replay: []; with full replay: ["V5 replay on the receipt's backend (mps/float32): 64 coalitions, outputs bit-identical and v(S) recomputed exactly"]
PASSE4 note: spot replay (8) would sample the forged coalitionforged coalition 5 is NOT in the spot sample [2, 9, 21, 27, 29, 34, 38, 44]; spot replay is probabilistic
PASSE5 swapped source hash, re-sealed: V2 catches itfails: ["V2 every owner's source file matches"]
PASSE6 edited nearest-image claim, re-sealed: V6 catches it (untouched receipt passes with --outputs)untouched fails []; edited fails ['V6 nearest training image recomputed from the corpus arrays']
PASSE7 flipped control pass flag, re-sealed: V7 catches itfails ['V7 planted controls recomputed from the recorded values']

Found by these tests: the first verifier compared only regenerated output hashes, so a receipt with a forged value, recomputed consistently and re-sealed, passed even a full replay. Fixed: the replay also recomputes every value exactly. A spot replay remains probabilistic, and the page says so.

13. M4: the viewer's drawing as a paid party

Protocol measure/M4_PROTOCOL.md, frozen before any run. The drawing is a seventh player: absent, sampling starts from noise; present, it starts at step k from the drawing blended with the same noise. Three test drawings, k in 4, 9, 14, seeds 9100 and 9101, commons 10, schedule S1.

IDResultNumbers
K1 efficiencyholdsmax error 2.2e-16
D1holdsper case [True, True, True, True, True, True]
D2failsper case [False, False, False, True, True, True]
D3holdsper case [True, True, True, True, True, True]
D4failsper case [False, False, False, False, False, False]
the drawing's Shapley share at k = 4, 9, 14 (one dot per k)00.210.420.620.8319100_circle · pixel0.5580.5950.6179100_circle · edges0.9470.9390.9439100_house · pixel0.5510.5900.6169100_house · edges0.9370.9340.9479100_hatch · pixel0.5520.5920.6169100_hatch · edges0.9470.9310.9319101_circle · pixel0.6330.6660.6849101_circle · edges0.8840.9020.9339101_house · pixel0.6290.6640.6819101_house · edges0.8450.8940.9209101_hatch · pixel0.6260.6590.6759101_hatch · edges0.8530.8940.914
Seed 9100. Rows: circle, house, hatch; columns: the drawing, then the full output at k = 4, 9, 14. Bottom: no drawing.
Seed 9100. Rows: circle, house, hatch; columns: the drawing, then the full output at k = 4, 9, 14. Bottom: no drawing. measure/m4/m4_panel.png · sha256 9ed35bfa5532

Post hoc: lines or paper? (exploratory, after the verdicts)

Seedkcircle pixelcircle edgeshouse pixelhouse edgeshatch pixelhatch edges
910040.0110.0650.0230.1160.0250.070
910090.0160.1130.0370.2300.0320.090
9100140.0290.2310.0550.4450.0490.207
910140.0080.0580.0170.0940.0200.097
910190.0110.0880.0200.1510.0220.130
9101140.0240.3010.0370.3940.0280.176

Share of the drawing's effect added by its lines on top of a blank sheet in the same paper colour.

Interpretation. By pixels, 94 to 99% of what a drawing does is its paper tone; by edges the lines matter more and rise with k. The drawing is paid mostly for its paper, as the artists were in M2. Next: register a split of the input into ground and lines. At k = 14 the drawn shape appears, made of the artists' marks.

14. SPLIT: the drawing as paper and lines

Protocol measure/SPLIT_PROTOCOL.md, frozen before any run. The input becomes two players: its ground (a blank sheet in the corpus paper colour) and its lines (the drawing minus that sheet, float64, so the two add back to the drawing exactly). Same seeds, drawings and pool as M4; k in 9, 14; 256 coalitions per game.

IDResultNumbers
K1 efficiencyholdsmax error 3.3e-16
K2 both parts == the drawingholdsmax differing values 0
L1holdsper case [True, True, True, True, True, True, True, True, True, True, True, True]
L2holdsper case [True, True, True, True, True, True]
L3holdsper case [True, True, True, True, True, True]

Shares per case

Casepixel: paperpixel: linespixel: artists (split)pixel: artists (M4)edges: paperedges: linesedges: artists (split)edges: artists (M4)
9100_circle_k90.6600.0020.3370.4050.5640.3890.0470.061
9100_circle_k140.6440.0390.3160.3830.4170.5420.0410.057
9100_house_k90.6610.0000.3390.4100.5110.4360.0530.066
9100_house_k140.6470.0350.3180.3840.3140.6510.0360.053
9100_hatch_k90.6598.01e-050.3410.4080.5570.3810.0620.069
9100_hatch_k140.6420.0400.3180.3840.4350.5140.0510.069
9101_circle_k90.6390.0860.2750.3340.5680.3480.0840.098
9101_circle_k140.6150.1290.2560.3160.3660.5890.0440.067
9101_house_k90.6450.0790.2750.3360.5380.3680.0930.106
9101_house_k140.6180.1250.2580.3190.3150.6270.0590.080
9101_hatch_k90.6430.0780.2780.3410.5750.3370.0880.106
9101_hatch_k140.6230.1150.2620.3250.4350.5040.0610.086
k = 14. Rows: seed 9100 then 9101, circle, house, hatch. Columns: the drawing; all artists with paper and lines; paper only; lines only; neither.
k = 14. Rows: seed 9100 then 9101, circle, house, hatch. Columns: the drawing; all artists with paper and lines; paper only; lines only; neither. measure/split/split_panel.png · sha256 ffec17ece22e

Splitting a player moves the others' pay (reported, not predicted)

Value functionartists' summed share: one-player input minus split input, minmax
pixel0.0590.070
edges0.0080.026
blur0.0610.081
colour0.0790.123

Interpretation. By pixels a drawing is paid for its paper (lines 0 to 13%); by edges at k = 14 its lines out-earn its paper, and the lines' share grows with strength. Cutting the input into two players lowered the artists' total by 0.008 to 0.12: Shapley is not splitting-proof, so a payee could raise their share by declaring more parts. Decision: the split is shown as description only; pay uses the drawing as one player. Cross-run check: the one-player game read off the split game reproduces M4's separately run Shapley values exactly (difference 0 in all 24 case and value-function pairs, computed in the page).

15. POOL: does the use gap grow with the pool?

Protocol measure/POOL_PROTOCOL.md, frozen before any run. Nested commons pools N = 86, 43, 21, 10 (one fixed order); fresh seeds 9200 to 9203; six artists as players; S1, MPS float32.

IDResultNumbers
K1 efficiencyholdsmax error 5.6e-17
P1holdsper seed [True, True, True, True]
P2failsper seed [False, False, True, True]
P3holdsmedians 86 43 21 10 [0.278, 0.246, 0.215, 0.170]
TV from Shapley shares, one dot per seed (use above, leave-one-out below)00.0710.140.210.280.36use · pixel · N 860.2550.2910.3240.265use · pixel · N 430.2250.2620.2790.231use · pixel · N 210.1700.2450.2380.192use · pixel · N 100.1200.1960.1860.154use · edges · N 860.1520.1690.2930.174use · edges · N 430.1800.3100.3070.141use · edges · N 210.2080.2960.1770.121use · edges · N 100.1620.1720.1550.087LOO · pixel · N 860.1230.1140.1120.147LOO · pixel · N 430.1550.1450.1620.190LOO · pixel · N 210.2030.1720.1860.222LOO · pixel · N 100.2600.2470.1990.253LOO · edges · N 860.0720.0680.1390.079LOO · edges · N 430.1300.1380.2260.138LOO · edges · N 210.1340.2040.1550.135LOO · edges · N 100.1670.2160.1430.199

Why: the pool substitutes for the artists

Nartists' share of all mass, 9200920192029203v(all artists) pixel, 9200920192029203
860.6960.5510.5330.6030.0630.0450.0420.056
430.8320.7290.6890.7280.0870.0780.0700.086
210.9060.8540.8000.8380.1100.1070.1000.113
100.9570.9220.8850.9160.1150.1180.1220.133

Interpretation. By pixels (and blur, colour) paying by use drifts further from Shapley as the pool grows; by edges there is no trend (P2 failed). Leave-one-out does the opposite: it drifts as the pool shrinks, because the artists then make up most of the mass and substitute for each other. No cheap rule tracks Shapley across pool sizes, so the receipt states the rule and the pool size, and exact Shapley pays wherever it is affordable.

16. M5 diagnostic: can exact credit be bought cheaply?

Exploratory (measure/m5_prune_diag.py): one trajectory, CPU float64, 64 query pixels per step, every allowed candidate computed exactly. need: the fewest candidates holding all but 1e-6 of the mass (the ceiling for any pruning). certified: candidates a scheme with a provable bound must evaluate (projection onto the top 16 principal directions).

StepPatchabarneed (oracle)certified pca16certified means
0110.0061.0001.0001.000
1110.0240.9991.0001.000
2110.0540.9841.0001.000
3110.0940.9221.0001.000
490.1440.8651.0001.000
590.2030.7351.0001.000
690.2690.5941.0001.000
790.3410.4581.0001.000
870.4160.5460.9960.997
970.4940.4400.9840.991
1070.5720.3350.9450.968
1170.6470.2380.8720.919
1250.7200.3660.7390.827
1350.7870.2630.6310.740
1450.8470.1700.5040.650
1550.8990.0930.3550.550
1630.9410.2340.3000.468
1730.9720.1120.1540.338
1830.9920.0250.0370.183

Interpretation. The posterior is broad until the last steps: an oracle saves 1.4x over the schedule, a certified bound 1.05x to 1.10x. Pruning is retired as the speed lever; 64 px receipts will be precomputed, and any structural speed-up is a declared model change.

Cost at 64 px (one full-coalition picture each, MPS float32)

LSchedulePatch sizesSeconds per picture64-coalition game, hours (upper)
32S1[3, 5, 7, 9, 11]11.50.21
64S1[3, 5, 7, 9, 11]150.82.68
64S1 patches x2[7, 11, 15, 19, 23]217.73.87
Left to right: 32 px S1; 64 px S1; 64 px with doubled patches. No drawing input.
Left to right: 32 px S1; 64 px S1; 64 px with doubled patches. No drawing input. measure/m5_cost64.png · sha256 27f1a738b035

Resolution alone does not make drawings appear; the viewer's drawing does (M4, SPLIT).

17. RESOLVE: can you tell in advance whether credit is recoverable?

Protocol measure/RESOLVE_PROTOCOL.md, frozen before the sweep (measure/resolve_freeze.json). The attribution literature retreats to crediting data groups because exact removal needs retraining; here removal is exact, so the question can be asked directly: does a bank's geometry decide whether credit to its individual members is recoverable? 16 banks of 7 from the 205 sources, 4 noise seeds, exact Shapley over 27 = 128 coalitions per game, CONTROL-constant as the baseline so the empty coalition is defined, schedule S1, MPS float32, 64 games. Primary measure R: the Spearman correlation between the per-member Shapley vectors from two different noise seeds, averaged over the 6 seed pairs. A ranking that cannot be reproduced is not credit.

Verdicts against the frozen predictions

IDPredictionResultOutcome
R1composition predictor tracks R, Spearman ≥ +0.6-0.174fails
R2narrow_msv unresolvable: R < 0.4 and ≥ 5 of 7 effective membersR 0.488, 6.94 of 7fails
R4the two value functions rank differently, cross-Spearman < 0.80.616observed
R5pixel control predictor tracks R at least as strongly0.179fails
R6composition adds nothing beyond pixel proximity-0.181observed

The headline question is answered no. R is not flat (edges 0.006 to 0.702 across banks, pixel 0.202 to 0.851); it simply does not vary with anything measured about the corpus. The hoped-for capability, telling a contributor at ingest whether their collection is individually creditable, does not follow from either predictor, and compositional vocabulary is retired as a candidate value function. R2 failing is its own small result: 7 paintings of one mountain give R = 0.488 and 6.94 of 7 effective members, indistinguishable from any other bank, so compositional near-duplication does not make contributors interchangeable here.

Control bank, before the sweep

CheckOutcomeNumbers
K1 Shapley efficiencyobservedmax |error| 2.78e-17
K2 coalition mask = physically reduced corpusobservedmax |difference| 0.0
K3 scrambled control < 1% of positive massobservedpixel 0.000
edges 0.006
blur 0.000
colour 0.000
K4 constant control < 1% of positive massobservedpixel 3.5e-04
edges 2.0e-04
blur 3.9e-04
colour 0.000

The first control run failed K4 at 2.9 to 6.5% and is kept as measure/resolve_controls.S0_failed.json. The cause was the runner, not the bank: Machine.__init__ defaults to schedule S0 and neither script had set S1, so the values reproduced M3's T5d almost exactly. Fixed and rerun. The planted duplicate pays exactly 2.0000 of du-01 alone on usage while taking the same Shapley share as its twin.

Per bank

BankcompositionpixelR pixeleff pixelR edgeseff edgesvf agreement
narrow_mixed1.01714.2170.6907.000.3336.810.464
narrow_msv1.04810.1460.7687.000.4886.940.732
span011.11114.1390.2627.000.1906.660.661
span021.28416.8870.8107.000.6966.600.545
span031.46117.1940.7507.000.7026.820.679
span041.63715.4490.8517.000.5656.670.705
ingres71.7946.4400.5187.000.6076.880.679
span051.81317.9220.2027.000.3516.750.643
span061.99113.5450.6967.000.4116.760.214
span072.16812.8010.6907.000.6376.170.500
span082.34511.2850.5307.000.0066.720.446
span092.52216.3190.4407.000.3215.860.777
span102.70014.0000.6437.000.5716.210.839
span112.87912.4870.5487.000.3046.790.438
span123.04915.9210.6437.000.4946.620.795
wide_commons3.14216.3880.2687.000.3516.330.732
Credit reproducibility R per bank, ordered by the composition predictor (pixel above, edges below)00.190.370.560.750.94narrow_mixed · pixel0.690narrow_mixed · edges0.333narrow_msv · pixel0.768narrow_msv · edges0.488span01 · pixel0.262span01 · edges0.190span02 · pixel0.810span02 · edges0.696span03 · pixel0.750span03 · edges0.702span04 · pixel0.851span04 · edges0.565ingres7 · pixel0.518ingres7 · edges0.607span05 · pixel0.202span05 · edges0.351span06 · pixel0.696span06 · edges0.411span07 · pixel0.690span07 · edges0.637span08 · pixel0.530span08 · edges0.006span09 · pixel0.440span09 · edges0.321span10 · pixel0.643span10 · edges0.571span11 · pixel0.548span11 · edges0.304span12 · pixel0.643span12 · edges0.494wide_commons · pixel0.268wide_commons · edges0.351

What was not predicted: credit is near-uniform under pixel MSE

Across all 64 games, exact Shapley under pixel gives a largest-to-smallest member share ratio with median 1.02, never above 1.06, so every game reads 7.00 of 7 effective members. In the same games usage mass varies by 2.92× and leave-one-out by 2.37×. Under edges Shapley does discriminate (ratio median 2.00) but its ranking reproduces only moderately. The three payout columns therefore disagree structurally, not marginally, on the same bank in the same run.

Alternative explanation, stated. This uniformity is equally consistent with the weakness O12 already recorded for pixel MSE, that it weights area: seven members each supplying about a seventh of a 32 px mosaic would give near-equal pixel effects for that reason alone. This run does not separate “credit is uniform” from “pixel MSE cannot see it”, and the two have opposite consequences for per-item settlement. It is carried as an open question in BRIEF section 13, testable by re-running the frozen banks with a third value function and at 64 px. Either way it is direct support for design rule 9: the value function is a declaration, and the same bank yields uniform or discriminating credit depending on which one is declared.

Scope: 32 px, banks of 7, one engine, 191 sources, two value functions. Exact Shapley is only available at this scale; nothing here speaks to banks of thousands.

Banks span the predictor from 1.017 to 3.142; the composition and pixel predictors correlate at 0.024 across them, and bank overlap is 0.18 shared members per pair (max 1), so R1 and R5 are separable and the banks are close to independent.

Stage two: attention

Machine: engine/tio/static_attention.py, Riley's static-attention construction with several heads and support-aware rank handling from Russell's library (ch. 48); 9/9 tests, including agreement with Riley's code (2.9e-15) and a brute-force Gaussian (1.0e-15). Exact vs frozen attention law: instrument/attention_law.py (ch. 49), matching the library's Study 13 fixtures to 1e-16.

ATTN1: does attention change who gets paid?

IDResultNumbers
K1 efficiencyholdsmax error 2.2e-16
K2 batched == one at a timefailsdiffering values 53964
Q1holdstv [0.272, 0.154, 0.270, 0.086]
Q2failstv global local [[0.163, 0.117], [0.502, 0.054], [0.223, 0.051], [0.742, 0.078]]
Q3holdstop local none [[0.351, 0.182], [0.259, 0.210], [0.343, 0.209], [0.229, 0.186]]
Familyeffective images per patch, steps 0, 3, 6, 9, 12, 15, 18 (seed 9300)
NONE421.091383.640319.839240.743155.47672.2117.090
LOCAL384.733207.265105.73950.58219.4534.5441.106
GLOBAL270.29650.01118.2455.7832.0941.2071.004
Rows: seeds 9300 to 9303. Pairs: output and its nearest training image, for none, local, global attention.
Rows: seeds 9300 to 9303. Pairs: output and its nearest training image, for none, local, global attention. measure/attn1/attn1_panel.png · sha256 df80c72fdc20
SeedFamilynearest RMS (levels)nearest owner
9300NONE54.214rb-09
9300LOCAL38.495rb-09
9300GLOBAL22.160kk-15
9301NONE55.787kk-15
9301LOCAL40.786kk-19
9301GLOBAL37.127vg-09
9302NONE55.666rb-09
9302LOCAL30.810du-07
9302GLOBAL47.809du-07
9303NONE56.345rb-09
9303LOCAL31.495du-12
9303GLOBAL0.000met-dp-20645-001

Interpretation. Attention shares information across patches; the posterior collapses toward one image, pay concentrates, use drifts from Shapley, and with global attention one output is a verbatim copy of an unpaid commons painting while the artists are paid 100%. Receipts now report the nearest training image and the players' total effect beside the shares.

ATTN2: do frozen-attention receipts report the source?

IDResultNumbers
K1 weights sum to 1holdsmax error 3.3e-15
K2 row inversionholdsmax error 5.6e-16
R1holdsmean tv steps 10 18 [0.888, 0.526, 0.523, 0.751]
R2holdstv last step5 [[1.000, 0.424], [0.556, 0.335], [0.508, 0.488], [1.000, 0.255]]
R3holdstop differs last [True, True, True, True]

Last step, beta 4: exact posterior r, then the frozen receipt m, over cezanne, durer, ingres, kollwitz, rembrandt, vangogh, pool.

betaseedrrrrrrrmmmmmmm
494002.29e-3216.45e-1690.0003.25e-481.0002.47e-428.13e-1502.32e-090.4850.0350.4802.81e-885.27e-1571.24e-68
494010.0001.0000.0001.44e-190.0002.77e-2153.24e-1663.04e-080.4440.0010.5558.26e-639.40e-1482.34e-89
494022.20e-2974.40e-2950.0001.0002.05e-2266.09e-1548.70e-2010.0010.4980.0080.4928.21e-362.10e-731.98e-45
494035.28e-1792.53e-1080.0002.91e-322.43e-781.0001.04e-651.83e-050.4843.07e-040.5161.34e-766.51e-1201.95e-43

Interpretation. Plugging realised attention into the static formula pays a near-fixed Dürer/Kollwitz split whatever the picture, while the exact posterior names a different artist per seed. Static-attention receipts are not receipts for attention models. Limits: scalar tokens, one head, 16 px greyscale, row retained; posterior accounting, not removal credit.

Reconciliation with Riley Peterlinz's repository

github.com/CardiacMangoes/diffusion at commit 6b757a546369, used with his permission. Script measure/riley_reconcile.py, CPU float64.

IDCheckLargest difference
R1Whole-image score vs our 'is' variant (time conversion)1.2e-14
R2Static-attention form, patch 1, S = I, vs our 'ls' variant, by jitterjitter 1e-05: 1.3e-06, jitter 1e-07: 2.4e-08, jitter 1e-09: 3.8e-08
R32 x 2 Gaussian algebra vs brute force (dense S)3.9e-16
R4Removal exact in the static-attention form (renormalisation; ledger identity)3.3e-16; 8.9e-16

Our engine equals the repository's whole-image form, and its static-attention form at patch size 1 with S = I up to the jitter level. Removal is exact in the static-attention form, so the removal instrument applies to it unchanged. Russell's library (ch. 48) extends the same construction to several heads with an exact rank condition; engine/tio/static_attention.py implements that and is checked against both (9/9 tests).

Receipts format 3: context and planted controls

Every receipt states the players' total effect, their share of all posterior mass and the nearest training image (copy flag), and runs its own planted controls (T0FIX game B on its own noise and pool; rules F1 to F3 from T0FIX, registered on the 86-painting pool). Main games are bit-identical to formats 1 and 2. Demo receipts (pool 10) and paid receipts (pool 86, receipt/receipts_full/, made 2026-10-02 by receipt/make_paid.py, which calls make.py unchanged), edges:

Pool: seedcopy ratio (rule 1.6 to 2.4)scrambled max share (< 0.01)constant max share (< 0.01)total effectnearest training image
10: 90001.813 pass0.000 pass0.012 fail0.249in-17, 39.604 (none)
10: 90011.855 pass0.022 fail0.004 pass0.237kk-19, 41.766 (none)
10: 90021.843 pass0.003 pass0.006 pass0.322cz-08, 41.981 (none)
10: 90031.820 pass0.001 pass0.002 pass0.373kk-20, 46.602 (none)
86: 90001.956 pass0.000 pass0.008 pass0.104in-17, 43.788 (none)
86: 90011.963 pass0.002 pass0.002 pass0.073kk-19, 42.439 (none)
86: 90021.994 pass0.004 pass0.005 pass0.101kk-20, 47.013 (none)
86: 90031.906 pass7.27e-04 pass3.79e-04 pass0.156vg-03, 48.937 (none)

With the 10-painting demo pool the nonsense contributors' shares exceed the 1% rule on 2 of 4 seeds (the 86-pool test never exceeded 0.0036). Decision: paid receipts use the full pool; the visual demo keeps the 10-pool, labelled. On the full pool every control passes on all four seeds.

Sketch receipts

receipt/make_drawing.py: the drawing as one paid player at strength k = 14, pixels stored for replay, paper and lines as description. Edges:

DrawingShapley shares (paid)description: paper, linescopy flag
1c2e1bd456kollwitz 0.062, drawing 0.938ground 0.448, lines 0.509none
6922bc251fkollwitz 0.057, drawing 0.943ground 0.417, lines 0.542none

6922bc251f is the circle test drawing (seed 9100): it matches M4's frozen run to three decimals and its replay is bit-identical. 1c2e1bd456 was made from the page.

Running elsewhere: Colab Tesla T4 (O9)

Tesla T4, Python 3.13.15, torch 2.11.0+cu128 (this Mac: torch 2.12.0.dev20260315, MPS). Shipped receipt replayed on CUDA: worst value difference 0.005 of the tolerance. Fresh receipt on CUDA against the shipped one:

Value functionworst |dv| / toleranceShapley shares moved (TV)
pixel0.0031.7e-07
edges0.0055.9e-07
blur0.0051.1e-07
colour0.0000.0e+00

Engine T3 (masses sum to 1) measured 1.5e-5 in float32 on CUDA against a 1e-5 threshold taken from MPS runs; a plain log-sum-exp on the T4 is tight (2.4e-7), and the error grows at the last, lowest-noise step with the log-mass magnitude. T3 is now pass/fail in float64 and a reported measurement in float32.

Stage two (O7): the bridge to trained networks

Protocol measure/O7_PROTOCOL.md, frozen. 64 px, demo pool, width-128 convolutional networks (patch-ledger recipe, ported with provenance). Phase A trains the full network, calibrates the machine to it and gates on agreement (median r >= 0.85); phase B trains six leave-one-artist-out networks and a second full network (training-noise floor); phase C (direction, resolvability, magnitude) runs after.

Gate: median r 0.970 vs 0.85: passed.

2026-10-01 23:26:55 end (exit 0) python3 stage2/train.py --L 64 --seed 0 --steps 10000 --tag no_rembrandt --exclude rembrandt
2026-10-01 23:26:55 start python3 stage2/train.py --L 64 --seed 0 --steps 10000 --tag no_vangogh --exclude vangogh
done no_vangogh in 6008s
2026-10-02 01:07:04 end (exit 0) python3 stage2/train.py --L 64 --seed 0 --steps 10000 --tag no_vangogh --exclude vangogh
2026-10-02 01:07:04 start python3 stage2/train.py --L 64 --seed 1 --steps 10000 --tag full_s1
done full_s1 in 6007s
2026-10-02 02:47:13 end (exit 0) python3 stage2/train.py --L 64 --seed 1 --steps 10000 --tag full_s1
2026-10-02 02:47:13 PHASES A AND B COMPLETE

Phase C results

IDResultNumbers
P1holdsp exact 0.001
P2failsresolvable cezanne False; durer False; ingres False; kollwitz False; rembrandt True; vangogh False
P3failsspearman edges -0.143
P4failsfirst step 0.040
last step 0.119

D: rows are the machine's predicted change for removing an artist, columns the network trained without an artist; diagonal in bold.

prediction \ networkcezannedureringreskollwitzrembrandtvangogh
cezanne0.148-0.0520.0540.0660.039-0.038
durer-0.0540.051-0.062-0.035-0.1220.029
ingres0.1040.0850.177-0.0770.098-0.170
kollwitz-0.029-0.051-0.0020.143-0.050-0.156
rembrandt0.0080.015-0.0100.1180.1840.265
vangogh-0.0450.039-0.067-0.111-0.1460.076

F and M (edges): finished-image distance from full_s0, median over 16 noises; training-noise floor (full_s0 vs full_s1) 0.064.

Artistnetwork removalmachine removalabove floor
cezanne0.0080.016no
durer0.0260.012no
ingres0.0230.025no
kollwitz0.0360.036no
rembrandt0.1250.008yes
vangogh0.0260.024no
tmean diagonal (direction agreement)
0.8500.040
0.8000.069
0.7500.084
0.7000.122
0.6500.159
0.6000.145
0.5500.186
0.5000.170
0.4500.130
0.4000.189
0.3500.162
0.3000.129
0.2500.096
0.2000.146
0.1500.119

Interpretation. Direction transfers at 64 px (p = 1/720, positive at every step); size does not (Spearman across artists negative); single-artist removal is visible above training noise for one artist. Limits: one start seed for the leave-out networks, one network family.

18. Re-trace every step

Run from this experiment's folder, in order (steps that need data or clones outside it say so). Hashes are the first 12 hex digits of SHA-256 at the time this page was built; if a script's hash differs from the one here, the results on this page came from a different version of it.

#StepCommandProducesScript
1Engine testspython3 engine/tests/test_engine.pyengine/tests/last_run.json 3b97fdf3f565engine/tests/test_engine.py 1f5521c3cc7b
2Benchmark (GPU)python3 bench/bench_engine.pybench/results_mps_float32.json 1d6e80b76445bench/bench_engine.py 4fcea406e35d
3Benchmark (float64 CPU)python3 bench/bench_engine.py --cpu64bench/results_cpu_float64.json 8f307079933dbench/bench_engine.py 4fcea406e35d
4Build corpuspython3 corpus/build_corpus.pycorpus/manifest.json 01b1b92124cecorpus/build_corpus.py 1072985430ef
5Duplicate scanpython3 corpus/scan_duplicates.pycorpus/duplicates.json e30fd2e80906corpus/scan_duplicates.py 0fe1475cf853
6Met verificationpython3 corpus/verify_met.pycorpus/met_verification.json 5f14dab0c722corpus/verify_met.py 9156bfaea215
7Paper measurementpython3 measure/paper_credit.pymeasure/paper_credit.json 662b0ad637cameasure/paper_credit.py b1145ec2d564
8Crop-scale testpython3 measure/crop_scale.pymeasure/crop_scale.json e854feb59aacmeasure/crop_scale.py 9104dbe9f641
9M3 freezepython3 measure/m3_run.py freezemeasure/m3_freeze.json c10c7dc564e9measure/m3_run.py 8e83d228151e
10M3 runpython3 measure/m3_run.py runmeasure/m3/A_6000.json 8f66f0db0ce5measure/m3_run.py 8e83d228151e
11M3 analysispython3 measure/m3_analyze.pymeasure/m3_results.json 0a79d4a06046measure/m3_analyze.py 13be0a13f0ba
12t = 1 diagnosticpython3 measure/t0_diagnostic.pymeasure/t0_diagnostic.json f9567e2092a3measure/t0_diagnostic.py 9599977854f6
13Chaos floorpython3 measure/chaos_floor.pymeasure/chaos_floor.json 2dd8b2aca3cemeasure/chaos_floor.py d6eab1e7f79f
14T0FIX freeze and runpython3 measure/t0fix_run.py freeze; python3 measure/t0fix_run.py runmeasure/t0fix/A_6000.json 69bb3eec20bdmeasure/t0fix_run.py 4b700e9fa99c
15T0FIX analysispython3 measure/t0fix_analyze.pymeasure/t0fix_results.json e47074c40c7dmeasure/t0fix_analyze.py ada4b2f8f36d
16K2 float64 re-checkpython3 measure/k2_float64.pymeasure/k2_float64.json 9861143c79e5measure/k2_float64.py 39a843277ebc
17Pool-size testpython3 measure/commons_size.pymeasure/commons_size.json 72b2f836e6e7measure/commons_size.py 9237a0475440
18Demo receiptssh receipt/make_demo.shreceipt/make_demo.log 895881d63a12receipt/make.py ba81a7eb3a44
19Page datapython3 page/build_data.pypage/data/index.json 380fe0a37aebpage/build_data.py 2ae96bad375c
20Receipt tamper testspython3 receipt/tests/test_receipt.py <receipt>receipt/tests/last_run.json e6289e6836c2receipt/tests/test_receipt.py 1033ff72201c
21Test drawingspython3 corpus/inputs/make_test_drawings.pycorpus/inputs/test_drawings.json b598255eb230corpus/inputs/make_test_drawings.py 5762363a6b3a
22M4 freeze and runpython3 measure/m4_run.py freeze; python3 measure/m4_run.py runmeasure/m4/9100_house_k9.json ea3603f7b1bbmeasure/m4_run.py bcdaf9f443fb
23M4 analysispython3 measure/m4_analyze.pymeasure/m4_results.json c55d4a6dfb76measure/m4_analyze.py fd4074420e2a
24M4 post hoc: blank sheetpython3 measure/m4_blank_posthoc.pymeasure/m4_blank_posthoc.json 8b1fb096796ameasure/m4_blank_posthoc.py d10f3eae4c64
25SPLIT testspython3 instrument/tests/test_parts_game.pyinstrument/tests/last_run_parts.json 1c4704082c82instrument/tests/test_parts_game.py a8653355d292
26SPLIT freeze and runpython3 measure/split_run.py freeze; python3 measure/split_run.py runmeasure/split/9100_house_k14.json f7cffcded822measure/split_run.py 072045502314
27SPLIT analysispython3 measure/split_analyze.pymeasure/split_results.json a38c29a4f7a7measure/split_analyze.py 90c479c7d7c4
28SPLIT panel and splitting tablepython3 measure/split_panel.pymeasure/split_splitting.json 8332cc8d56fbmeasure/split_panel.py 73bd68f8483b
29Page drawing datapython3 page/build_drawings.pypage/data/drawings.json 20bc58e4a58epage/build_drawings.py 7d015aae4d07
30POOL freeze and runpython3 measure/pool_run.py freeze; python3 measure/pool_run.py runmeasure/pool/9200_N86.json ec7927a1523fmeasure/pool_run.py 3cc648a8e78d
31POOL analysispython3 measure/pool_analyze.pymeasure/pool_results.json 54bf89103935measure/pool_analyze.py 038893411204
32M5 pruning diagnosticpython3 measure/m5_prune_diag.pymeasure/m5_prune_diag.json fcef4ecf29bameasure/m5_prune_diag.py 144ffb34ac90
33M5 cost at 64 pxpython3 measure/m5_cost64.pymeasure/m5_cost64.json 07ed2772dfc0measure/m5_cost64.py 01af1aa5409b
34Bundle for running elsewherepython3 colab/build_notebook.py; python3 colab/make_bundle.pycolab/take-it-out-bundle.zip 825ba5000967colab/make_bundle.py 810948542100
35Static-attention testsRILEY=<clone> python3 engine/tests/test_static_attention.pyengine/tests/last_run_static_attention.json ca27afb147bdengine/tests/test_static_attention.py fb66c5f5544e
36ATTN1 freeze, run, analysispython3 measure/attn1_run.py freeze; python3 measure/attn1_run.py run; python3 measure/attn1_analyze.pymeasure/attn1_results.json 0d0dab13e5b6measure/attn1_run.py 25944cba7e2a
37ATTN1 post hoc copiespython3 measure/attn1_posthoc_copy.pymeasure/attn1_posthoc_copy.json c5302199964fmeasure/attn1_posthoc_copy.py 8c47e94c303e
38Attention-law testspython3 instrument/tests/test_attention_law.pyinstrument/attention_law.py f57fed0fb7b1instrument/tests/test_attention_law.py 90ccc643c60f
39ATTN2 freeze, run, analysispython3 measure/attn2_run.py freeze; python3 measure/attn2_run.py run; python3 measure/attn2_analyze.pymeasure/attn2_results.json 62b1a1e8c0fbmeasure/attn2_run.py a2536e255372
40Riley reconciliationRILEY=<clone> python3 measure/riley_reconcile.pymeasure/riley_reconcile.json ce6a435c19b5measure/riley_reconcile.py 5399e483e960
41Statistics on the registered resultspython3 measure/intervals.pymeasure/intervals.json 41e550aee90ameasure/intervals.py 6e2123a17c0a
42Arithmetic on RFS's scale assumptions (reads RFS_training, outside this folder)python3 measure/rfs_scale.pymeasure/rfs_scale.json 1214545ac0b6measure/rfs_scale.py 88eab7d40141
43O7 phases A and B (freeze, train, calibrate, gate)python3 stage2/o7.py freeze; zsh stage2/overnight.shstage2/nets/gate.json 86bf7acfe81astage2/overnight.sh 42acf1bab2da
44O7 phase C (freeze, run)python3 stage2/phase_c.py freeze; python3 stage2/phase_c.pymeasure/o7_results.json e4064aa6644astage2/phase_c.py dcc3fa034e07
45O6 cost tablepython3 measure/o6_cost.pymeasure/o6_cost.json 704c220a07f1measure/o6_cost.py 2c01ff11bb43
46Paid receipts (86-painting pool)python3 receipt/make_paid.py 9000 9001 9002 9003receipt/receipts_full/seed9000_edges_07892a0b7f.json 6f62372061cdreceipt/make_paid.py c34a15b63ddb
47Frozen versions of later-edited filespython3 measure/frozen_code/check.pymeasure/frozen_code/README.md 871263bab804measure/frozen_code/check.py c3e475d8c0c7
48Findings reportpython3 report/build_report.pyreport/FINDINGS.html c262c7cec151report/build_report.py f54284e0bc59
49This labbookpython3 labbook/build_labbook.pylabbook/labbook.html beb681a4fe08labbook/build_labbook.py 870ea564e602

19. Sources

From BRIEF.md section 11, read at build time.

Status key: R read in full; P read in part; U used as data; X external, not yet read. Originals are never edited; copies are made into this project with provenance.

11.1 Local sources (paths relative to the local research archive)
PathWhat it isStatusUse
image-steering-accreditation-claude/patch-ledger/pl/machine.pyExact LS/ELS/IS machines, contributor ledger, coalition masking, DDIM cosine sampler (236 lines)REngine base (M1)
.../patch-ledger/pl/corpus.pyCorpus loader, views rule, caching (73 lines)RCorpus pattern (M2)
.../patch-ledger/tests/test_machine.py16 self-tests (221 lines)PPort and extend (M1)
.../patch-ledger/README.md, PROTOCOL.md, RESULTS.mdDesign, frozen protocol, verdictsRFindings, discipline
.../patch-ledger/PHASE3_TEST.md, PHASE3_PROTOCOL.md, PHASE3_RESULTS.md, PHASE3B_RESULTS.md, SCORE_TEST_PROTOCOL.md, REPLICATION_PROTOCOL.mdTrained-network bridge testsPStage two design (M7)
.../patch-ledger/CODE_COMPARISON.mdLine-by-line check against Kamb and Ganguli's released code, calibration recipePSchedule calibration
.../patch-ledger/VALUE_FUNCTION_PROTOCOL.md, value_functions.py, DIAL_PROTOCOL.md, redundancy_dial.py, group_ratios.pyValue functions, redundancy sweep, group ratiosPPayout columns
.../patch-ledger/train.py, score_test.py, score_test_rep.pyNetwork training and single-step score testPStage two
.../patch-ledger/paper/PATCH_LEDGER_PAPER.mdWorking paper, related work, references with provenancePLiterature (11.3)
image-steering-accreditation-claude/MATH.md, README.md, PROTOCOL.mdSteering exposure statement, settlement mathX (to read in M3)Payout policy
image-steering-accreditation/library/pdf/kamb-2025-local-score.pdfKamb and Ganguli 2025R (2026-09-18)Math 6.2
image-steering-accreditation/START_HERE.md, MATH.md, CLAIMS.md, GAPS.mdResearch database (original, read-only)PBackground
github.com/CardiacMangoes/diffusion, commit 6b757a5 (clone outside the project)Riley's code: AnalyticScore, AnalyticScoreDiT (static attention), DiT and DiT_ablated, training, 2D toy notebook. No licence file; Riley's permission to use freely confirmed by Russell 2026-10-01 (copies keep provenance)R, run (measure/riley_reconcile.py)Math 6.1, M1 reconciliation, stage two
RFS_training/training-data.zip, training-data.html (RFS, 2026-10-01)A complete toy training-data release from a procedural stage: nine datasets (t2i, i2svg, i2code, i2maps, i2i_edit on a five-part request, sft_requests, pref_pairs, seq_camera, pack_adapter with consent gating), tokenizers, attention, an evaluation harness with family-bootstrap intervals, a trained toy checker, scale arithmetic, and a mapping from project records to training rows ("shares are not influence")R, run (check.py 109/109; rebuild reproduces the release fingerprint, 110/110; evaluate.py reproduces report.json byte-identical; toy training not run)Evaluation practice (intervals, family splits, graded graders); the influence and tombstone questions this project measures
image-steering-accreditation/references/48_conditional_denoising_attention.md, 49_input_dependent_attention_laws.md, 75_..., 46_... (Russell's library; Studies 12 and 13 in its experiments/)Static attention with several heads, rank condition, singular support; exact input-dependent scalar attention law; frozen-window posterior can reverse source preference (C72); posterior accounting vs removal vs allocationR (2026-10-01)Stage two design, 6.1
Riley/COMPLETE Derivation.pdfRiley's derivation, 13 pp.R (pp. 1 to 7 text)Math 6.1
Riley/Research_Presentation.pdfDiffusion with Tracing, without Training, 34 pp.XMath 6.1, slides
Riley/Attribution Slides.pdf, research_averages.pdfThree-case comparison; averagesXPage design reference
intonarumori/Instrument/untitled folder 3/riley_diffusion_transformer_playground.html (also in participant kit assets)Riley's playground pageXReference
Riley's current code repositoryHis implementation of the derivation; requested 29 Sep and updated by Riley; received 2026-10-01 as github.com/CardiacMangoes/diffusion (row above)Received and reconciled 2026-10-01LOG.md, measure/riley_reconcile.py
hands/corpus/<artist>/manifest.json and imagesFive artists' public-domain sheets with museum, accession, licence, URL (Cézanne 15, Dürer 13, Ingres 20, Kollwitz 20, Van Gogh 17)UCorpus (M2)
know-between/work/know-between/books/rembrandt/Rembrandt's 12 sheets (sixth hand)UCorpus (M2)
hands/tools/build_book.py, build_*_corpus.pySheet cleaning and corpus buildPCorpus cleaning
hands/library/*.hand.json, hands/studio/Hand files and studio receiptsRReceipt design reference
ZTOYBOX/Museum Pics/ (DP*/DT* files, 100)Met Open Access (CC0) imagesUCommons pool
Cezanne/CezanneReal/ (9)Mont Sainte-Victoire series (public domain)USubstitutes test set
11.3 Literature

Checked means the source page or full text was read on the date shown (carried from the patch-ledger paper unless stated).

ReferenceRelevanceStatus
Finn, Keller, Theodosis, Ba, Origins of Creativity in Attention-Based Diffusion Models, arXiv 2506.17324 (2025)Extends the ELS machine to a CNN with one final self-attention layer; content-dependent attention, solved only in a top-1 simplification; 4x4 toy images (consistency 64% vs 11% for CNN alone)Abstract and HTML summary read 2026-10-01
Niedoba, Zwartsenberg, Wood, Filtered Posterior Mean Collections, arXiv 2605.24192 (2026)Unifies patch-based analytic denoisers; conditioning by diagonal precision only (no mixing across positions, no attention); r^2 0.76 vs networks on CIFAR-10Abstract and HTML summary read 2026-10-01
Niedoba et al., Towards a Mechanistic Explanation of Diffusion Model Generalization, arXiv 2411.19339 (ICML 2025)Patch-based local empirical denoisers approximate network denoisers; code plai-group/pspcSearch result 2026-10-01
Li, Min, Vidal, Transformers Learn the Optimal DDPM Denoiser for Multi-Token GMMs, arXiv 2604.10074 (2026)Trained transformer attention approximates the MMSE estimator, population objective on Gaussian mixtures (not training-set denoisers)Abstract read 2026-10-01
Haddadi et al., Denoising Diffusion Generative Models Secretly Calculate Attentions, arXiv 2609.00885 (2026)The empirical optimal denoiser's softmax over training data is itself an attention computationAbstract read 2026-10-01
Kamb, M. and Ganguli, S. (2025). An analytic theory of creativity in convolutional diffusion models. ICML 2025; arXiv:2412.20292. Code: github.com/Kambm/convolutional_diffusion (MIT)The engineRead in full, code compared, 2026-09-18
Niedoba, M., Zwartsenberg, B., Murphy, K. and Wood, F. (2024). Towards a mechanistic explanation of diffusion model generalization. arXiv:2411.19339Concurrent patch-based local score modelCited from Kamb and Ganguli; X
Zhao, Y., Du, C., Zheng, X., Pang, T. and Lin, M. (2025). Nonparametric data attribution for diffusion models. arXiv:2510.14269Attribution built on the analytic machine, validated against 64 retrained networksFull text read 2026-09-19
Briq, R., Fried, O., Kamp, M. and Kesselheim, S. (2026). Tracing generated samples to training-data clusters in flow-matching models. arXiv:2608.30081Closed-form cluster attribution, flow matchingChecked 2026-09-19
Dai, Z. and Gifford, D. K. (2026). Outputs of generative diffusion models are often unattributable. Nature CommunicationsWhy the box matters: large-model outputs spread across redundant dataChecked 2026-09-19
Lin, C., Lu, M., Kim, C. and Lee, S.-I. (2025). An efficient framework for crediting data contributors of diffusion models. ICLR 2025; arXiv:2407.03153Shapley credit for diffusion contributorsChecked 2026-09-19
Wang, J. T., Deng, Z., Chiba-Okabe, H., Barak, B. and Su, W. J. (2024). An economic solution to copyright challenges of generative AI. arXiv:2404.13964Shapley-based royaltiesChecked 2026-09-19
Wang, S.-Y., Hertzmann, A., Efros, A. A., Zhu, J.-Y. and Zhang, R. (2024). Data attribution for text-to-image models by unlearning synthesized images. NeurIPS 2024; arXiv:2406.09408States this project's premise from the other side: finding influential images requires retraining from scratch, which is infeasible, so they simulate unlearning and validate against retraining as the gold standard. The strongest external citation for why exact removal mattersAbstract page read 2026-10-14
Data attribution for diffusion models: timestep-induced bias in influence estimation. arXiv:2401.09031 (2024)Diffusion-TracIn and Diffusion-ReTrac; per-timestep influence is biased by a dominating-norm effect. Bears on whether per-step credit is a meaningful quantitySearch result 2026-10-14
Rola, P. (2026). An equality condition for the Dobrushin bound on attention rollout and how often it holds in trained transformers. arXiv:2610.05558, 4 October 2026The published version of the contraction result in RFS_transformers, with the equality condition those notes lack and measurements across 8 trained models. The reason not to build contraction experiments in this projectAbstract page read 2026-10-14
Dong, Y., Cordonnier, J.-B. and Loukas, A. (2021). Attention is not all you need: pure attention loses rank doubly exponentially with depth. ICML 2021; Kim, H., Papamakarios, G. and Mnih, A. (2021). The Lipschitz constant of self-attention. ICML 2021; arXiv:2006.04710; Mitrophanov, A. Yu. (2005). Sensitivity and convergence of uniformly ergodic Markov chains. J. Appl. Prob.Together these place the mathematics in RFS_transformers: rank collapse, attention sensitivity, and the ergodicity-coefficient perturbation bound its Theorem 2 has the shape ofSearch results 2026-10-14
Ghorbani, A. and Zou, J. (2019). Data Shapley. ICML 2019Shapley for dataStandard reference, X
Park, S. M. et al. (2023). TRAK. ICML 2023Gradient attribution baseline, LDS evaluationStandard reference, X
Zheng, X., Pang, T., Du, C., Jiang, J. and Lin, M. (2024). Intriguing properties of data attribution on diffusion models. ICLR 2024; arXiv:2311.00500D-TRAK, LDS on diffusion. Reports that design choices lacking theoretical justification beat principled baselines by a large margin on the linear datamodeling score and on counterfactual evaluation. A caution for O3: exactness here may not score better on their benchmarksAbstract page read 2026-10-14
Wang, S.-Y., Efros, A. A., Zhu, J.-Y. and Zhang, R. (2023). Evaluating data attribution for text-to-image models. ICCV 2023 (code: github.com/peterwang512/gendataattribution)Customization-based ground truthStandard reference, X
Nichol, A. and Dhariwal, P. (2021). Improved denoising diffusion probabilistic modelsCosine schedule used by the engineStandard reference, X
Song, J., Meng, C. and Ermon, S. (2021). DDIM (arXiv:2010.02502)SamplerStandard reference, X
SAGA (rohit-kundu.github.io/SAGA)Attribution method named in discussionX, read before M3

---

20. Log

From LOG.md, newest first.

2026-10-14 (RESOLVE sweep complete: the headline prediction FAILS, and credit is near-uniform)

64 bank-seed games, 16 banks of 7, 4 seeds, 128 coalitions each, schedule S1, MPS float32. Run against resolve_freeze.json; the six games that survived a session crash mid-run verified against the freeze and were kept, the rest resumed. Results in measure/resolve_results.json, per-game files in measure/resolve/.

Verdicts against the frozen predictions
IDPredictionResultOutcome
R1Composition predictor tracks credit reproducibility, Spearman >= +0.6-0.17fails
R2narrow_msv unresolvable: R < 0.4 and >= 5 of 7 effective membersR = 0.49, 6.94 of 7not observed
R4The two value functions rank members differently, cross-Spearman < 0.80.62observed
R5Pixel control predictor tracks R at least as strongly+0.18fails
R6Composition adds nothing beyond pixel proximity (partial < +0.3)-0.18composition adds nothing

The headline question is answered no. Credit reproducibility is not predicted by the bank's geometry, in either space. R is not flat (edges: 0.006 to 0.702 across banks; pixel: 0.202 to 0.851), it simply does not vary with anything we measured about the corpus. So the hoped-for product capability, telling a contributor in advance whether their collection is individually creditable, does not follow from either predictor. The vocabulary-as-value-function idea is retired, which is the reason this was run before building it.

R2 failing is its own small result: 7 paintings of the same mountain give R = 0.49 and 6.94 effective members, indistinguishable from any other bank. Compositional near-duplication does not make contributors interchangeable in this posterior.

The larger finding, which was not pre-registered

Across all 64 games, exact Shapley under pixel MSE assigns essentially uniform credit: the ratio between the largest and smallest member share has median 1.02 and never exceeds 1.06, so the effective number of credited members is 7.00 of 7 in every game. In the same games, usage mass varies by 2.92x and leave-one-out by 2.37x, median.

Under the edge value function Shapley does discriminate (share ratio median 2.00), but the ranking it produces reproduces across noise seeds only moderately (R median 0.45) and unpredictably.

So the three payout columns do not disagree at the margin, they disagree structurally: usage says some members matter three times more than others, Shapley-on-pixels says every member is equal, and leave-one-out says something else again. TV(use, shapley) median 0.144 on pixel and 0.112 on edges.

Alternative explanation, stated: the uniformity under pixel MSE is consistent with the weakness O12 already recorded for that value function, that it weights area. Seven members each supplying about a seventh of a 32 px mosaic would produce near-equal pixel effects for that reason alone. This run does not separate "credit really is uniform" from "pixel MSE cannot see the difference", and the edge criterion exists in this project precisely because of that failure mode. Design rule 9 gains direct support: the value function is a declaration, and the same bank yields uniform or discriminating credit depending on which one is declared.

Scope

32 px, banks of 7, one engine, 191 sources, two value functions. Exact Shapley is only available at this scale. Nothing here speaks to banks of thousands.

2026-10-14 (RESOLVE steps 1 and 2; protocol frozen, sweep not yet run)

Banks built and the control bank checked. No sweep result exists. measure/resolve_freeze.json written 2026-10-14T14:21:55Z over the protocol, the four scripts, the bank file, the engine, instrument/removal.py, corpus/load.py and the manifest.

Five corrections came out of doing steps 1 and 2, all before any frozen result.

Control bank, schedule S1, after the fix: all four pass. K1 efficiency 2.78e-17; K2 coalition mask equals the physically reduced corpus at exactly 0.0 on CPU float64; K3 scrambled 0.000 to 0.006 of positive Shapley mass; K4 constant 0.0002 to 0.0004, against 0.029 to 0.065 under S0. The planted duplicate pays exactly 2.0000 of du-01 alone on usage while taking the same Shapley share as its twin (0.0058 each on edges).

Banks (measure/resolve_banks.json): six of eight, composition predictor from 0.978 to 3.053 (3.1x). The composition and pixel predictors correlate at Spearman +0.60 across the banks and dissociate usefully: ingres8 is the closest bank in pixel space (6.4) but mid-range in composition (1.6).

Baseline decided: CONTROL-constant alone for the sweep banks, because the POOL round measured that a commons pool substitutes for removed members and would mask the ranking R is trying to reproduce; the commons pool for the control bank, so it matches M3 game B unchanged.

Re-cut before any run, same day: 6 banks of 8 became 16 banks of 7. The first freeze was discarded unused. Reason: R1, R5 and R6 are correlations across banks, so the bank count is the sample size for the headline claim, and 6 is not enough. At 6 banks the registered R1 threshold of +0.6 carries p = 0.21 two-tailed and significance would need rho = 0.81; at 16 banks the same +0.6 gives p = 0.014 and the threshold for p < 0.05 falls to 0.50. Cost is 32 images, 2.7 min per bank-seed, 2.9 h for 16 x 4, against 2.5 h for the underpowered version. Trading one member per bank for ten more banks barely changes what the question means and is the difference between answerable and not.

Two unplanned improvements came with it. The twelve filler banks are drawn by binning 3,000 seeded candidates on the predictor and taking one per bin, so coverage of the x axis is built rather than hoped for, and composition now spreads evenly from 1.02 to 3.14. And across the 16 stratified banks the composition and pixel predictors correlate at +0.02, against +0.60 across the old 6, so R6's partial correlation is no longer fighting collinearity. Bank overlap is 0.18 shared members per pair, maximum 1.

Frozen again 2026-10-14. All 16 banks dry-load at 7 players, 32 images, 19 schedule steps (S1).

Next: python3 measure/resolve_run.py run (about 2.9 hours, resumable), then resolve_analyze.py.

2026-10-14 (prior-art sweep on RFS's transformer notes; RESOLVE drafted, not frozen)

No run. Prior-art sweep on RFS_transformers and on the attribution literature, with the results added to BRIEF 11.3 (one row upgraded, four added).

2026-10-02 (Patch Ledger paper, version 2)

report/build_paper_v2.py builds ~/Documents/parallaxmetrology/patch_ledger_paper.v2.html from the first draft there (read only, unchanged) plus this project's frozen results, every number read from the result files. Added: section 3.10 (the blind first step: M3 T5d, the t = 1 and chaos-floor diagnostics, T0FIX, the float64 K2 recheck), section 4.6 (O7 at 64 px), key findings 12 and 13, design rule 8, a related-work paragraph, and rows or items in the evidence ledger, sections 6 to 8 and appendices B and C; two references (Lin, S. et al. 2024; Xie et al. 2024). Prior-art search on 2026-10-02: the mechanism (the terminal step predicts the data mean) and timestep bias in influence estimators are known; not found: the effect as a real counterfactual change paid by exact credit, measured with planted null sources, with starting below pure noise as the remedy. Stated in the paper: the first draft's study 1 sampled from t = 1, so its numbers include the vote and have not been rerun. Then added: section 3.11 (study 1's usage, duplicate and generation-time-input findings re-tested on this corpus under T0FIX F3/F4, M4 D1/D3, POOL P1/P3; SPLIT post hoc), key finding 14, design rule 9 (declare the unpaid pool and each party's division), the 64 px size result beside section 4.5's "No evidence", and section 3.10 in the reading guide by role.

2026-10-02 (paid receipts on the full pool; two frozen versions preserved)

Paid receipts, seeds 9000 to 9003, 86-painting pool (receipt/make_paid.py, make.py unchanged; receipt/receipts_full/): every planted control passes on 4 of 4 seeds (constant at most 0.78%, scrambled at most 0.37%, copy ratio 1.91 to 1.99; the 10-painting demo pool failed one control on 2 of 4). With the full pool the six artists hold 48% to 63% of the posterior mass (demo 89% to 94%) and their total effect under edges is 0.073 to 0.156 (demo 0.237 to 0.373). Shapley shares, edges: Ingres first on every seed (0.25 to 0.27). No copies (nearest training image 42.4 to 48.9 levels against typical 72.8 to 77.6). Verifier on every receipt: all checks pass. Page: a Pool selector (10 paintings, visual demo / 86 paintings, paid receipts); browser-checked on seed 9000 with a 4-combination replay (bit-identical, V1 to V7 pass). Report finding 15, built list and open items, labbook receipts section and status rows (M6, O6) updated.

Freeze audit while preparing the package: 91 frozen file hashes match; two do not, both engine/tio/static_attention.py (ATTN1 and ATTN2 froze it). Traced from the session record: after ATTN1 the documented batch-invariance fix (above, ATTN1 K2); after ATTN2 a docstring wording change only (code identical with docstrings removed). Both earlier versions reconstructed by reversing the recorded edits; each matches its freeze hash exactly. Kept, read-only, in measure/frozen_code/ with a checker (check.py, 2/2) and instructions for re-running either test exactly. Frozen files themselves untouched.

2026-10-02 (preparing to share: names and channel references removed from the brief)

For sharing: the brief no longer cites team-channel or thread IDs or names people from team discussion; those sources are described by date and topic. One phrase in section 2 reworded ("keeps returning to one question"). A stale description of a collaborator's public profile was replaced. Credit for work (Riley Peterlinz's construction and repository, RFS's training-data release) keeps its names. Labbook rebuilt (it embeds the brief's source list).

2026-10-02 (O6 cost table; paid receipts on the full pool started)

measure/o6_cost.py -> measure/o6_cost.json (measurement): one full-coalition picture, MPS float32. At 32 px: pool 10 (424 images) 11.3 s, 21 (468) 12.7 s, 43 (556) 15.6 s, 86 (728) 20.7 s: time grows about linearly with the images in play. At 64 px: pool 10, 148 s; pool 86, 258 s. GPU memory flat at 1.1 GB (32 px) and 2.2 GB (64 px) because the engine works in chunks. A receipt (64 artist coalitions plus 64 control coalitions) at most 0.4 to 0.74 hours at 32 px and 5.3 to 9.2 hours at 64 px. Speed measured in M5 (pruning 1.05 to 1.10x) completes O6. Paid receipts on the full pool (receipt/make_paid.py, wrapper around make.py, unchanged; output receipt/receipts_full/) started for seeds 9000 to 9003.

2026-10-02 (O7 result: direction transfers strongly at 64 px; size and finished-image visibility do not)

Phase C finished 09:22 (measure/o7_results.json; frozen record stage2/phase_c_freeze.json). Ledger reconstruction of the machine's predictions 1.3e-7 to 1.9e-7 at every step.

Reading: at 64 px the exact machine tells which way a trained network changes when an artist is removed, more specifically than at 32 px, and from the noisiest measured step on; it does not tell how much, and in finished images single-artist removal is mostly below the difference between two training runs. Limits: one start seed for the leave-out networks; a network's leave-out difference includes training divergence (same start weights, different data), the floor uses a different start seed; one network family (convolutional, receptive field 17).

2026-10-02 (O7 phase B complete; phase C frozen and running)

Phase B finished 02:47 with no errors: no_cezanne, no_durer, no_ingres, no_kollwitz, no_rembrandt, no_vangogh and full_s1, about 100 minutes each. Phase C frozen 04:43 (stage2/phase_c_freeze.json: the code, the protocol, the calibration and all eight networks' final.pt hashes) and started (stage2/phase_c.log), estimated 5.5 GPU hours.

2026-10-01 (O7 phase C code written and tested; not yet frozen)

The Claude session crashed mid-afternoon; the overnight run (a separate process) was unaffected: no_cezanne finished 16:20, no_durer started 16:20. stage2/phase_c.py implements the protocol's D, F, M and T exactly (D ported from patch-ledger score_test.py). Tests: (1) CPU smoke on one noise and two steps with the two finished networks: the per-contributor ledger reconstructs the machine's prediction to 1.8e-7 and 2.2e-7 (float32); (2) synthetic_check() on planted data (network changes = machine predictions + noise for the matching artist): D recovers the planted assignment at the smallest possible p (1/720), every own-rank 1; F and M computable (6 resolvable, Spearman 1.0). Each stage now saves its pieces to stage2/phase_c/. Freeze (stage2/phase_c.py freeze, code plus every network's final.pt hash) after phase B completes, then run; estimated 5.5 GPU hours (machine leave-one-out at 64 px dominates).

2026-10-01 (O7 phase A: the gate passes, median r 0.970)

full_s0 trained 10:33 to 12:26 (113 minutes, 10,000 steps, 64 px). Calibration 12:26 to 14:11 (105 minutes): the machine's best patch size per step falls from coarse to fine as noise falls, 13 13 13 13 13 11 9 9 7 7 7 5 5 5 5 3 3 3 3 (t 0.95 to 0.05). Agreement on 8 noises (seed 70000): Pearson r 0.965 to 0.973, median 0.970 against the registered 0.85: gate passed (prediction G held). At 32 px the patch-ledger reference was 0.94. Phase B started 14:35 (six leave-one-artist-out networks and full_s1; about 113 minutes each, finishing about 03:50).

2026-10-01 (RFS's cost arithmetic, checked)

measure/rfs_scale.py reads SCALE.md from his zip (read-only): people $311,825 of $319,421 = 97.62% (stated as 98%); edit triplets $170,000, 22.5 times the $7,562 compute. Under the same assumptions one training run is about 420 GPU-hours, $1,260; ten group-level retrainings (how removal credit is measured on trained models) about $12,603, 4.0% of the people bill. Added to the findings' smaller results as arithmetic on his stated assumptions.

2026-10-01 (how strong each registered result is: sign tests and family-bootstrap intervals)

measure/intervals.py -> measure/intervals.json (post hoc; verdicts unchanged). Independent units are noise seeds. With four seeds the best possible one-sided sign-test p is 0.0625 (POOL P1, ATTN1 Q3, ATTN2 R2, O12 all 4/4, p 0.0625); with two seeds (M4, SPLIT) it is 0.25. No single registered result reaches p < 0.05 on its own. Effects are large relative to seed spread (e.g. SPLIT L1 paper minus lines 0.581 [0.532, 0.629]; POOL P1 0.119 [0.102, 0.136]); POOL P2, which failed, is the one interval containing zero (0.053 [-0.007, 0.113]). Bootstrap over 2 to 4 seeds understates uncertainty; stated in the findings. Added to the findings as "How strong each result is", with RFS's release in the smaller results.

2026-10-01 (RFS's training-data release: read and reproduced)

RFS_training/training-data.zip unpacked to the scratchpad (original untouched). check.py: 109/109; check.py --rebuild: the rebuild reproduces the identical release fingerprint, 110/110; evaluate.py re-run: evals/report.json byte-identical to the shipped one. The toy attention training (tens of CPU minutes) was not run while stage two holds the GPU. Links to this project: its record mapping separates what went into a picture, how payment is divided (shares) and measured influence ("needs its own method and its own evaluation"), the separation this project measures (use, LOO, Shapley); its tombstone record asks for a review of models trained on earlier releases, the question O7 tests; family splits, a graded oracle and the attention-map caveat parallel this project's duplicate rule, planted controls and ATTN2. Opportunity taken from it: intervals and sign tests for this project's per-seed results.

2026-10-01 (resumed: paid sketch receipts work end to end; stage two launched)

2026-10-01 (paused for the day, Russell travelling)

The first sketch receipt (circle test drawing, seed 9100) was stopped by hand at its third stage (drawing combinations) so nothing runs while the laptop travels. Its two caches finished and are kept (receipt/cache/absent_9100_...pt, controls_9100_...json); the next sketch receipt starts from them. Nothing else was running. Resume list: sketch receipt and paid-button browser check; stage-two smoke test, disclose, freeze, launch stage2/overnight.sh; findings report rebuild; memory update.

2026-10-01 (receipts format 3 made; planted controls fail on 2 of 4 seeds with the small pool; stage two prepared)

2026-10-01 (findings report; receipts format 3 with planted controls; paid sketch receipts; T3 redefined)

2026-10-01 (O9: first CUDA run, Colab Tesla T4; the receipts hold across hardware)

Run by Claude in Russell's signed-in Chrome with his explicit go-ahead for the upload (notebook Untitled7.ipynb in his Drive; the bundle went to the Colab session's temporary storage, deleted when the runtime ends). Environment: Tesla T4, Python 3.13.15, torch 2.11.0+cu128 (ours: torch 2.12 dev on MPS), so a different GPU vendor and torch build.

The result O9 asks for:

Found by the run, and what was done: 1. The bundle was missing files the tests import: measure/crop_scale_edges.py and its imports (crop_scale.py, corpus/build_corpus.py) for test R5, and engine/ORIGINAL/ for test N5. Added; the bundle builder now has these, and every test was run from an unpacked bundle on this Mac before re-uploading (52/52, 16/16, 5/5, 4/4). 2. V6 compared the nearest-image distance across backends at 1e-6; across hardware the distance differs in the sixth decimal (39.603884 vs 39.603886). V6 now uses 1e-6 only when the output is bit-identical to the receipt's and 0.01 levels otherwise (owner and flag must still match exactly). Passed on the second run. 3. The notebook's cells relied on imports in its first (upload) cell; each cell now imports what it uses. 4. T3 [cuda/float32] masses sum to 1: 1.51e-05 against a 1e-5 tolerance (open). Diagnosed in the same session: a plain log-sum-exp normalisation on the T4 is tight (2.4e-7), while the engine's mass sums are 1.3e-6 to 3.9e-6 at every step and 1.5e-5 at the final, lowest-noise step, where log-masses are largest, so float32 rounding of exp(lse_c - lse) grows with their magnitude. A float32 conditioning limit of the engine, larger on CUDA than on MPS, not a hardware fault; the CPU float64 reference passes T3 exactly and payouts are unaffected (above). The tolerance was set from MPS runs. Not loosened after the fact: the next step is to state the float32 bound from the log-mass magnitudes and test against that bound on every backend, or to normalise against a per-pixel reference inside the engine (which changes outputs bit-for-bit, so it would need new receipts).

2026-10-01 (receipts format 2: total effect and copy check, after ATTN1)

2026-10-01 (ATTN2: frozen-attention receipts do not report the source; they pay a fixed pair)

instrument/attention_law.py (library ch. 49 in VP coordinates), tests 3/3: our exact and frozen posteriors reproduce the library's Study 13 fixtures to 1e-16 (three-token reversal: exact 0.924 / 0.076, frozen 0.158 / 0.842; two-token equality), and query plus row recovers a 16 x 16 noisy image to 1.3e-15. Static-attention engine made batch-invariant (rows denoised one at a time) after ATTN1's K2; new test A9 (batch of 8 equals one at a time, bit for bit): 9/9.

Protocol measure/ATTN2_PROTOCOL.md frozen after a timing-only smoke run; 12 runs (4 seeds x beta 1, 4, 16), greyscale 16 x 16 demo corpus, CPU float64. measure/attn2_results.json.

Reading. Plugging realised attention into the static formula, the natural first route for extending any static-attention construction to attention models, gives payouts that are neither the posterior of what the layer observed nor stable to the picture. The library's three-token counterexample (C72) holds at image scale and is the typical case, not an edge case. Limits, stated with it: scalar tokens, one head, greyscale 16 px, no learned projections or residual stream; the exact posterior here is the whole-image one because the row is retained (a layer that keeps only its output has a different, harder law, ch. 49 section 6); and this is posterior accounting, not removal credit (ch. 48 section 7). Consequence: static-attention receipts are not receipts for attention models. The static machine stays useful as a generator in its own right (its attention is genuinely fixed).

2026-10-01 (ATTN1: attention changes who gets paid; global attention copies; a receipt flaw)

Static-attention machine extended to several heads with support-aware rank handling (library ch. 48); tests 8/8 (A6 two heads equal a brute-force Gaussian over the full observation, 1.0e-15; A7 a duplicated head and A8 a self-only head change nothing, difference 0, no jitter). Protocol measure/ATTN1_PROTOCOL.md frozen after a timing-only smoke run; 12 games, CPU float64, about 4 s each. measure/attn1_results.json.

Post hoc, exploratory (measure/attn1_posthoc_copy.py, panel measure/attn1/attn1_panel.png): nearest training image to each full-coalition output, RMS in levels of 255. None 54 to 56; local 31 to 41; global 22 to 48, and on seed 9303 0.0: a verbatim copy of a commons painting (met-dp-20645-001). In that game the artists' summed effect is small (pixel 0.065 against 0.21 to 0.46 elsewhere under global) and they hold 21% of the posterior mass, yet normalised shares pay them 100% of the artist pool (Kollwitz 0.49, Rembrandt 0.51) while the copied work, in the unpaid pool, gets nothing. Reading: attention shares information across patches, the posterior collapses toward a whole image, which is the library's ch. 49 point (observing the full row recovers the input) seen at image scale. The more global the attention, the closer the machine comes to the memorising ideal score, the more pay concentrates, and the further use drifts from Shapley.

Receipt flaw exposed (applies to every machine, not just attention): normalised shares hide the size of the total being shared, and nothing in a receipt says when the output is a copy. Required additions, to be registered and built: (1) every receipt reports the nearest training image to the output, its owner and distance, and flags a copy; (2) every receipt reports the players' total effect beside the shares, so 100% of a tiny effect is visible as such.

2026-10-01 (Russell's library on attention: complements the repository; stage two planned around both)

Read image-steering-accreditation/references/48_conditional_denoising_attention.md, 49_input_dependent_attention_laws.md, 75_learnable_denoising_representation_bottlenecks.md, 46_anml_attribution_guarantees.md (section 4) and the attention rows of CLAIMS.md (C67 to C75, C215) and GAPS.md.

Consequence for stage two: extend the repository's single-head form with 48's multi-head, rank and support-aware treatment; and make the frozen-versus-input-dependent question (C72) part of the registered test, since it is what decides whether static-attention receipts say anything about transformers.

2026-10-01 (stage two: a static-attention machine of our own, checked against Riley's)

engine/tio/static_attention.py: Riley's construction, implemented independently in this engine's variance-preserving coordinates, with owner masses and member masks like machine.py. One change in form, not in result: the context is split as v_i = S_ii x_i + r_i (r_i the off-diagonal mixture), whose noise is independent of the patch's own given a training image, so the weight exponent is ||dx_i||^2 + ||dr_i||^2 / d_i with d_i = sum_{j != i} S_ij^2 computed directly. Same as inverting his 2 x 2 covariance, but no inverse and no jitter; d_i = 0 (S = I) is exact, where his a*c - b*b cancels.

engine/tests/test_static_attention.py, 5/5: A1 S = I, p = 1 equals our "ls" machine over a full run (2.3e-15); A2 equals Riley's AnalyticScoreDiT with a dense S, p = 2, jitter 0 (3.1e-15); A3 a member mask equals a corpus without the owner (difference 0); A4 masses sum to 1 and the output is the weighted sum of training patches; A5 MPS float32 agrees with CPU float64 (max 2.9e-8).

2026-10-01 (prior-art search on Riley's static-attention form)

Searched for a closed-form denoiser in which each patch conditions on itself and a fixed linear mixture of the other patches (Riley's AnalyticScoreDiT). Closest found (BRIEF 11.3): Finn et al. 2025 (content-dependent attention after a CNN, top-1 simplification, 4x4 toys); Niedoba et al. 2026 FPMC (diagonal precision only, explicitly no mixing across positions); Li, Min, Vidal 2026 (transformers approach the population MMSE denoiser on Gaussian mixtures); Haddadi et al. 2026 (the empirical denoiser's softmax is an attention computation). None found conditions on a fixed cross-position mixture with the joint Gaussian; the form looks unpublished as far as this search goes (abstracts and summaries, not full texts of every paper). It is a fixed-S result; content-dependent attention, which trained transformers use, is the natural next step (Finn et al. approach it from the CNN side).

2026-10-01 (Riley's code: permission)

Russell confirms Riley's permission: the team may use, copy and change the repository freely. Recorded here as the grant. A licence file would let anyone outside the team who receives our code see the same terms; an opportunity to mention when convenient.

2026-10-01 (Riley's repository arrived: read, reconciled with the engine)

Source: github.com/CardiacMangoes/diffusion, commit 6b757a5 (2026-09-02), cloned to the scratchpad and run from the clone (permission to use it freely confirmed the same day, entry above).

What it holds: AnalyticScore (the whole-image MMSE result of BRIEF 6.1, rectified-flow time), AnalyticScoreDiT (new to us: a closed form for a patch denoiser with a static attention matrix S; each non-overlapping patch i weighs training images by the exact joint Gaussian of its own noisy value z_i and the mixed context v_i = sum_j S_ij z_j, covariance t^2 [[1, S_ii], [S_ii, sum_j S_ij^2]] per feature), trained DiT and DiT_ablated models with fixed attention windows, training code, and tests_2d.ipynb (88 cells, a two-pixel toy comparing one-layer DiTs trained with S = [[a, 1 - a], [1 - a, a]] against the analytic form, as videos). This advances the attention case the derivation PDF (pp. 12 to 13) left open: it is solved here for a fixed S.

measure/riley_reconcile.py -> measure/riley_reconcile.json (CPU float64):

Opportunities noted while running the repository (shared with Riley; nothing changed in his code): (1) on Python 3.13 and later, scores.py line 1 (from re import T) needs the name re.T, which newer Python no longer provides; defining it before import is enough here, and the line can simply be removed. (2) AnalyticScore returns E[eps | z] (R1 confirms it); its docstring describes the score, so aligning the two would help readers. (3) The notebook predates the current AnalyticScoreDiT(x, p, jitter) signature (S now passed to forward); updating its calls would let it run against the current code. (4) Adding the trained weights (model_weights/), or a script to regenerate them, would let others reproduce the notebook's comparisons.

2026-10-01 (M5: cost at 64 px measured; one picture each, exploratory)

measure/m5_cost64.py -> measure/m5_cost64.json, measure/m5_cost64.png. MPS float32, demo corpus (728 images, commons 10), full coalition (the most expensive), seed 9000, after a warm-up.

SettingPatch sizes (px)Seconds per picture64-coalition game, upper bound
L 32, S13 to 1111.50.21 h
L 64, S1 patch sizes as they are3 to 11150.8 (13x)2.7 h
L 64, patch sizes doubled7 to 23217.7 (19x)3.9 h

The 13x is close to the cost model's 16x (L^4), a little under it because the border positions grow more slowly. Looking at the pictures: at 64 px, without a drawing, the output is still a mosaic of paper tones and painting colours, smoother with doubled patches; it does not look like a drawing. One picture is not a test, but it does not support O12's hope that resolution alone makes drawings appear. What did make lines appear was the viewer's drawing (M4, SPLIT at k = 14). Next for 64 px, when it is worth three hours of GPU: a receipt for one test drawing at k = 14.

2026-10-01 (O9: notebook executed end to end here, on MPS and on CPU; tamper tests after the verifier change)

2026-10-01 (POOL: results. The use gap grows with the pool; leave-one-out's gap shrinks)

Run about 3 h 35 min (16 games). measure/pool_results.json.

Not predicted: leave-one-out moves the other way. TV(leave-one-out, Shapley) by pixels rises as the pool shrinks: 0.11 to 0.15 at 86, 0.20 to 0.26 at 10. With a big pool the artists act nearly independently (removing one is close to its average effect); with a small pool they are most of the mass and substitute for each other, so one removal at a time misreads them. Neither cheap rule tracks Shapley across pool sizes: use errs most with a large pool, leave-one-out with a small one. Exact Shapley does not depend on this choice; receipts state the rule and the pool size.

Registered consequence (P1 held): receipts and the page state the pool size beside every use-based share and say that use over-reads as the pool grows. Done on the page (section 2 text now quotes these measurements). Receipt format unchanged: every receipt already records its baseline owners, from which the pool size is read.

2026-10-01 (O9: a bundle and a notebook for running it elsewhere; verifier V2 split)

2026-10-01 (M5 diagnostic: certified pruning is not the speed lever at this scale)

Exploratory, not registered (measure/m5_prune_diag.py -> measure/m5_prune_diag.json; CPU float64, one trajectory, seed 7, demo corpus with commons 10, 64 random query pixels per step, every allowed candidate computed exactly). First attempt reported fractions above 1: it divided per-query counts by the mean candidate count, but edge pixels allow 424 candidates and interior ones up to 381,600. Fixed to per-query fractions; summed work reported separately.

Reading (an operating window, not a dead end): at 32 px with this corpus the ELS machine mixes over thousands of patches at most noise levels, so exact credit cannot be bought cheaply by skipping candidates. BRIEF M5's planned lever is retired. What remains: (1) measure the real cost at 64 px directly (one sample, GPU, after POOL); (2) 64 px demo receipts precomputed, not live (a 64-coalition game is then hours, not minutes); (3) any structural change that cuts cost (a locality window on allowed positions) is a model change, to be declared and measured against the equivariant machine, never presented as an approximation of it.

2026-10-01 (SPLIT: results; all hold. A new gaming route found)

Run took about 95 minutes (12 games, 256 coalitions each). measure/split_results.json.

Reported, not predicted: splitting a player changes the other players' pay (measure/split_panel.py -> measure/split_splitting.json). Same games, same outputs where both exist: the six artists' summed Shapley share drops when the input is two players instead of one, by 0.06 to 0.07 (pixel), 0.008 to 0.026 (edges), 0.06 to 0.08 (blur), 0.08 to 0.12 (colour). Shapley is not invariant to how a party is cut into players (a known property: it is not "splitting-proof"). Consequence for the receipts: the viewer could raise their share against the artists just by declaring their input as more parts. Rule added to BRIEF 5b: the input's partition is fixed by the protocol, never chosen by the payee, and the receipt reports artist credit under the one-player input as well.

Cross-run check (page, browser): the one-player game read off the split game (input present = both parts, absent = neither) reproduces M4's separately run, frozen Shapley values with difference 0 in all 6 cases x 4 value functions. Two runs a day apart, same engine, bit-identical.

Decision: adopt the split for the page and receipts as a description (paper and lines shown separately), with artists' pay computed against the input as one player, so the split cannot move money. Recorded in BRIEF 15.

2026-10-01 (page: a drawing as a player, and a sketch pad)

2026-10-01 (POOL: written and frozen; runs after SPLIT)

measure/POOL_PROTOCOL.md, measure/pool_run.py, measure/pool_analyze.py, frozen (measure/pool_freeze.json). Does the use vs Shapley gap grow with the commons pool? Nested pools N = 86, 43, 21, 10, fresh seeds 9200 to 9203. Disclosed in the protocol: the prior numbers it is designed around (T0FIX N = 86: TV median 0.36; demo receipts N = 10: pixel 0.14 to 0.27, edges 0.09 to 0.21, recomputed from the receipts today). A first draft of a fourth prediction (P4, a mechanism ratio) was removed before the freeze: it was not stated sharply enough to fail.

2026-10-01 (SPLIT: the input as ground and lines; built, tested, frozen, running)

2026-10-01 (M4: results; post hoc, the drawing is paid for its paper)

Frozen 00:17 UTC (measure/m4_freeze.json), run to about 02:10 UTC. measure/m4_results.json.

Post hoc, exploratory (measure/m4_blank_posthoc.py): a blank sheet in the same paper colour as the input, compared with each drawing (full coalition). Lines' share of the drawing's effect (distance from blank to drawing over distance from none to drawing): pixel 0.8 to 5.5% (so 94 to 99% of what a drawing does is its paper tone), edges 6 to 12% at k = 4 rising to 18 to 45% at k = 14 (the house most). The drawing is paid mostly for its paper colour, not its marks, the same finding M2 made for the artists, now for the viewer.

Design response (to be registered before testing, not adopted): split the input into two parties, its ground (a blank sheet in its paper tone) and its lines (the drawing on that ground), so a viewer who chooses the paper colour is not paid as if they had drawn the picture. Also: k = 14 is the strength at which the drawing's shape shows; the page's input feature should use a high k and say why.

2026-10-01 (receipt tamper tests: 6/6 after the fix)

2026-09-30 (receipt tamper tests: a verifier bug found and fixed)

receipt/tests/test_receipt.py on seed9000_edges: first run 5/6. E1 (untouched, full replay bit-identical), E2 (edited share, old seal: V1 catches), E3 (edited share, re-sealed: V4 catches), E5 (swapped source hash: V2 catches) passed. E4 FAILED: a forged v(S) with every payout recomputed consistently and re-sealed passed V1 to V4 as designed, but also passed the full replay. Cause: on the same backend V5 compared only the regenerated outputs' hashes with the receipt's, and the forger had not touched the output hashes; the v discrepancy was computed but not used in that branch. Fix: same-backend V5 now also requires every v(S) recomputed from the regenerated outputs to equal the receipt's exactly. A receipt could otherwise claim values different from the pictures it certifies. Re-running.

2026-09-30 (M6b receipts and verifier; M6 page)

2026-09-30 (commons-size test: result)

Median visibility over seeds 8000 to 8003 (mean absolute change, levels of 255), schedule S1:

commons NCézanneDürerIngresKollwitzRembrandtVan Goghvisible (>= 5)artists' use
863.592.824.722.692.202.3800.44 to 0.54
434.223.235.533.962.593.0010.61 to 0.71
214.883.306.335.542.713.5020.75 to 0.84
104.843.236.506.752.784.1720.86 to 0.92

2026-09-30 (commons-size visibility test, rule fixed BEFORE the run)

Question: how large a commons (unpaid pool) can the demo keep while removing one artist visibly changes the picture?

2026-09-30 (K2 float64 re-check: HOLDS; S1 adopted)

2026-09-30 (T0FIX: results; K2 failed; float64 re-check registered)

measure/t0fix_results.json (frozen analyzer). Run 19:19 to 22:07 UTC.

K2 diagnosis (from saved outputs, no rerun): in every seed under both S0 and S1, out(S + du-01) and out(S + duplicate) differ by 2.0e-5 to 3.2e-5: float32 rounding, since identical data sit at different positions in the engine's sums. It is the same size under S0 and S1. K2 fails only where du-01's Shapley value is near zero (seed 6002 edges, -3.6e-4), which inflates a relative difference.

Registered now, after the results (a check of the check, not a prediction): recompute, on the CPU float64 reference path, the 32 coalitions of game B seed 6002 under S1 that K2 depends on (du-01 or the duplicate with every subset of the other four players) plus the full coalition, and recompute phi(du-01) - phi(duplicate) for all four value functions. If the relative difference is below 1e-9 for every value function, K2's float32 failure is attributed to rounding, S1 is adopted, and future protocols state K2 on the float64 path or with an absolute tolerance. If not, there is a bug, and S1 is not adopted until it is found.

2026-09-30 (chaos-floor diagnostic: result; T0FIX frozen and started)

2026-09-30 (T0FIX registered but NOT frozen; a second diagnostic first)

2026-09-30 (t = 1 diagnostic, exploratory: no verdicts)

measure/t0_diagnostic.py, seeds 6000 to 6003 (already used by M3), game B corpus without the duplicate. For each source, three runs: present at every step (full), absent at every step (none), present at step 0 only. Share of the removal effect explained by step 0 = 1 - d(full, step0only) / d(full, none), pixel MSE.

Interpretation. At t = 1 (abar about 3.7e-33) the posterior ignores the noisy picture: the first estimate is the plain average of every patch, and every source votes by head count. The DDIM trajectory then amplifies that shift. So about half of what removal credit pays a real sheet is its head-count vote at t = 1, not its relevance. The fix is not "exclude junk sources" but "remove the blind vote": start sampling below t = 1, where the first step is already relevance-weighted (the constant's weight is 7e-6 at t = 0.95). Registered next, before testing.

2026-09-30 (M3: results under the frozen protocol)

Run 14:47 to about 18:25 UTC, 12 games (A, B, C x seeds 6000 to 6003), all freeze hashes verified at start. measure/m3_results.json (analysis by the frozen measure/m3_analyze.py).

Checks. K1 efficiency: max error 5.6e-17, HOLDS. K2 symmetry (du-01 == its duplicate): max relative difference 9.3e-5 against 1e-4, HOLDS (close to the float32 limit).

IDResultNumbers
T1HOLDSTV(use, Shapley), pixel: 0.400, 0.346, 0.488, 0.297; median 0.373 (patch ledger at sheet level: 0.254)
T1eHOLDSedges: 0.363, 0.308, 0.346, 0.323; median 0.335
T2aFAILSmost substitutable pair: ingres+vangogh, cezanne+ingres, rembrandt+vangogh, cezanne+ingres (2 of 4)
T2bFAILSLOO below Shapley for both of that pair: 2 of 4 seeds
T4FAILSpaper fraction of artists' use: 0.297, 0.371, 0.168, 0.434; median 0.334, just below 0.35
T5bHOLDSpair / alone: 2.021, 2.003, 2.008, 1.974 (a copy doubles pay)
T5cHOLDSscrambled: 0% under every value function, except 1.5% under edges in one seed
T5dFAILS (expected, disclosed before the freeze)constant: pixel 5.2 to 6.4%, edges 2.6 to 4.4%, blur 5.4 to 6.7%, colour 5.1 to 6.6%
T6aHOLDStop artist: ingres, ingres, vangogh, ingres
T6bHOLDSrankings differ; kollwitz last in 3 of 4

Reported without verdict: at artist level the four value functions agree closely (median TV between them 0.006 to 0.070; the patch ledger's sheet-level disagreement was 0.17 to 0.35).

Post hoc, not predicted (measure/m3_visibility_posthoc.json): removing one artist is nearly invisible. Mean absolute change when one artist is removed, in 0 to 255 levels: Ingres 7.5 to 9.3 (33 to 50% of values change by more than 8 levels), Cézanne 5.6 to 7.2, Dürer 4.4 to 5.1, Kollwitz, Rembrandt, Van Gogh 1.9 to 3.3 (4 to 10%). Removing all six: 27.9 to 38.6 (88 to 98%). The effects are real and measured exactly, but a viewer needs the difference map to see a single artist's; the raw picture barely moves. measure/m3/A_panel.png.

Implications (interpretation).

2026-09-30 (M3: instrument built and tested, protocol frozen, run started)

2026-09-30 (demo profile built into the corpus; old measurement pinned)

2026-09-30 (O12 confirmation: result)

2026-09-30 (paid-artist works removed from the commons; O12 confirmation registered)

2026-09-30 (Met verification complete; a payout problem found)

2026-09-30 (O12 second test: result)

Result under the rule registered before it ran: PASS for 64 px mark-centred crops, FAIL for 64 px uniform.

configurationQ edges (seeds 5000 to 5003)Q pixel (reproduces test 1 exactly)result
64 marks1.462, 1.065, 1.920, 1.8910.253, 0.294, 0.336, 0.418pass (4 of 4)
64 uniform0.744, 0.882, 0.878, 1.0890.102, 0.170, 0.130, 0.206fail (1 of 4)

2026-09-30 (O12 crop-scale test: result, and a second test registered before it runs)

Result under the pre-fixed rule: every configuration FAILS O12. Q = R_mark / R_paper per seed:

crop, placementQ (seeds 5000 to 5003)mark share of artists' use
256 uniform0.086, 0.135, 0.118, 0.1760.21 to 0.37
256 marks0.129, 0.174, 0.167, 0.2290.27 to 0.42
128 uniform0.097, 0.139, 0.115, 0.1860.22 to 0.40
128 marks0.171, 0.223, 0.211, 0.3280.35 to 0.51
64 uniform0.102, 0.170, 0.130, 0.2060.25 to 0.44
64 marks0.253, 0.294, 0.336, 0.4180.45 to 0.59

As the rule said: the crop lever fails O12 at 32 px under this criterion. measure/crop_scale.json.

Why, and what is wrong with the criterion (interpretation, written after seeing the result): the 64 px crops resolve strokes several pixels wide (measure/crop_scale_views.png, rows 5 and 6), and the marks' share of use rises monotonically with tighter, mark-centred crops (0.21 to 0.59). Q rises with it but stays below 1 because the criterion compares removing ALL paper with removing ALL marks under pixel MSE, which weights area: even a resolved drawing is mostly paper, and removing paper recolours the ground under most of the picture. So "R_mark >= R_paper in pixel MSE" measures whether marks dominate the area, not whether they are resolved or carry the hand. This is a measurement-design error in O12 as written (the third such in this program's pieces, after margin's stop threshold and pictorial form's selection rule), not evidence that marks cannot matter.

Second test, registered now, before it runs (designed after seeing the first; labelled as such everywhere):

2026-09-30 (labbook, Met verification started)

2026-09-30 (O12 crop-scale test, rule fixed BEFORE the run)

Question: at 32 px, can a tighter crop scale make artists' marks matter (O12)?

2026-09-30 (M2: results)

2026-09-30 (M2: paper measurement, rule fixed BEFORE the run)

Question (BRIEF M2 decision a): does use-based credit over-pay blank paper?

2026-09-30 (M1: engine port)

2026-09-30