{
  "schema": "ab5d-series-essay/1",
  "identity": {
    "chainId": 1,
    "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
    "projectId": 88,
    "slug": "orthogone-by-pandelune",
    "title": "Orthogone",
    "artistCredit": "Pandelune",
    "artistDossierUrls": [
      "https://ab5d.xyz/artists/pandelune/"
    ]
  },
  "revision": 2,
  "researchCutoff": "2026-09-18",
  "status": "published-with-research-limitations",
  "facts": [
    {
      "id": "edition-size",
      "topic": "work-context",
      "value": 777,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S01"
      ],
      "status": "verified",
      "note": "Indexed invocations 777 against max_invocations 777; page states a fixed edition of 777. The largest edition in this batch."
    },
    {
      "id": "project-id",
      "topic": "work-context",
      "value": 88,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "verified",
      "note": "On-chain project id. The AB5D atlas position for this series is also 88, which is a coincidence."
    },
    {
      "id": "aspect-ratio-declared",
      "topic": "work-context",
      "value": 4,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S01",
        "S07"
      ],
      "status": "verified",
      "note": "Declared on the page and in the index; stored previews are 2400 by 600. This describes the platform's capture, not the artwork, which sizes its canvas from the browser window."
    },
    {
      "id": "script-bytes",
      "topic": "construction",
      "value": 6118,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "verified",
      "note": "Single script fragment. Roughly four fifths of it is a bundled third-party colour library; the artist's drawing program is about a thousand bytes at the end."
    },
    {
      "id": "bundled-library",
      "topic": "construction",
      "value": "a third-party colour-scheme library is compiled into the on-chain script",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S11"
      ],
      "status": "inferred",
      "note": "Distinctive arrays, wheel and methods correspond to color-scheme-js. Exact version and modification history not established."
    },
    {
      "id": "dependency-metadata-incomplete",
      "topic": "construction",
      "value": "external asset dependency count is 0 and only p5 is named",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "reported",
      "note": "External asset count does not inventory bundled code; zero external assets is not a contradiction."
    },
    {
      "id": "static-render",
      "topic": "examples",
      "value": "static; the animation loop is disabled during setup",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S05"
      ],
      "status": "verified",
      "note": "Independent original-renderer views showed no visible change; code calls noLoop. Submitted numerical signature measurements not independently repeated."
    },
    {
      "id": "index-flag-wrong",
      "topic": "work-context",
      "value": "display_static is false in the index, asserting the work animates",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S05",
        "S01"
      ],
      "status": "conflicting",
      "note": "The work does not animate. The project page correctly shows no animated badge. The same error appears on Stroming in this batch."
    },
    {
      "id": "canvas-shape-follows-window",
      "topic": "examples",
      "value": "the live canvas is sized to the browser window, not to the declared ratio",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S05",
        "S02"
      ],
      "status": "verified",
      "note": "Independently viewed at 1280 by 720. Horizontal band surrounded by more white space than panoramic preview; code sizes canvas from window."
    },
    {
      "id": "drawing-structure",
      "topic": "construction",
      "value": "a single left-to-right pass placing one coloured rectangle at a time with up to four white echoes",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S07"
      ],
      "status": "verified",
      "note": "The cursor advances before the echoes are drawn, so echoes overlap the following rectangle, which produces the interlocking. All coordinates are snapped to a small unit derived from the canvas width."
    },
    {
      "id": "black-rarity-not-allocated",
      "topic": "examples",
      "value": "Black or white fill selected once per echo group before the echo loop",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S04"
      ],
      "status": "verified",
      "note": "Integer branch selects black for one of 100 buckets; not an independent trial per echo. Some selected groups draw no echoes."
    },
    {
      "id": "luck-duplicates-black",
      "topic": "work-context",
      "value": "the luck trait is a relabelling of the black count",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S04"
      ],
      "status": "reported",
      "note": "Submitted indexed classification; visible shape count not independently audited."
    },
    {
      "id": "lucky-tokens",
      "topic": "examples",
      "value": "invocations 3, 374, 391, 402, 635, 641, 744 and 765",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S04"
      ],
      "status": "reported",
      "note": "Submitted indexed classification; visible shape count not independently audited."
    },
    {
      "id": "palette-delegated",
      "topic": "construction",
      "value": "8, 12 or 16 palette entries depending on scheme; entries need not be distinct colours",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S04"
      ],
      "status": "verified",
      "note": "contrast 8, triade and analogic 12, tetrade 16. Distance helper floors its 0.25 to 0.5 input range to zero, collapsing nominal hue separations."
    },
    {
      "id": "first-token-minted",
      "topic": "mint",
      "value": "2021-06-12T06:05:56+00:00",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S03"
      ],
      "status": "verified",
      "note": "Two and a half days before activation, consistent with a proof, and still held by the artist address. Calendar date 12 June 2021 in UTC."
    },
    {
      "id": "activated",
      "topic": "mint",
      "value": "2021-06-14T16:10:55+00:00",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "verified",
      "note": "About four hours before the second mint."
    },
    {
      "id": "second-token-minted",
      "topic": "mint",
      "value": "2021-06-14T20:24:03+00:00",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S03"
      ],
      "status": "verified",
      "note": "start_datetime carries the same value. This timestamp is what the project page renders as 15 June 2021 in a UTC+10 browser; in UTC it is 14 June."
    },
    {
      "id": "completed",
      "topic": "mint",
      "value": "2021-08-01T15:02:13+00:00",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "verified",
      "note": "Calendar date 1 August 2021 in UTC."
    },
    {
      "id": "second-to-complete-interval",
      "topic": "mint",
      "value": "47 days 18 hours 38 minutes 10 seconds",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "inferred",
      "note": "Arithmetic on the two indexed timestamps, covering invocations 1 through 776. The longest mint in this batch. Not a verified public sale duration."
    },
    {
      "id": "mint-pace",
      "topic": "mint",
      "value": "twenty invocations took a fortnight",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S03"
      ],
      "status": "verified",
      "note": "Invocation 1 minted 14 June, invocation 10 on 24 June, invocation 20 on 27 June. A corrective to any assumption that 2021 releases sold out in minutes."
    },
    {
      "id": "current-price",
      "topic": "mint",
      "value": "110000000000000000 wei (0.11 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": "trait-indexing-gap",
      "topic": "examples",
      "value": "five tokens carry empty trait objects",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S04"
      ],
      "status": "reported",
      "note": "Submitted index sweep. No independent runtime observation for the five tokens."
    },
    {
      "id": "audio",
      "topic": "examples",
      "value": "none",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S05",
        "S02"
      ],
      "status": "verified",
      "note": "No audio mechanism in inspected script. Coordinator did not audition sound; no claim about autoplay policy."
    },
    {
      "id": "interaction",
      "topic": "examples",
      "value": "none",
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S01"
      ],
      "status": "verified",
      "note": "The script registers no event listeners and the page documents no controls."
    },
    {
      "id": "palette-distance-zero",
      "topic": "construction",
      "value": 0,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02"
      ],
      "status": "verified",
      "note": "Integer helper c(.25,.5) floors every output to zero. Independently inspected complete deployed indexed script."
    }
  ],
  "rights": {
    "artwork": {
      "reportedLabel": "NFT License 2.0",
      "category": "custom",
      "termsUrl": null,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S01",
        "S08"
      ],
      "note": "Label reported by the Art Blocks index with link_to_license null. The live project page publishes no licence statement and the website of record is a social profile. The field is unvalidated free text carrying 34 distinct strings across this contract. Recorded as reported, not verified. NFT ownership is not an artwork permission.",
      "unresolvedConflicts": [
        "The same contract carries 'NFT License', ' NFT License' with a leading space, 'NFT License 2.0' and 'NFT 2.0' as separate strings, and Panelscape in this same batch carries the bare 'NFT License' where this project carries the 2.0 form. Nothing in the field distinguishes a deliberate version choice from a typing difference."
      ]
    },
    "code": {
      "reportedLabel": null,
      "category": "unknown",
      "termsUrl": null,
      "observedAt": "2026-09-18",
      "sourceIds": [
        "S02",
        "S01"
      ],
      "note": "No licence statement accompanies the artist's own portion of the script. Fully on-chain storage makes the whole bundle readable and grants nothing.",
      "unresolvedConflicts": []
    },
    "thirdParty": [
      {
        "component": "Likely color-scheme-js ancestor of bundled colour routine",
        "reportedLabel": "MIT",
        "category": "custom",
        "termsUrl": "https://github.com/c0bra/color-scheme-js/blob/master/LICENSE",
        "observedAt": "2026-09-18",
        "sourceIds": [
          "S11",
          "S12"
        ],
        "note": "Inspected upstream terms. Exact bundled version and attribution history unresolved; no compliance conclusion."
      },
      {
        "component": "p5.js 1.0.0",
        "reportedLabel": "LGPL-2.1",
        "category": "custom",
        "termsUrl": "https://raw.githubusercontent.com/processing/p5.js/1.0.0/license.txt",
        "observedAt": "2026-09-18",
        "sourceIds": [
          "S13"
        ],
        "note": "Versioned upstream licence inspected. Separate from artwork and artist-code permissions; custom is the schema category for software licences."
      }
    ]
  },
  "sections": [
    {
      "id": "work-context",
      "heading": "The work and its context",
      "bodyMarkdown": "Orthogone is Art Blocks project 88 on the contract at `0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270`, on Ethereum mainnet, credited to Pandelune by both the index and the live project page. The indexed record returns 777 invocations against a maximum of 777, a declared dependency of `p5@1.0.0`, a declared aspect ratio of 4 and a curation status of factory [^S02]. The AB5D atlas position 88 coincides with the project ID, which is a coincidence rather than a rule.\n\nTwo things make this project unusual within the batch before any code is read. It is the largest edition at 777, and it is the only panoramic one: an aspect ratio of 4 means a frame four times wider than it is tall, and the stored previews are 2400 by 600 pixels [^S01][^S07]. Everything else here is square or close to it.\n\nThe artist describes coloured rectangles followed by white and occasional black echoes, inviting readings of buildings, movement and rhythm. The program supports a horizontal succession, but its overlaps keep the sequence from becoming a simple row of isolated objects. [^S01][^S02]\n\nThe edition's six traits are luck, black, density, colour scheme, colour variation and colored rectangles [^S01][^S04]. Two of those are the same number twice: the black trait counts black rectangles, taking the values 0, 1 and 2 across 679, 85 and 8 tokens, and the luck trait reports the identical distribution under the labels normal, somewhat lucky and lucky [^S04]. These submitted trait counts cover 772 populated records; five records have missing traits. They are indexed classifications, not an independent count of visible black rectangles.\n\nTwo corrections to platform metadata are established below. The index marks the work as non-static, which alone does not establish animation. The inspected program normally draws once. And the declared aspect ratio of 4 describes the stored preview rather than the artwork, because the live renderer builds its canvas from the browser window and will produce a portrait composition in a portrait window.\n\nThe release date on the page is the usual timezone artefact: read from a machine in UTC+10 it says \"Released on 15 June 2021\" [^S01], while the underlying second-mint timestamp is 2021-06-14T20:24:03Z, which is 14 June in UTC [^S02]."
    },
    {
      "id": "conception",
      "heading": "Conception and development",
      "bodyMarkdown": "A separate development history has not been verified. The mint-page statement is the only artist text located [^S01], the indexed record carries a null value for `artist_interview` [^S02], and the website recorded on the project is a Twitter profile rather than a site [^S01], which does not establish that no other artist-controlled material exists. No interview or written account was found.\n\nWhat the statement offers instead of process is a reading, and it is worth taking seriously because it is the artist's own and because the code supports it. \"You may guess buildings or squared ricochets\" names two quite different ways of seeing the same image [^S01]. Buildings is the vertical reading: rectangles of varying height standing on a common line, a skyline. Ricochets is the horizontal reading: a single object bouncing along, leaving a trace of where it was. The program supports both because it draws exactly one pass from left to right, placing each rectangle at a vertical offset from the centre line and then moving on. Successive shapes can overlap positions already occupied.\n\nThe third phrase, \"sense the underlying rhythm\", is the one that maps most directly onto a parameter. The horizontal gap between one coloured rectangle and the next is drawn fresh each time from a range whose bounds are themselves drawn once per token. A token with a narrow range has an even, metronomic spacing; a token with a wide one clusters and spreads. The index offers density labels, but the trait-extraction procedure has not been inspected. The visual effect of the gap parameter can be described without assuming that it is identical to that classification. [^S02][^S04]\n\nNo dated development repository or statement of influences was located in this review. The work's obvious kinship with mid-century geometric abstraction is left unremarked here because the artist does not claim it and this dossier does not attribute readings to artists who have not offered them."
    },
    {
      "id": "construction",
      "heading": "How the work was constructed",
      "bodyMarkdown": "The artist script was retrieved from the indexed project record by an HTTP POST to the public GraphQL endpoint, filtered on the exact slug and corroborated against the contract address and project ID returned in the same response [^S02]. It is 6,118 bytes and hashes to SHA-256 `5e4f9ec537bff6927062f07acb070175f26b34b046ce97393d1923a5d5ec0de2`. The record reports a script count of 1 and the single `scripts` row reproduces the `script` field exactly. This was an index retrieval, not a direct read of contract storage, and no block reference was pinned. The whole program was read; what follows describes it without reproducing it.\n\nThe first thing to say about this script is that most of it is not the artwork. It is a webpack bundle, and roughly four fifths of its bytes are a third-party colour library compiled into the on-chain code. The artist's own drawing program, at the end of the bundle, is about a thousand bytes.\n\nThe bundled colour routine shares distinctive preset arrays, a fifteen-degree colour-wheel table and mutable-colour methods with the upstream color-scheme-js source. The inspected upstream implementation also includes functions absent from this bundle, so the comparison supports a relationship without establishing the exact version or modification history. The project’s external asset count does not inventory code already incorporated into its script. A zero count therefore does not contradict the presence of a bundled routine. [^S02][^S11]\n\nThe artist's own program is compact. A single xorshift generator is seeded from the first sixteen characters of the token hash, including its 0x prefix, with its decimal output taken modulo one thousand and divided by one thousand, which is the same quantised pattern seen in three other projects in this batch.\n\nSetup creates a canvas at the browser window’s width and height, fills it with a near-white ground and disables the animation loop. Palette selection chooses one of four scheme names, one of three variation presets and a starting hue. A separate distance setting is passed through an integer helper: flooring a value between 0.25 and 0.5 makes it zero. It therefore does not vary across the intended fractional interval. In the bundled colour routine, this collapses some nominally separate hue positions onto one another. [^S02]\n\nThe returned palette has eight entries for contrast, twelve for triade and analogic, and sixteen for tetrade. Entry count is not a count of distinct colours: repeated hues and variant settings can produce duplicate values. The program chooses among the returned entries when filling each main rectangle. Calling every result a sixteen-colour palette would misdescribe both the scheme branches and their effective variety. [^S02]\n\nThe main drawing loop advances a horizontal cursor through a design space scaled from a width of 1200. Its additive random helper returns a starting value plus a random fraction of a span. Thus the main width is at least 20 and below 120 design units, while its height is at least 40 and below 140 units before width-based scaling. This differs from a helper that samples between two endpoints. A discrete vertical choice places the rectangle above, across or below the horizontal centre. The cursor then advances by its width and a token-dependent random gap. [^S02]\n\nThe program next selects black or white once, before entering the echo loop. The integer condition selects black for one of a hundred possible integer buckets; the same selected fill applies to all echoes in that group. Some groups draw no echoes. Moreover, the loop redraws its random stopping comparison on each iteration rather than choosing a fixed echo count in advance. The index’s observed black counts cannot therefore be interpreted as independent one-percent trials for every visible echo. [^S02]\n\nTwo details give the work its particular crispness. Every coordinate and dimension passes through a snapping function that rounds it to a multiple of a small unit derived from the canvas width, so edges align with each other rather than falling wherever the arithmetic lands. And the echoes are drawn after the cursor has already advanced, which is why they overlap the following rectangle rather than the one they belong to, producing the interlocking that makes the row read as a continuous structure rather than a series of separate objects.\n\nThe black rectangles result from this procedural selection rather than from a separately allocated count of black shapes. Their visible force still depends on placement and overlap. A one-percent branch in a seeded generator describes the code’s threshold; it is not an audited population frequency or a guarantee about how often black will be visible in the minted edition. [^S02]"
    },
    {
      "id": "mint",
      "heading": "The mint",
      "bodyMarkdown": "The indexed record separates four events [^S02]. The first token was minted at 2021-06-12T06:05:56Z. The project was activated at 2021-06-14T16:10:55Z. The second token was minted at 2021-06-14T20:24:03Z, and `start_datetime` carries that same value. The project completed at 2021-08-01T15:02:13Z. In UTC those are 12 June, 14 June, 14 June and 1 August 2021.\n\nThe two and a half day gap between the first mint and activation is consistent with a proof minted ahead of the sale, and the token record for invocation 0 confirms the timestamp. Its current owner is the artist address recorded on the project [^S03], which is a current-address observation, not a reconstruction of uninterrupted custody.\n\nThe interval from the second indexed mint to completion is 47 days, 18 hours, 38 minutes and 10 seconds, covering invocations 1 through 776. It is not presented as a public sale duration, because the index does not establish when minting opened and `start_datetime` duplicates the second mint rather than marking an opening.\n\nThe sampled records show how slow the middle of the sale was. Invocation 1 was minted on 14 June, invocation 10 on 24 June, and invocation 20 on 27 June [^S03]. Twenty invocations took a fortnight. The AB5D holding, invocation 476, was minted at 2021-08-01T06:09:13Z [^S03], about nine hours before the project completed, so it came from the final push rather than the opening.\n\nThe record reports a price of 110000000000000000 wei, that is 0.11 ETH [^S02], recorded as the currently configured value rather than as the price paid at mint; no primary announcement of an original price was located."
    },
    {
      "id": "rights",
      "heading": "Copyright and licensing",
      "bodyMarkdown": "The indexed record reports a licence label of \"NFT License 2.0\" for the artwork, with a null link to the licence [^S02]. The live project page publishes no licence statement at all; its expanded details panel lists edition size, artist website, library, aspect ratio, blockchain, token standard, contract type and attribute names, and nothing about copyright [^S01].\n\nThat label is worth comparing directly with another project in this same batch. Panelscape, on the same contract, carries the bare string \"NFT License\" where this one carries \"NFT License 2.0\" [^S08]. A census of the field across all 359 projects on this contract returns 34 distinct strings, and within the NFT License family alone it holds \"NFT License\", \" NFT License\" with a leading space, \"NFT License 2.0\" and \"NFT 2.0\" [^S08]. Only 87 of the 359 projects carry any licence link. Two artists typing into an unvalidated text box will produce two different strings whether or not they mean different things, and nothing in the field distinguishes a deliberate version choice from a typing difference.\n\nArtwork rights are therefore recorded as a reported \"NFT License 2.0\" label with a null terms URL, status reported rather than verified, category custom, and the missing terms raised as an editorial exception.\n\nThe colour routine has a plausible upstream source in color-scheme-js. Its repository publishes an MIT licence with a 2017 Brian Hann copyright notice and a requirement to retain the notice and permission text in copies or substantial portions. This establishes the inspected upstream terms, not the exact provenance or licensing history of every byte bundled into Orthogone. The minified artist script alone does not settle where attribution was supplied. No compliance conclusion is drawn here. [^S11][^S12]\n\nCode rights for the artist's own portion are unknown and kept separate. No licence statement accompanies the script. The page describes the contract type as \"Fully on-chain\" [^S01], which makes the whole bundle readable and grants nothing. Ownership of a token is not an artwork licence. No conflicting rights statement was found, so no conflict is recorded; what is recorded is an absence.\n\nThe declared rendering dependency, p5.js 1.0.0, includes an LGPL 2.1 licence in its versioned repository. That dependency licence does not establish a separate reuse grant for the artist’s drawing program or its resulting images. [^S13]"
    },
    {
      "id": "examples",
      "heading": "Close reading of examples",
      "bodyMarkdown": "The close readings compare the platform previews of #0, #3, #20 and #476. The coordinator inspected all four in a browser fitted to the viewport; the underlying images are 2400 by 600 pixels. Canonical token records identify the samples. Submitted runtime measurements are discussed separately and have not yet been independently reproduced. [^S03][^S07][^S09]\n\nThe panoramic format does something specific to how these images read. At four to one, the eye travels rather than settles, and because the program draws a single left-to-right pass the image has a direction: it starts, it proceeds, it stops. The near-white ground occupies most of the frame in the sparser tokens, so the rectangles read as events in time rather than as a composition filling a rectangle.\n\nIn #0, cream and yellow rectangles alternate with lavender, olive and violet. Several generous gaps divide the row into separate events. Small white outlined shapes project above some coloured rectangles, while a white and yellow pairing near the middle reads almost as two compartments within one tall container. The changing heights prevent the row from acquiring a stable baseline. The eye can follow a horizontal sequence, but each step also asks it to move up or down. That interruption is part of the rhythm, not just an effect of the gaps. [^S07]\n\nThe violet group toward the right gives #0 a stronger ending without closing the sequence into a single object. Its comparatively saturated blocks draw attention across the paler yellow and cream areas. Small white projections remain visible above larger coloured faces; their outlines make them distinct even where their interiors almost merge with the ground. This is where the echo analogy is most useful: the repeated rectangular shape retains its identity while changing size, colour and degree of concealment. [^S07]\n\nA fresh query across all three wallets linked to the AB5D profile confirms #476 as the collection’s holding. Its preview develops a green family from near-white through lime to muted leaf green. A high cluster at the left gives way to a low, broad block and then a brighter upright form near the centre. Further right, the row repeatedly changes height. Narrow white stacks appear between much larger coloured rectangles, so the sequence alternates broad pauses with busy joints. The architectural reading offered by the artist is plausible here, but the lack of a common ground line keeps these forms from settling into a conventional skyline. [^S03][^S10][^S07]\n\nThe restricted hue family in #476 makes the outlines particularly important. A pale green rectangle can appear almost continuous with the white field until its border gives it weight. The brighter central green becomes a local anchor, while darker blocks toward either end keep the whole sequence distributed. Compared with #0, more shapes touch or overlap, and the eye spends longer disentangling neighbouring forms. These observations concern the displayed preview, not a measured ranking of density across all 777 works. [^S07]\n\nIn #3, ochre, tan, teal and pale grey rectangles overlap into a nearly continuous row. A broad black region left of centre is partly concealed by teal, making darkness read as a recess behind the coloured surface. White outlined fragments protrude at the top and bottom, interrupting the possibility of one smooth silhouette. The index labels the token lucky, but the visible effect is more specific than that classification: black makes a local change in depth within an already crowded arrangement. [^S04][^S07]\n\nIn #20, muted ochre, grey-brown and pale stone form an uneven chain. A tall dark block near the left rises above a lower, thinner neighbour; the broad pale rectangles through the middle create slower intervals. White echoes extend both upward and downward, making the surrounding blank field visible inside the construction. Beside #3, this quieter palette makes changes of proportion easier to follow, without removing the ambiguity between linked objects and overlapping flat marks. [^S07]\n\nThe original renderer for #476 was independently opened in a 1280 by 720 browser view. Two separated observations showed no visible change in the arrangement or colour. The inspected script calls noLoop during setup, supporting the interpretation of a normally static output. A false display_static field in the index is insufficient by itself to establish animation. The coordinator did not reproduce the submitted numerical canvas-signature test or independently monitor sound. No audio mechanism or input handlers occur in the inspected artist program. [^S02][^S05]\n\nIn that live window, the green row runs through a substantially larger pale field than in the panoramic preview. The relationships among the rectangles remain recognizable, but their surrounding space changes the balance: the row becomes an isolated band rather than almost filling the frame’s height. This follows the code’s use of window dimensions for the canvas and width-based scaling for the forms. Preserving the declared wide presentation is therefore useful when showing the preview, while the original renderer remains available for comparison. [^S02][^S05][^S07]\n\nThe edition sweep also found five tokens carrying completely empty trait objects: 88000415, 88000446, 88000669, 88000670 and 88000671 [^S04]. This is a submitted metadata observation. The coordinator has not opened those five originals, so no claim about their rendering success follows from the presence of their hashes."
    },
    {
      "id": "significance",
      "heading": "Significance and limitations",
      "bodyMarkdown": "Orthogone is the simplest drawing program in this batch and one of the most confident. A single left-to-right pass, one rectangle at a time, each followed by a few white echoes, on a near-white ground, snapped to a grid so that edges meet. There is no field, no simulation, no recursion and no second pass. Variation comes from proportion, spacing, overlap and colour. Colour is generated through the artist’s selection of parameters passed to a bundled colour routine that takes a hue, a scheme name and a variation preset and returns a scheme-dependent palette.\n\nUsing a colour routine does not remove authorship from the choices that surround it. Pandelune selects the available schemes and presets, constrains the parameters and determines how colours meet rectangles and blank ground. Here the distance parameter’s flooring is especially consequential: the deployed rules produce a narrower range of hue relationships than the nominal fractional range suggests. The picture should be understood through those actual relationships, rather than through an assumption that more palette entries imply more independent colours. [^S02]\n\nThe black-fill branch is a designed part of the system, even though it does not allocate a fixed count to each token. Its effect depends on the number of groups and on subsequent drawing. The submitted index counts describe the resulting trait records, with five records missing traits; they should not be presented as a guarantee about the probability of a future output or a moral distinction between this project and other editions. [^S02][^S04]\n\nTwo findings matter for the archive. The first is the platform metadata: the index sets `display_static` to false, but the script disables the loop during setup [^S02][^S05]. The rendering procedure is stronger evidence of behaviour than this flag alone.\n\nThe second is the one that should change how the dossier presents the work. The declared aspect ratio of 4 is a property of the stored preview, not of the artwork. The live renderer sizes its canvas from the browser window, so the same token in a portrait window is a thin band of rectangles adrift in a very large empty field [^S05]. For a piece whose entire identity is a horizontal succession, that is not a cropping difference; it changes what the image is about. Any embed of this work needs to be given a wide container deliberately, or it will misrepresent it.\n\nThe limitations are the familiar ones. The inspected artist statement is brief and a separate development interview has not been verified, and the website of record is a social profile [^S01][^S02]. The original mint price is not established. The rights position is a documented gap, while the likely upstream colour routine has now been located under MIT terms, without establishing its exact bundled version. And five tokens in the edition have no traits at all in the index, which filtering systems need to handle explicitly [^S04].\n\nUnresolved research questions:\n\n- Locate further artist development material.\n- Establish historical public pricing and mint allocations.\n- Identify the operative artwork licence and exact bundled colour-library version.\n- Reproduce the submitted trait census and inspect the five records with missing traits."
    }
  ],
  "examples": [
    {
      "id": "E01",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "88000000",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000000",
      "sourceIds": [
        "S03",
        "S07",
        "S09"
      ],
      "selectionNote": "Invocation 0, the artist's own proof, minted two and a half days before activation and still held by the artist address. Selected for sustained analysis as the sparsest output in the sample, where the echo mechanism is most legible.",
      "observationNote": "Independently inspected browser-fitted preview, not native-resolution display. Cream and yellow rectangles alternate with lavender, olive and violet in separated groups. Small white outlined shapes project above several coloured rectangles. Broad gaps make each group legible independently."
    },
    {
      "id": "E02",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "88000476",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000476",
      "sourceIds": [
        "S03",
        "S05",
        "S07",
        "S10"
      ],
      "selectionNote": "The AB5D holding, verified against the current linked wallet set. Selected for the sustained analysis, the static verification and the canvas shape observation, and recommended as the header work.",
      "observationNote": "Independently inspected browser-fitted preview, not native-resolution display. A green family ranges from almost white to bright lime and muted leaf green. Groups alternately sit high and low. White outlined echoes form narrow vertical stacks; larger green blocks interrupt them."
    },
    {
      "id": "E03",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "88000003",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000003",
      "sourceIds": [
        "S04",
        "S07"
      ],
      "selectionNote": "One of only eight lucky tokens in the edition, meaning it drew two black rectangles. Substituted for a suggested candidate because none of the four suggested tokens contains a black rectangle, and the black echo is the project's single rarity.",
      "observationNote": "Independently inspected browser-fitted preview, not native-resolution display. Ochre, tan, teal and pale grey rectangles overlap in a nearly continuous row. A broad black area left of centre is partly covered by teal. Smaller white outlined fragments protrude above and below the coloured row."
    },
    {
      "id": "E04",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "88000020",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000020",
      "sourceIds": [
        "S03",
        "S07",
        "S09"
      ],
      "selectionNote": "Invocation 20, from the suggested sample, retained as the medium-density case between the sparse proof and the packed lucky token.",
      "observationNote": "Independently inspected browser-fitted preview, not native-resolution display. Muted ochre, grey-brown and pale stone rectangles form an uneven chain. White outlined echoes protrude upward and downward; broad pale rectangles interrupt narrower upright shapes."
    }
  ],
  "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",
      "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",
    "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",
          "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",
        "review": "OpenAI Codex: independent complete script review, four previews and original renderer observed, current ownership verified, upstream source and licence comparison. Submitted statistics distinguished from independent findings."
      }
    }
  },
  "codeInspection": {
    "url": "https://artblocks-mainnet.hasura.app/v1/graphql",
    "locator": "POST projects_metadata where slug _eq orthogone-by-pandelune, selecting script and scripts{index script}; identity corroborated by contract_address 0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270 and project_id 88",
    "sha256": "5e4f9ec537bff6927062f07acb070175f26b34b046ce97393d1923a5d5ec0de2",
    "retrievedAt": "2026-09-18T00:38:00+00:00",
    "method": "Index retrieval over HTTPS, not a direct read of contract storage. SHA-256 computed over the UTF-8 bytes of the returned script field. The single indexed script fragment reproduces the script field exactly.",
    "executed": true,
    "chainBlock": null
  },
  "editorialExceptions": [
    {
      "id": "undeclared-bundled-library",
      "status": "pending",
      "reviewer": "publication coordinator",
      "reason": "Roughly four fifths of the on-chain script is a bundled third-party colour library, carrying no attribution, licence header or package name, while the platform metadata reports zero external dependencies and names only p5. The specific package identification is an inference from structure. No allegation is made. The coordinator should decide how much of this the dossier states, and may wish to confirm the library and its licence independently before publication."
    },
    {
      "id": "index-static-flag-wrong",
      "status": "pending",
      "reviewer": "publication coordinator",
      "reason": "The index sets display_static to false, asserting that the work animates. The script disables the animation loop during setup and the renderer produced three identical canvas states over eight seconds. The project page is correct. The same error appears on Stroming in this batch."
    },
    {
      "id": "aspect-ratio-is-of-the-preview",
      "status": "pending",
      "reviewer": "publication coordinator",
      "reason": "The declared aspect ratio of 4 describes the stored preview, not the artwork. The live renderer sizes its canvas from the browser window and produces a portrait composition in a portrait window. Any embed must be given a wide container deliberately or it will misrepresent the work."
    },
    {
      "id": "rights-terms-missing",
      "status": "pending",
      "reviewer": "publication coordinator",
      "reason": "An 'NFT License 2.0' label is reported with link_to_license null and no terms document located. The version is ambiguous because the same contract carries the bare 'NFT License' on another project in this batch."
    },
    {
      "id": "code-rights-unknown",
      "status": "pending",
      "reviewer": "publication coordinator",
      "reason": "No licence statement was located for the artist's own portion of the script."
    },
    {
      "id": "artist-record-gap",
      "status": "pending",
      "reviewer": "publication coordinator",
      "reason": "One sentence of artist statement is the entire record of intent. No interview exists in the index, none was located, and the website of record is a social profile."
    },
    {
      "id": "original-price-unverified",
      "status": "pending",
      "reviewer": "publication coordinator",
      "reason": "The 0.11 ETH figure is the currently configured project price, not a verified original mint price."
    },
    {
      "id": "platform-trait-gap",
      "status": "pending",
      "reviewer": "publication coordinator",
      "reason": "Five tokens have empty trait objects in the index: 88000415, 88000446, 88000669, 88000670 and 88000671. Any feature-based filtering of this edition will silently drop them. This is the largest such count in the batch."
    }
  ],
  "presentation": {
    "editionSize": 777,
    "maximumEdition": 777,
    "mintDate": "2021-06-12T06:05:56+00:00",
    "mintDateMeaning": "First indexed mint",
    "artwork": {
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "token_id": "88000476",
      "invocation": 476,
      "owner_address": "0xdd19308a9731cdecb67e0d80ca6823394208c045",
      "canonicalUrl": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000476",
      "preview_asset_url": "https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000476.png",
      "live_view_url": "https://generator.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000476",
      "mode": "image",
      "copyrightStatus": "NFT License 2.0 (reported label; specific terms unverified)",
      "copyrightUrl": null,
      "aspectRatio": 4
    }
  },
  "observationImages": [
    {
      "id": "E01",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "88000000",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000000",
      "sourceIds": [
        "S03",
        "S07",
        "S09"
      ],
      "selectionNote": "Invocation 0, the artist's own proof, minted two and a half days before activation and still held by the artist address. Selected for sustained analysis as the sparsest output in the sample, where the echo mechanism is most legible.",
      "observationNote": "Independently inspected browser-fitted preview, not native-resolution display. Cream and yellow rectangles alternate with lavender, olive and violet in separated groups. Small white outlined shapes project above several coloured rectangles. Broad gaps make each group legible independently.",
      "previewUrl": "https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000000.png",
      "liveUrl": "https://generator.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000000"
    },
    {
      "id": "E02",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "88000476",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000476",
      "sourceIds": [
        "S03",
        "S05",
        "S07",
        "S10"
      ],
      "selectionNote": "The AB5D holding, verified against the current linked wallet set. Selected for the sustained analysis, the static verification and the canvas shape observation, and recommended as the header work.",
      "observationNote": "Independently inspected browser-fitted preview, not native-resolution display. A green family ranges from almost white to bright lime and muted leaf green. Groups alternately sit high and low. White outlined echoes form narrow vertical stacks; larger green blocks interrupt them.",
      "previewUrl": "https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000476.png",
      "liveUrl": "https://generator.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000476"
    },
    {
      "id": "E03",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "88000003",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000003",
      "sourceIds": [
        "S04",
        "S07"
      ],
      "selectionNote": "One of only eight lucky tokens in the edition, meaning it drew two black rectangles. Substituted for a suggested candidate because none of the four suggested tokens contains a black rectangle, and the black echo is the project's single rarity.",
      "observationNote": "Independently inspected browser-fitted preview, not native-resolution display. Ochre, tan, teal and pale grey rectangles overlap in a nearly continuous row. A broad black area left of centre is partly covered by teal. Smaller white outlined fragments protrude above and below the coloured row.",
      "previewUrl": "https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000003.png",
      "liveUrl": "https://generator.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000003"
    },
    {
      "id": "E04",
      "chainId": 1,
      "contract": "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270",
      "tokenId": "88000020",
      "url": "https://www.artblocks.io/token/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000020",
      "sourceIds": [
        "S03",
        "S07",
        "S09"
      ],
      "selectionNote": "Invocation 20, from the suggested sample, retained as the medium-density case between the sparse proof and the packed lucky token.",
      "observationNote": "Independently inspected browser-fitted preview, not native-resolution display. Muted ochre, grey-brown and pale stone rectangles form an uneven chain. White outlined echoes protrude upward and downward; broad pale rectangles interrupt narrower upright shapes.",
      "previewUrl": "https://media-proxy.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000020.png",
      "liveUrl": "https://generator.artblocks.io/1/0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270/88000020"
    }
  ],
  "publication": {
    "date": "2026-09-18",
    "url": "https://ab5d.xyz/series/orthogone-by-pandelune/",
    "authorization": "Phil requested website publication on 2026-09-17.",
    "reviewSnapshot": "/docs/series-essays/production/orthogone-by-pandelune/record.json",
    "unresolvedResearchQuestionsRetained": true
  }
}
