{
  "schema": "ab5d-series-essay/1",
  "identity": {
    "chainId": 1,
    "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
    "projectId": 85,
    "slug": "70s-pop-series-two-by-daniel-catt",
    "title": "70s Pop Series Two",
    "artistCredit": "Daniel Catt",
    "artistDossierUrls": [
      "https://ab5d.xyz/artists/daniel-catt/"
    ]
  },
  "revision": 2,
  "researchCutoff": "2026-09-18",
  "status": "published-with-research-limitations",
  "facts": [
    {
      "id": "edition-size",
      "topic": "work-context",
      "value": 256,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S01"
      ],
      "status": "verified",
      "note": "Indexed invocations 256 against max_invocations 256; page states a fixed edition of 256."
    },
    {
      "id": "project-id",
      "topic": "work-context",
      "value": 85,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "verified",
      "note": "On-chain project id. The AB5D atlas position 86 is a catalogue index, not this."
    },
    {
      "id": "series-marker",
      "topic": "work-context",
      "value": "Series trait reads Two on all 256 tokens",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S04",
        "S01"
      ],
      "status": "verified",
      "note": "A fixed marker rather than a variable feature, consistent with the mint statement calling this Series Two."
    },
    {
      "id": "script-bytes",
      "topic": "construction",
      "value": 12155,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "verified",
      "note": "Single script fragment."
    },
    {
      "id": "renderer-is-canvas2d",
      "topic": "construction",
      "value": "Artwork drawing uses Canvas 2D; p5 contributes colour operations",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S06"
      ],
      "status": "verified",
      "note": "Executable code inspected; resize removes existing canvases. No claim that an unused default canvas remains permanently."
    },
    {
      "id": "tile-construction",
      "topic": "construction",
      "value": "Arc and straight-band tiles; base and boost expression permits 4 through 17 tiles per side",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S04"
      ],
      "status": "verified",
      "note": "Larger tiles combine cells; smaller tiles subdivide them. Actual token flags govern these branches."
    },
    {
      "id": "animation-rule",
      "topic": "construction",
      "value": "animates only when Fill is Rainbow or TickTock is not None, and the two are mutually exclusive by construction",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "verified",
      "note": "Direct script finding. TickTock is assigned only when the grid is uniform and the fill is not Rainbow."
    },
    {
      "id": "animated-population",
      "topic": "examples",
      "value": "50 of 256 classified for animation: 24 Rainbow and 26 non-None TickTock, zero overlap",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S04",
        "S02"
      ],
      "status": "inferred",
      "note": "Computed from complete indexed feature census and inspected animation condition. This is not a runtime test of all 256 outputs."
    },
    {
      "id": "ticktock-distribution",
      "topic": "examples",
      "value": "Chaser4 9, Chess 7, Chaser1 6, Wipe 3, Sweep 1",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S04"
      ],
      "status": "verified",
      "note": "The single Sweep token is invocation 158."
    },
    {
      "id": "ninja-token",
      "topic": "examples",
      "value": "one Ninja token, invocation 248",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S04",
        "S07"
      ],
      "status": "verified",
      "note": "The only branch in the script that changes the canvas composite operation, inverting the finished image."
    },
    {
      "id": "first-token-minted",
      "topic": "mint",
      "value": "2021-06-08T21:06:09+00:00",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S03"
      ],
      "status": "verified",
      "note": "First indexed token. Its allocation type is not established."
    },
    {
      "id": "activated",
      "topic": "mint",
      "value": "2021-06-12T21:37:38+00:00",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "verified",
      "note": "Indexed activation; no inference about public sale availability from the gap before the second mint."
    },
    {
      "id": "second-token-minted",
      "topic": "mint",
      "value": "2021-06-13T16:59:26+00:00",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S03"
      ],
      "status": "verified",
      "note": "Second indexed mint; distinct from first mint and activation."
    },
    {
      "id": "completed",
      "topic": "mint",
      "value": "2021-06-13T17:08:56+00:00",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "verified",
      "note": "Calendar date 13 June 2021 in UTC."
    },
    {
      "id": "second-to-complete-interval",
      "topic": "mint",
      "value": "9 minutes 30 seconds",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "inferred",
      "note": "Arithmetic between indexed second mint and completion. Not a verified public sellout duration."
    },
    {
      "id": "current-price",
      "topic": "mint",
      "value": "95000000000000000 wei (0.095 ETH)",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "reported",
      "note": "Currently configured price on a completed project. Not proof of the price paid at mint."
    },
    {
      "id": "audio",
      "topic": "examples",
      "value": "No audio instructions found in inspected executable script",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S05",
        "S06",
        "S02"
      ],
      "status": "verified",
      "note": "Code inspection only; sound was not auditioned."
    },
    {
      "id": "interaction",
      "topic": "examples",
      "value": "Resize handler; no keyboard or pointer controls found in executable script",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S01"
      ],
      "status": "verified",
      "note": "Code inspection. No comprehensive interaction test claimed."
    }
  ],
  "rights": {
    "artwork": {
      "reportedLabel": "NIFTY",
      "category": "custom",
      "termsUrl": null,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "note": "Reported NIFTY label; exact operative terms and history not established.",
      "unresolvedConflicts": []
    },
    "code": {
      "reportedLabel": null,
      "category": "unknown",
      "termsUrl": null,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S01"
      ],
      "note": "No licence statement accompanies the artist script. Fully on-chain storage establishes readability, not redistribution rights.",
      "unresolvedConflicts": []
    },
    "thirdParty": [
      {
        "component": "Embedded literary text",
        "reportedLabel": null,
        "category": "unknown",
        "termsUrl": null,
        "observedAt": "2026-09-18",
        "sourceIds": [
          "S02"
        ],
        "note": "Initial unused string assignment identified; literary attribution retained as submitted and not independently authenticated. Permission status unknown; no allegation of absence. Text not reproduced."
      },
      {
        "component": "p5.js",
        "reportedLabel": "LGPL-2.1",
        "category": "custom",
        "termsUrl": "https://raw.githubusercontent.com/processing/p5.js/1.0.0/license.txt",
        "observedAt": "2026-09-18",
        "sourceIds": [
          "S15"
        ],
        "note": "Upstream dependency licence identified; distinct from artist-code and artwork grants."
      }
    ]
  },
  "sections": [
    {
      "id": "work-context",
      "heading": "The work and its context",
      "bodyMarkdown": "70s Pop Series Two fills a square with bands that turn, cross and reconnect. Black outlines separate colours and make routes conspicuous, but following one route soon reveals how easily a small change of direction can reorganise the whole. In the examples examined here, the surface can resemble a dense network of pipes or a much simpler drawing of loops. The difference depends on line count, colour and tile scale together. [^S05][^S06][^S07]\n\nDaniel Catt released the 256-work series through Art Blocks Factory in June 2021. It is project 85 on its Ethereum contract. The title locates it within his continuing Pop series, and his later account explains its relationship to Truchet tiles and pen plotting. The 1970s register is evident in the title and release language, but the drawing's specific structure is recoverable from the program. [^S01][^S02][^S14]\n\nThe series includes both static and animated outputs. Fresh feature records classify 24 as Rainbow and 26 with a non-None TickTock setting, with no overlap. The inspected code associates those conditions with ongoing animation; all other feature combinations take the static drawing path. This is a code-and-metadata classification, not a claim that all 256 works were individually tested in a browser. AB5D's #228 provides a directly observed example of changing tile orientations. [^S04][^S02][^S05]"
    },
    {
      "id": "conception",
      "heading": "Conception and development",
      "bodyMarkdown": "Catt's October 2024 newsletter gives a retrospective account that connects 70s Pop to an earlier pen-plot design. He identifies curved and straight Truchet tiles as the basic vocabulary and distinguishes Series Two through its combination of larger and smaller tiles. The account explains how simple components can make a surface whose construction is difficult to recognise at first glance. [^S14]\n\nHe also distinguishes the Art Blocks designs, intended to connect at opposite edges when tiled, from later physical plots for which he began turning edge paths back into the image. This is evidence of a continuing investigation across screen and paper, not proof that every later plotting technique was present in the 2021 script. The newsletter's discussion of later subdivision and merging experiments should be read with that chronology in mind. [^S14]\n\nThe deployed program makes scale variation concrete through double-size tiles and half-size subtiles. These modify a regular grid without abandoning its matching endpoints. Their importance is perceptual as well as technical: a broad turn can dominate a region while smaller paths make neighbouring areas appear denser. The full-script analysis below concerns this deployed mechanism rather than a reconstruction of every studio experiment. [^S02]"
    },
    {
      "id": "construction",
      "heading": "How the work was constructed",
      "bodyMarkdown": "The executable program uses a four-word xorshift state, initialised from four eight-character hexadecimal chunks following the hash prefix. Each update changes the state through shifts and exclusive-or operations and returns an unsigned state value divided by 2 to the power 32. This identifies the implemented mechanism without ranking it as better than unrelated artists' generators or claiming a statistical audit. [^S02]\n\nThe visible drawing uses the browser's Canvas 2D paths, arcs, fills, strokes and gradients. p5 supplies colour operations, including interpolation. That is an important part of the appearance even though p5 is not issuing the final drawing commands. The palette conversion also deserves care: values obtained through p5's HSB colour methods are inserted into CSS hsl strings. Replacing this sequence with a conventional colour-space conversion could change the result. [^S02]\n\nThe initial tile count is derived from two random values, then may receive boosts of two and four. The expression permits counts from four through seventeen; an observed edition range would require a separate census. Line count is coupled to those values and subsequently adjusted by several conditions. Density therefore emerges from related decisions, not two independently selected counts. [^S02]\n\nEach occupied tile receives either paired quarter-arc constructions or paired straight constructions. Coloured bands are separated by black strokes. Their endpoints allow adjacent tiles to make longer apparent routes across the grid. A large tile occupies a two-by-two block and marks its three neighbours as skipped; a small tile contains four subtiles at half scale. These operations alter the scale of a route locally while preserving the square structure of the whole. [^S02]\n\nBiggering and Smallanator correspond to flags permitting those changes. The Format value affects row-dependent probabilities for their placement. A format name alone does not prove that any particular tile was enlarged: the relevant flag and subsequent decisions must also permit it. In particular, fewer than eight tiles per side disables the large-tile flag. Describing an Outer-format seven-by-seven work as necessarily having enlarged edge tiles would therefore be incorrect. [^S02]\n\nThe palette tables contain eleven entries in one group and six in another, including repeated entries; a further branch generates hue values. Colours are interpolated, sampled and mirrored into a band sequence. Flat reduces the result to one colour. Stripes retains a colour sequence; other branches introduce gradients, including white-to-black Metallic and a spectrum for Rainbow. These rules connect the palette to line count and tile subdivision rather than simply applying one fixed swatch to the picture. [^S02]\n\nRainbow shifts its gradient hues according to elapsed wall-clock time. The Ninja branch, reached under a small-line-count condition and an additional random decision, supplies white and then fills the completed canvas with white using difference compositing. The program resets to source-over at the beginning of each drawing pass. These are distinct operations: one changes colour with time, while the other changes the final colour relationship through compositing. [^S02]\n\nA needsAnimating flag becomes true for Rainbow or a non-None TickTock value. TickTock is assigned only when the large- and small-tile flags are both off and the fill is not Rainbow. The conditions therefore separate the two animation mechanisms in this program. Whether the minted feature records match that separation is an additional question, answered by the edition query rather than by code reading alone. [^S02][^S04]\n\nTickTock schedules changes to tile type using timestamps. Arc types advance through four corner configurations, while straight types alternate between two orientations. Chess offsets alternating tiles by a second on a two-second recurrence. Wipe and Sweep stagger columns and rows. Chaser1 and Chaser4 share an initial tile-by-tile delay but use different recurrence intervals: Chaser1 depends on the square of the tile count, whereas Chaser4 uses a shorter tile-count-based interval plus four seconds. The names should not be collapsed into one identical timer. [^S02]\n\nDrawing checks whether each scheduled action is due and advances it by one interval. This is different from recomputing an orientation directly from total elapsed time, so long interruptions deserve testing in preservation work. The normal animated path requests another browser animation frame; the static path does not. Actual frame rate is a runtime property and was not established by this inspection. [^S02]\n\nThe resize routine removes existing canvas elements, creates a new artwork canvas and sizes it to the smaller window dimension, accounting for device pixel ratio. It retains the existing tile holders and redraws the static case on resize. Consequently, an unused canvas observed in one session should not be described as guaranteed to remain for the page's entire lifetime. No artist-defined keyboard or pointer controls, or audio mechanism, were found in the executable drawing code. [^S02]"
    },
    {
      "id": "mint",
      "heading": "The mint",
      "bodyMarkdown": "The current index records the first mint on 8 June 2021, activation on 12 June, and the second mint and completion on 13 June. These events should remain distinct. An earlier token can establish that the project existed before its later release, but mint order alone does not identify an allocation as a proof or artist reserve. [^S02][^S03]\n\nThe second mint is recorded at 16:59:26 and completion at 17:08:56, an interval of 9 minutes and 30 seconds. That interval does not independently establish when public purchasing became possible. In particular, the gap after activation is not proof that the sale remained closed: an absence of recorded mints cannot by itself establish the state of purchasing access. [^S02]\n\nThe sampled token records place #10 at 16:59:49, #20 at 17:00:06 and #228 at 17:07:24. They show particular points in the sequence without identifying every recipient or payment. The configured price is currently 0.095 ETH. A contemporaneous price announcement was not recovered, so the current value is not presented as a verified opening price or the amount paid by every recipient. [^S02][^S03]"
    },
    {
      "id": "rights",
      "heading": "Copyright and licensing",
      "bodyMarkdown": "The indexed artwork label is NIFTY, and its terms-link field is empty. This review has not established an operative document or version for that label. It is retained as reported rather than silently equated with another licence. Historical grants or changes also remain unresolved. [^S02]\n\nNo separate artist-code permission notice was found in the executable program reviewed here. Public availability does not itself supply such a grant. The p5.js 1.0.0 dependency has its own upstream licence file identifying LGPL version 2.1. Its use for colour operations does not make that licence a demonstrated grant for Catt's program or the resulting artwork. [^S02][^S15]\n\nThe script also begins with an unused string assignment named Painting_A_Wave. The submitted research identifies its literary text as a Howard Moss poem; the coordinator checked the assignment structure and absence of subsequent references, but did not independently authenticate the literary text. No specific permission record was recovered. This is a limitation of the research, not a finding about whether permission exists. The text and raw artist script are not reproduced in this essay package. [^S02]\n\nThe original prose is dedicated to CC0. Artwork, artist software, dependency and any embedded third-party material remain separate rights records. The archive preserves those distinctions rather than deriving a general reuse permission from token ownership or code accessibility. [^S02][^S15]"
    },
    {
      "id": "examples",
      "heading": "Close reading of examples",
      "bodyMarkdown": "The comparison uses #0, #10, #228 and #248, with full token identifiers 85000000, 85000010, 85000228 and 85000248 on the project's Ethereum contract. All four original renderers were inspected. Two states were observed for #0 and #228, while the other two received single-state visual inspection. The selection contrasts colour, scale and animation without claiming to represent every possible combination. [^S03][^S05][^S06][^S07]\n\nIn #0, green bands alternate with black outlines across a dense surface of turns and loops. A long vertical run through the middle and a horizontal run across the upper-left region give the eye two strong directions. Around them, smaller nested curves make the surface appear more crowded. The green varies enough that some bands advance brightly while others nearly merge with the black divisions. Colour therefore changes apparent depth even though the forms occupy a flat canvas. [^S06]\n\nThe large curves in #0 are particularly effective beside the small loops. A viewer can follow several parallel bands around a broad turn, then encounter a tight circular return that changes the pace of looking. The tile construction remains discoverable, but the strongest visible units are often longer routes assembled across boundaries. Its two observed states were visibly unchanged, consistent with its Stripes fill and None TickTock record. That observation does not independently reproduce the submitted pixel-signature experiment. [^S06][^S02][^S04]\n\nIn #10, pale blue fills and black outlines make the bands read as broad ribbons. The absence of a multicolour stripe sequence gives the outline more authority: the eye follows bends and enclosed spaces instead of stepping between adjacent colours. Larger curves coexist with smaller turns, while strong horizontal runs near the upper right and lower left interrupt the predominance of curves. A shared blue surface can make separate routes seem part of one folded sheet, although the code constructs them from local tile operations. [^S07][^S02]\n\nThe AB5D holding, #228, combines coral-red, pale and black-separated bands with small blue centres. The indexed record identifies a seven-by-seven grid, nine lines and Chaser4. It also records both Biggering and Smallanator as false. Its Outer format therefore must not be described as evidence of enlarged edge tiles. The inspected code likewise disables large tiles below eight per side. Fresh ownership data matches #228 to one of the complete linked-wallet set retrieved for AB5D. [^S03][^S04][^S13][^S02]\n\nIn the first observed #228 state, rounded routes across the upper part connected with conspicuous straight runs. In the later state, portions of the upper-left and upper-middle regions had turned into rounded returns and different connections. Several lower circular targets remained recognisable. This makes animation perceptible as a local revision of a familiar arrangement rather than a replacement of the entire image. The viewer can keep one region in memory while noticing that another has changed its route. [^S05]\n\nThose changes also expose how the apparent pipes are assembled. In a still, a long route can seem continuous and inevitable. When a tile changes orientation, its local role becomes visible: it supplies one bend or straight segment among many. Yet the uniform band treatment quickly allows the eye to read the new configuration as a coherent route again. Chaser4's code schedules tile changes over time; the screenshots establish visible change, without measuring an exact cycle duration or frame rate. [^S05][^S02]\n\nIn #248, narrow white lines on black replace the coloured bands. Small loops and crossings occupy the upper region, while much larger turns spread through the lower half. Their scale changes are easier to notice because the line treatment remains so consistent. Some forms resemble rounded enclosures, while others seem to continue beyond the square. The indexed Ninja label and inspected difference-compositing branch provide a technical explanation for its monochrome treatment; the image need not be ranked by its rarity to make that formal difference worth examining. [^S07][^S04][^S02]\n\nThe full feature census contains 24 Rainbow labels and 26 non-None TickTock labels, with zero intersection. Within TickTock are nine Chaser4, seven Chess, six Chaser1, three Wipe and one Sweep. These counts support the classification used here; runtime behaviour for all those tokens was not tested. No audio was auditioned in the coordinator review. No audio mechanism or artist-defined keyboard or pointer controls were found in the drawing program, which does respond to window resizing. [^S04][^S02]"
    },
    {
      "id": "significance",
      "heading": "Significance and limitations",
      "bodyMarkdown": "70s Pop Series Two makes continuity out of local decisions. Curved and straight components join into routes whose scale and direction can become more conspicuous than the grid that supports them. The variation between broad turns and tight loops is central to that effect. Catt's later account connects this multiscale construction to a practice moving between screen images and pen plots. [^S02][^S14]\n\nThe animated cases reveal a further consequence of modular construction. In #228, a change to a local orientation redirects a route while much of the surrounding image remains recognisable. That produces a particular kind of attention: the viewer compares the present arrangement with a recent one. Rainbow takes another path by changing gradient colour over time. Neither behaviour should be inferred from a preview still alone. [^S05][^S02]\n\nThe static examples remain substantial pictures in their own right. Green bands in #0 establish density through repetition and tonal contrast; pale blue #10 makes outline and enclosure more prominent; monochrome #248 brings scale changes forward. These are different ways of making the same basic construction available to sight. Their interest does not depend on treating every uncommon setting as aesthetically superior. [^S06][^S07]\n\nFor preservation, the relationship between Canvas 2D and p5 colour operations matters alongside the token input and script. So do the timer rules and resize behaviour. A future reproduction should retain those mechanisms or document changes, rather than assuming that an equivalent-looking tile system is the same work. The present review inspects code and selected original renderers; it does not constitute an independently reproduced implementation. [^S02]\n\nUnresolved research questions:\n\n- Recover contemporary sale terms, original price and allocation evidence.\n- Identify operative artwork terms for the reported NIFTY label and any separate artist-code grant.\n- Independently authenticate the embedded literary attribution and locate any relevant permission record.\n- Compare the indexed script with a pinned chain retrieval.\n- Test representative Rainbow and additional TickTock outputs, including resize and long-interruption behaviour. [^S02][^S04]"
    }
  ],
  "examples": [
    {
      "id": "E01",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "85000000",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000000",
      "sourceIds": [
        "S03",
        "S06",
        "S07"
      ],
      "selectionNote": "Invocation 0, minted four days before activation and consistent with a proof. Selected for sustained analysis as the static control case against the animated holding.",
      "observationNote": "Coordinator observation: Dense green and black bands; broad turns and smaller nested loops. Strong long vertical strip down middle, horizontal run across upper-left/middle. Two screenshots unchanged visibly; no pixel signature measured."
    },
    {
      "id": "E02",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "85000010",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000010",
      "sourceIds": [
        "S03",
        "S07"
      ],
      "selectionNote": "Invocation 10, from the suggested sample, retained as the Flat fill case at a low line count, which is visually the furthest from the striped majority.",
      "observationNote": "Coordinator observation: Pale blue filled ribbons separated by black outlines. Larger curves among smaller turns; strong horizontal bars near upper-right and lower-left. Single original-renderer screenshot."
    },
    {
      "id": "E03",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "85000228",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000228",
      "sourceIds": [
        "S03",
        "S05",
        "S07",
        "S13"
      ],
      "selectionNote": "The AB5D holding, verified against the current linked wallet set, and one of only 26 tokens in the edition carrying a TickTock animation mode. Selected for the sustained motion analysis and recommended as the header work.",
      "observationNote": "Coordinator observation: Red/coral, pale and black outlined concentric bands with small blue centres, filling a uniform tile grid. Between two screenshots, upper-left and upper-middle routes changed from horizontal connections into rounded returns, while lower circular targets remained recognisable. No frame count or exact elapsed interval measured."
    },
    {
      "id": "E04",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "85000248",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000248",
      "sourceIds": [
        "S04",
        "S07"
      ],
      "selectionNote": "The single Ninja token in the edition, identified from the trait sweep. Selected in place of a fourth suggested candidate because it is the only token in which the script changes the canvas composite operation, and because a one-of-256 branch is worth documenting.",
      "observationNote": "Coordinator observation: White narrow lines on black, combining small loops and crossings with much larger turns lower half. Uniform white line character makes differently sized paths particularly visible. Single original-renderer screenshot."
    }
  ],
  "mediaIds": [],
  "provenance": {
    "operator": "Phil (AB5D coordinator), via the Claude desktop application",
    "agent": "Claude in Cowork mode, Claude Agent SDK session",
    "model": "Claude (submitted claude-opus-5), reviewed by OpenAI Codex",
    "modelVersion": "claude-opus-5 (session-reported exact model id; the routing label on this batch was 'claude', which is not a model identifier)",
    "tools": [
      "Art Blocks public GraphQL index over HTTP POST",
      "browser pane on the operator's computer for page rendering, text extraction, image inspection, live renderer execution and canvas sampling",
      "SHA-256 over the retrieved script bytes computed in the browser using the Web Crypto API",
      "web search for artist material",
      "local shell and file tools for package assembly and validation"
    ],
    "humanEditorialInvolvement": "Commissioned by Phil; website publication authorized by Phil on 2026-09-17. No claim of line-by-line human fact checking.",
    "originalProseLicense": "CC0-1.0",
    "revisions": [
      {
        "reviewer": "OpenAI Codex",
        "recordedAt": "2026-09-18T02:46:46.594992+00:00",
        "scope": "Independent executable-code review, full token feature census, linked-wallet ownership, four original-renderer observations, artist newsletter and library licence review; substantial prose and metadata corrections. Original model credit retained as submitted.",
        "usage": null,
        "usageNote": "No separately metered revision usage available."
      }
    ],
    "generation": {
      "schema": "ab5d-essay-generation/1",
      "model": "Claude (submitted claude-opus-5), reviewed by OpenAI Codex",
      "displayName": "Claude (submitted model: claude-opus-5), reviewed and revised by OpenAI Codex",
      "scope": "One submitted Claude essay with independent source, script, visual, chronology and rights review",
      "essayCount": 1,
      "usage": null,
      "perEssayUsage": null,
      "usageDetail": "Claude supplied no token telemetry. Review usage is not separately measured. Submitted model identifier is retained without independent runtime verification.",
      "contributors": {
        "operator": "Phil (AB5D coordinator), via the Claude desktop application",
        "agent": "Claude in Cowork mode, Claude Agent SDK session",
        "model": "claude-opus-5",
        "modelVersion": "claude-opus-5 (session-reported exact model id; the routing label on this batch was 'claude', which is not a model identifier)",
        "tools": [
          "Art Blocks public GraphQL index over HTTP POST",
          "browser pane on the operator's computer for page rendering, text extraction, image inspection, live renderer execution and canvas sampling",
          "SHA-256 over the retrieved script bytes computed in the browser using the Web Crypto API",
          "web search for artist material",
          "local shell and file tools for package assembly and validation"
        ],
        "humanEditorialInvolvement": "None. No human reviewed, edited or fact-checked the prose before submission. Status is draft-for-human-review.",
        "originalProseLicense": "CC0-1.0",
        "revisions": [
          {
            "reviewer": "OpenAI Codex",
            "recordedAt": "2026-09-18T02:46:46.594992+00:00",
            "scope": "Independent executable-code review, full token feature census, linked-wallet ownership, four original-renderer observations, artist newsletter and library licence review; substantial prose and metadata corrections. Original model credit retained as submitted.",
            "usage": null,
            "usageNote": "No separately metered revision usage available."
          }
        ]
      }
    }
  },
  "codeInspection": {
    "url": "https://artblocks-mainnet.hasura.app/v1/graphql",
    "locator": "POST projects_metadata where slug _eq 70s-pop-series-two-by-daniel-catt, selecting script and scripts{index script}; identity corroborated by contract_address 0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270 and project_id 85",
    "sha256": "91f5e411a74c949c3d05e83c93ee0b444bc3cec18e593ba97354aa814daad237",
    "retrievedAt": "2026-09-18T02:41:39.279148+00:00",
    "method": "Independent index retrieval and matching SHA-256; coordinator read the complete executable program following the initial unused string assignment. Literary text was not independently authenticated. Original generator was separately opened for visual observations; see evidence.coordinatorVisualReview.",
    "executed": true,
    "chainBlock": null
  },
  "editorialExceptions": [
    {
      "id": "rights-terms-missing",
      "status": "pending",
      "reviewer": "publication coordinator",
      "reason": "Current index reports NIFTY with no terms URL. Operative artwork terms remain unverified; no unrestricted permission inferred."
    },
    {
      "id": "code-rights-unknown",
      "status": "pending",
      "reviewer": "publication coordinator",
      "reason": "No licence statement was located for the artist script."
    },
    {
      "id": "original-price-unverified",
      "status": "pending",
      "reviewer": "publication coordinator",
      "reason": "The 0.095 ETH figure is the currently configured project price, not a verified original mint price."
    }
  ],
  "presentation": {
    "editionSize": 256,
    "maximumEdition": 256,
    "mintDate": "2021-06-08T21:06:09+00:00",
    "mintDateMeaning": "First indexed mint",
    "artwork": {
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "token_id": "85000228",
      "invocation": 228,
      "owner_address": "0xdd19308a9731cdecb67e0d80ca6823394208c045",
      "canonicalUrl": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000228",
      "preview_asset_url": "https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000228.png",
      "live_view_url": "/series/70s-pop-series-two-by-daniel-catt/artwork.html",
      "canonicalLiveUrl": "https://generator.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000228",
      "mode": "live",
      "copyrightStatus": "NIFTY (reported label; specific terms unverified)",
      "copyrightUrl": null,
      "displayBasis": "remote platform media, embedded from the Art Blocks live renderer; nothing redistributed in this package"
    }
  },
  "observationImages": [
    {
      "id": "E01",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "85000000",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000000",
      "sourceIds": [
        "S03",
        "S06",
        "S07"
      ],
      "selectionNote": "Invocation 0, minted four days before activation and consistent with a proof. Selected for sustained analysis as the static control case against the animated holding.",
      "observationNote": "Coordinator observation: Dense green and black bands; broad turns and smaller nested loops. Strong long vertical strip down middle, horizontal run across upper-left/middle. Two screenshots unchanged visibly; no pixel signature measured.",
      "previewUrl": "https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000000.png",
      "liveUrl": "https://generator.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000000"
    },
    {
      "id": "E02",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "85000010",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000010",
      "sourceIds": [
        "S03",
        "S07"
      ],
      "selectionNote": "Invocation 10, from the suggested sample, retained as the Flat fill case at a low line count, which is visually the furthest from the striped majority.",
      "observationNote": "Coordinator observation: Pale blue filled ribbons separated by black outlines. Larger curves among smaller turns; strong horizontal bars near upper-right and lower-left. Single original-renderer screenshot.",
      "previewUrl": "https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000010.png",
      "liveUrl": "https://generator.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000010"
    },
    {
      "id": "E03",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "85000228",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000228",
      "sourceIds": [
        "S03",
        "S05",
        "S07",
        "S13"
      ],
      "selectionNote": "The AB5D holding, verified against the current linked wallet set, and one of only 26 tokens in the edition carrying a TickTock animation mode. Selected for the sustained motion analysis and recommended as the header work.",
      "observationNote": "Coordinator observation: Red/coral, pale and black outlined concentric bands with small blue centres, filling a uniform tile grid. Between two screenshots, upper-left and upper-middle routes changed from horizontal connections into rounded returns, while lower circular targets remained recognisable. No frame count or exact elapsed interval measured.",
      "previewUrl": "https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000228.png",
      "liveUrl": "https://generator.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000228"
    },
    {
      "id": "E04",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "85000248",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000248",
      "sourceIds": [
        "S04",
        "S07"
      ],
      "selectionNote": "The single Ninja token in the edition, identified from the trait sweep. Selected in place of a fourth suggested candidate because it is the only token in which the script changes the canvas composite operation, and because a one-of-256 branch is worth documenting.",
      "observationNote": "Coordinator observation: White narrow lines on black, combining small loops and crossings with much larger turns lower half. Uniform white line character makes differently sized paths particularly visible. Single original-renderer screenshot.",
      "previewUrl": "https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000248.png",
      "liveUrl": "https://generator.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/85000248"
    }
  ],
  "publication": {
    "date": "2026-09-18",
    "url": "https://ab5d.xyz/series/70s-pop-series-two-by-daniel-catt/",
    "authorization": "Phil requested website publication on 2026-09-17.",
    "reviewSnapshot": "/docs/series-essays/production/70s-pop-series-two-by-daniel-catt/record.json",
    "unresolvedResearchQuestionsRetained": true
  }
}
