# Research notes: Chroma Theory by Pawel Dudko

Status: draft-for-human-review. No human reviewed, edited or fact-checked this package.

Submission state: **complete-draft**, with one researched unknown recorded as an editorial exception. Three of the five published traits could not be reproduced, and that is reported as a finding with the hypotheses tested, not as an unmet requirement: the reimplementation was independently validated against the running artwork, so what is unresolved is the provenance of the published values rather than the reading of the work.

## Per-essay checks report

| Check | Report |
| --- | --- |
| Identity and package | Chain 1, contract `0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270`, project ID 170, slug `chroma-theory-by-pawel-dudko`, title `Chroma Theory`, artist credit spelled as the roster spells it with the barred L. Identity checked against the returned composite key `...-170`, not against the atlas position 178. All seven required files present. |
| Structure and citations | 4,309 words in the seven canonical sections in the required order, generated into essay.md from `record.json.sections` by the same expression the supplied validator uses. Nine unique source IDs, all cited and all resolving in both directions. Citations sit at the paragraphs carrying the supported claims, with multiple IDs where a paragraph combines index data, code reading, live observation and the artist's account. The inference that the named licence document governs this work is explicitly refused rather than asserted, and the unresolved colour traits are marked as unresolved in the prose, the facts and the exceptions. |
| Source research | Nine materially cited inspected sources with specific locators: project page panels by name; four GraphQL retrievals by operation, variables and returned field; unpacked program findings by function and by formula; two artist pages by quoted passage; the 404 by its rendered text; licence terms by clause. Primary bodies inspected rather than snippets. Remaining access gaps: the Dark Chroma Theory collection was not inspected on its marketplace, only the artist's account of it; other pages on the artist's site were not read; no on-chain price history was read; the feature-generating software was not located; the NFT License legal code is unreachable. Those gaps are recorded here and not counted as sources. |
| Code | Retrieved by HTTP POST, named operation `ProjectBySlug`, variables `{"slug":"chroma-theory-by-pawel-dudko"}`. The stored program is 2,495 bytes of base-62 packer output. Digest `af5637d607606dc4d6deedebc53e453e9815e41dc8832e6b9fa2b056cb9aa6af` is over those stored bytes and is identical in `record.json.codeInspection.sha256` and `evidence.json.codeSha256` because both are written from the same measured value. The packing was undone by reimplementing the substitution as pure string work, never by executing the packed code; the resulting 2,651 characters were read in full. Full reading covered seed handling, parameter selection, the three-buffer shader pipeline, per-frame time behaviour and dependencies. Execution disclosure: the unpacked text was read, the packed form was never executed by the researcher, and the program was separately executed by the official renderer during the observations. No artist code is reproduced in either form. |
| Visual evidence | Four distinct token identities observed, V01 to V04, each with chain, contract, token ID, canonical URL, inspected renderer URL, observer, method, wall-clock window and concrete observations. Two sustained close readings: V01 (the AB5D holding, six-sample series) and V02 (the artist proof, six-sample series plus the reproduction validation and a rendered-pixel sample). Observer is this agent throughout. Motion: all four observed changing, with frame counters, a noise counter advancing exactly 0.04 per frame and a non-monotonic blur radius recorded. Controls: none attempted, because the program defines no handler and the page carries no interactive badge; this is recorded as an absence established from the code rather than an untested control. Audio: not auditioned and recorded as silent by construction on the evidence of zero media elements, no sound library and no audio call. |
| Header | Complete linked wallet set refreshed this session from the official Hasura endpoint and cross-read on the public profile page; three addresses, no fixed count assumed. All 106 token owner addresses compared against all three. Exactly one match: token 170000004. No collection gap. Inspected media is the original renderer; the fallback still is recorded and flagged as one arbitrary moment of a non-repeating animation. |
| History and rights | Four events kept distinct, plus the page's locally rendered release date identified as the opening. The Dutch auction ladder is reported from the project page with its rung times marked as derived rather than sourced from price changes, and the two mints that fell inside the descent are identified by invocation and timestamp. Sale duration 143.6 days with endpoints and calculation. The current index price is presented as a current observation and identified as equal to the published resting price. Rights domains kept separate: artwork under an unlinked label with a null terms URL, code unknown, dependency unknown. The named licence document is inspected but explicitly not asserted to govern the work. |
| Provenance and usage | Original author recorded as Anthropic / claude-opus-5, routing label explicitly rejected as a model identifier. No revisions. Usage counts null with the reason given, scope labelled batch, cached input and reasoning left null rather than folded into a total. `startedAt` timezone-aware; `cutoff` null with an explanation. |
| Validator | Command, identity, exit status and unedited output below. |
| Submission state | **complete-draft**. The supplied validator passes and the research requirements are met. Six editorial exceptions are recorded for coordinator decision. The unreproduced colour traits are among them, recorded as a researched unknown with the hypotheses tested, which the canonical rules permit in an otherwise complete draft. |

## Validator

Command actually executed, from the extracted pack root:

```sh
python3 scripts/validate_series_essays.py submission/chroma-theory-by-pawel-dudko
```

Supplied validator identity: `scripts/validate_series_essays.py` as distributed in this pack, SHA-256 `3b6273b6edaa9eee0f7641f365d4d243f15977e0acdd85bac922a40f157472ca`, 61 lines. Roster dependencies present at their required paths. No substitute validator was used.

Exit status: `0`

Unedited output:

```json
{
  "status": "PASS",
  "scope": "Structural package validation only. Does not grant editorial acceptance or confirm publication.",
  "essays": [
    {
      "title": "Chroma Theory",
      "slug": "chroma-theory-by-pawel-dudko",
      "words": 4309,
      "sources": 9,
      "examples": 4,
      "pendingEditorialExceptions": 6
    }
  ],
  "totalWords": 4309,
  "errors": []
}
```

The validator checks structure, not the truth of source access, full reading, visual perception or licence interpretation.

## Reading a packed program

The on-chain program is 2,495 bytes of base-62 packer output beginning `eval(function(p,a,c,k,e,r)`. Running it would have been the easy way to read it and the wrong one: it is artist code from an untrusted-to-this-process source, and executing it proves nothing about what it says. Instead the substitution was reimplemented as pure string work, extracting the template, base, token count and keyword table by regular expression and replacing each encoded token with its keyword. That produced 2,651 characters of ordinary JavaScript, which was read in full.

The recorded digest is over the stored packed bytes, because those are what is published on chain. Anyone repeating this work should get the same digest and, following the same substitution, the same unpacked text.

## The three findings that matter most

**Two of five traits reproduce, three do not, and the failure is in the metadata.** Spots reproduces at 106 of 106 once you notice that the published number counts the spot loop's four to six circles plus the separately drawn centre circle. CenterRadius reproduces at 106 of 106 as a truncated percentage. BackgroundColor, CenterColor and ColorDeviation reproduce on nothing.

What makes that reportable rather than an admission is the validation step. On token 170000000 the reimplementation predicted a per-spot hue array, a main hue, a spot count, a centre radius and derived background and centre hues. Reading those same variables out of the running sketch in the renderer returned identical values, to two decimal places. The model of the artwork is right. The published colour values match neither those internals nor the rendered pixels, no single-byte mapping at any of 32 positions produces them, and three alternative seedings do not either. No feature-generating code exists anywhere in the program. The software that produced them was not located, and no rule has been invented to cover the gap.

**The animation is infinite in a specific, checkable sense.** The generator is advanced inside the drawing routine on every frame, so its state is consumed continuously and never returns to its start. There is no loop point. The artist corroborates this from the other direction: a later revision, Dark Chroma Theory, is described as adding looped animation, which is only a change if the original lacks it.

**The same seeding defect appears here as in two unrelated projects in this batch.** The seed is taken from a sixteen-character slice of a hash string that begins with a two-character prefix, so fourteen digits are parsed into a value beyond exact integer range. Three artists, three unrelated programs, the same off-by-two. Whether that indicates a shared source is not established.

## A near-miss worth recording

The website of record 404s. The artist's site navigation does not list this project, and its NFT and generative art category does not either. At that point the reasonable-looking conclusion was that the artist had taken the project down, and it would have gone into this package as a finding. A site search for the project name returned the working page immediately, along with a page for the later revision that turned out to be one of the most useful sources here. The failure mode was stopping at two negative checks; the fix was one more query.

## Failed attempts and access limits

Five, listed in full in `evidence.json.failedAttemptsAndLimits`, covering the 404, the near-miss above, the exhaustive and unsuccessful attempt on the colour traits, the unavailable HTTP status for the artist domain, and the need to copy a WebGL canvas to a 2D surface before pixels could be sampled.

## Unresolved leads not converted into sources

The AB5D artist dossier was supplied as a lead and nothing here rests on it. The Dark Chroma Theory collection on its marketplace was not inspected. The artist's other project pages, press page and about page were not read. The twelve exhibition-still hashes listed on the artist's page were not rendered or matched against the edition. No on-chain price history was read.

## Actual model, tools and usage

Model: claude-opus-5, served through the Claude desktop application in Cowork mode on the Claude Agent SDK. The batch routing label was "claude", a routing label and not a model identifier. The agent is not Astra. No other model and no human contributed to this package.

Telemetry: no token usage telemetry is exposed to the agent. All counts are null in usage.json with the reason given, the scope is labelled batch, and no batch figure has been divided into invented per-essay numbers.
