# Research notes

Series: PrimiDance by wuwa, credited on the live Art Blocks page and on the artist's own site as Ben Benhorin. Assignment AB5D-SERIES-084. Package status draft-for-human-review.

## Sources and access

Eleven sources were inspected and all eleven are cited.

Identity confirmed before research: chain 1, contract `0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270`, project id 84, slug primidance-by-wuwa. The atlas position for this series is also 84, which is a coincidence; it was not used as the project id. The supplied metadata snapshot was treated as a lead and every field re-read live. The refreshed values agreed with the snapshot.

Access route: the cloud container has no egress to artblocks.io, the Art Blocks index, the media proxy or the generator, all failing at the outbound proxy with 403 on CONNECT. All live observation ran through the browser pane on the operator's computer, which also supplied the keyboard and mouse input used to test the artwork's controls.

The artist website recorded on the project, `https://wuwa.org/art`, resolves and redirects to a Notion-hosted site. Two pages were read: the index of selected projects and the long Primitive Trilogy page, whose Chapter I section is devoted to PrimiDance. Neither page shows a publication date, so publicationDate is null in the source ledger rather than guessed.

No interview exists in the index for this project and none was located. The artist's own account substitutes for one and is treated as self-reported testimony throughout.

## Full script inspection

Retrieved from `projects_metadata` filtered on the exact slug, with contract address and project id checked in the same response. Length 3,813 bytes. SHA-256 `5cfa4f55dfea88f747c6a89a6a74103f306832970f0f3fd4ab8bd4a223dfc277`, computed over the UTF-8 bytes via the Web Crypto API in the browser. Script count is 1 and the single fragment reproduces the script field exactly.

Coverage: the entire script was read in one pass. It is short enough to hold in view at once, which is unusual in this batch and is itself relevant, since the artist cites the platform's script size constraint as part of the appeal.

Functions traced: the Random class and its four helpers; setup, including the canvas, the palette and background draws, the wireframe draw, the primitive count draw, the speed draw and the per-primitive loop; draw, including lighting, the trail branch, the orbit rotations, the per-primitive transform stack and the central sphere; the seven shape functions; the keyTyped and mousePressed handlers; and the colour-darkening helper used for wireframe strokes.

External dependencies: declared `p5@1.0.0`, external asset dependency count zero. p5 is used substantively here, for WEBGL mode, the primitive geometry calls, the lighting and the orbit control. No network requests, no audio, no external assets.

Quirks recorded as direct findings: the size draw is written with its bounds in descending order; the central sphere reads a fixed index of the size array regardless of the primitive count, which is safe only because the count is always at least twenty; and the wireframe branch changes geometry as well as shading, reducing subdivision counts rather than merely switching to strokes.

One observation is flagged as inference rather than fact: the xorshift generator and its helper methods are byte for byte identical to those in breathe-you-by-raregonzo, another project in this batch by a different artist. The most economical explanation is a shared community template circulating among Art Blocks artists in 2021. No documentation of such a template was located, so this is recorded as an inference and not asserted.

No block reference was pinned; this was an index retrieval. Script content is not redistributed.

## Independent generator reimplementation

Because the script is short and its draw order is unambiguous, the generator was reimplemented and run against every token hash in the edition, and its outputs compared with the platform's indexed traits. This was done to test whether the retrieved script is in fact the script that produced these tokens, rather than assuming it.

Results: Wireframe matched on 256 of 256. Primitive count matched on 255 of 255 tokens carrying traits. Orbit speed matched on 255 of 255 once it was established that the platform's integer Speed trait is the ceiling of the script's continuous value multiplied by one hundred. Background matched on 255 of 255, including the rule that wireframe forces the primary colour. The twenty-nine palette indices map one to one onto twenty-nine stable palette names in array order.

One derivation failed and is reported as failed rather than fudged. A rule deriving the Colors trait from the number of distinct colours in the selected palette matched only 235 of 255. The artist's own account says palette type mono, duo or tritone was added as a deliberate rarity axis, which suggests it is drawn rather than derived from the palette contents, but the draw does not appear in the retrieved script. The trait extractor that produces the platform's fourteen traits is not part of the artist script, so the remaining ten traits were not reduced to rules and no claim is made about them.

The sweep also found that token 84000198 carries an empty trait object while every other token carries fourteen. Its hash is present and the generator reproduces values for it, so this is an indexing gap rather than a property of the token. Reported for the coordinator.

## Token identity and visual observation

Five token identities were confirmed on the exact contract before use, plus the full 256 row sweep. All four candidate identifiers supplied in the assignment exist, so no substitution was needed.

Sampling rationale beyond the supplied candidates: the artist makes a specific public claim about the wireframe feature and about his own token 0, so invocation 0 and a second wireframe token, invocation 10, were adopted as examples in order to test that claim visually as well as arithmetically. Invocation 200 was adopted as the AB5D holding and used for the motion and interaction work.

Token page checks: five token URLs and the collection URL were requested and all returned status 200 at 2026-09-17T23:46:25Z. No status has been fabricated.

Images: four were loaded at native 2400 by 2400 through the platform media proxy and viewed.

## Motion, interaction and audio

This is the only project in the batch so far with documented interactive controls, so each was exercised individually rather than described from the code.

Baseline: canvas 1224 by 1224, reported frame rate thirty, fifty-one primitives in the running sketch matching the indexed Amount trait exactly. Four canvas signatures sampled about nine tenths of a second apart were all different.

The p control: pressing it set the orbit flag to zero and froze the orbit counter at 709, still 709 after a further two seconds. In that same interval the per-shape rotation counter advanced from 1270 to 1330, exactly sixty frames in two seconds at thirty frames per second, and the canvas kept changing. The control documented as play and pause therefore pauses only the orbital motion. This was measured, not inferred, and it is reported as a divergence between the documented control and its effect rather than as a fault.

The t control: pressing it set the trail flag and the background stopped being cleared, producing smeared arcs and ghosting; pressing it again cleared the accumulation on the following frame.

The mouse: the orbit control flag was zero before any press and one after, which confirms from the running sketch what the code says, that the mouse does nothing until the viewer clicks once. After a click and drag the camera moved and previously hidden shapes became visible.

The r control: returned the view to the default framing. The orbit control flag remained one, so the reset restores the camera without disabling mouse control.

Audio: no audio or video element in the document and no audio anywhere in the script. No sound was heard because there is none. Browser autoplay policy was therefore never engaged.

## Header ownership and media

The complete current AB5D wallet set was read from the platform's own profile record: `0xce6dc14c5494d8a4325a81d3b257d130fa2039d1`, `0x2247247ee0eee59557e6cd14f7e047f6a9309b5c` and `0xdd19308a9731cdecb67e0d80ca6823394208c045`. The ownership sweep across the ten batch projects returned token 84000200 held by the third of those. The assignment's cached candidate named the same token and owner; the live check confirms rather than repeats it.

The presentation file recommends the live renderer as the header medium, with a caution the coordinator should note: an embedded PrimiDance renderer is interactive, so a site visitor who clicks and drags inside it will change the composition, and pressing t will turn on trails. That is a property of the artwork, not a bug, but it should be a conscious choice.

Every still cited in this package is the platform's default-state preview. None is a frame composed by moving the camera during research. This is stated explicitly because for an interactive work the distinction matters.

## Mint chronology and calculations

Events distinguished: first indexed mint 2021-06-05T06:41:58Z; activation 2021-06-08T14:38:25Z; second indexed mint 2021-06-13T15:00:21Z, duplicated in `start_datetime`; completion 2021-07-16T21:19:25Z.

The three day gap between first mint and activation is explained by the artist's own account of minting token 0 himself before going live, and the token record corroborates both the timing and the rare trait he says he drew.

The five day gap between activation and the second mint is noted because it shows that activation is not a sale opening.

One calculation is performed: second indexed mint to completion, 33 days, 6 hours and 19 minutes, covering invocations 1 through 255. Labelled inferred. Not presented as a public sale duration.

Timezone handling: the project page displays 14 June 2021 when read from a UTC+10 browser, which is the second-mint timestamp rendered locally. In UTC that timestamp is 13 June. Activation is 8 June UTC. Three different dates are defensible depending on which event and which timezone is meant, so the presentation file names the event and the timezone explicitly and warns against taking the date from the page.

Price: 100000000000000000 wei, that is 0.1 ETH, recorded as the currently configured value and as reported. No primary announcement of an original price was located.

## Rights and conflicts

Only one rights statement was located: the index field `license` reading "CC BY-NC 4.0" with `link_to_license` null. The live project page publishes none, and the artist's long account of the work does not mention licensing.

The licence field census across all 359 projects on this contract returns 34 distinct strings with only 87 carrying any link, which establishes that the field is unvalidated free text. A well-formed label is therefore still only a label.

Artwork rights recorded as category creative-commons, label preserved exactly, terms url null, status reported. Code rights unknown and kept separate. Third-party p5 licensing recorded separately and not inspected.

One conflict is recorded that is specific to this work. Because the artist has deliberately handed camera, playback and trail control to the viewer, any still of a PrimiDance token is a state the viewer produced. Nothing in the available rights material addresses how such a reproduction should be attributed. This is left open rather than resolved, and the presentation file records that every still cited here is a default-state preview.

## Unresolved questions and exceptions

Seven exceptions are raised, all pending, all assigned to the publication coordinator: missing licence terms; unknown code rights; attribution of stills of an interactive work; unverified original price; a development narrative that is not independent; a trait extractor absent from the retrieved script leaving ten of fourteen traits underived; and the empty trait object on token 84000198.

Unresolved leads not converted into sources: no interview was located; the artist's site pages carry no publication dates; the relationship between PrimiDance and the later PrimiLife and PrimiEnd was read but not investigated; upstream p5 licensing was not inspected.

## Actual model, tools, elapsed time and measured 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.

Tools actually used: HTTP POST to the Art Blocks public GraphQL index; a browser pane on the operator's computer for page rendering, text extraction, image inspection, live renderer execution, keyboard and mouse input to the artwork, and sketch state sampling; an independent reimplementation of the artist's generator run against all 256 token hashes; the Web Crypto API for the SHA-256 digest; local shell and file tools for package assembly and validation. No human reviewed or edited the prose.

Word count: the coordinator waived the 1,500 to 2,500 word limit for this batch during the session. This essay runs longer than the original cap by that instruction.

Elapsed work: produced within a single continuous session on 18 September 2026, Melbourne time.

Telemetry: no token usage telemetry is exposed to the agent. All counts are null in usage.json with the reason given. Nothing estimated and labelled measured; batch totals not divided into invented per-essay figures.


## Coordinator reconciliation

OpenAI Codex reconciled presentation and example records with the independent review evidence. Thirty fps is a program request, not a measurement. Orbit pause and trails were visibly observed; drag and reset were attempted without camera-state measurement. Audio was not auditioned. Three other tokens received single-frame original-renderer inspection. The standard CC BY-NC 4.0 deed is now linked; historical terms and any separate artist-code grant remain unresolved. Original submitted presentation and examples are retained in evidence for attribution.
