{
  "assertions": [
    "motion(idle)",
    "uses(webgl)"
  ],
  "attempts": 3,
  "attribution": "\u201crain on a window where each drop holds a tiny upside-down city Revise\u2026\u201d \u2014 sketchgen entry 1711, prompted by profcarroll, written by qwen3-coder:30b-a3b-q4_K_M under the treatment rules file. https://profcarroll.github.io/sketchgen-gallery/e/1711/ Licensed CC BY 4.0.",
  "brief": "The canvas presents a view through a rain-streaked windowpane. Streams of falling water streak across the glass, accumulating into defined, circular puddles that distort the background. Through this continuously shifting liquid curtain, the distant view reveals tiny, inverted cityscapes. The water is constantly moving\u2014it runs, collects, and drops\u2014and this rhythmic action repeatedly changes the clarity, refraction, and detail of the submerged, miniature urban environment.",
  "completion_tokens": 4704,
  "created_utc": "2026-09-26T22:05:00Z",
  "entry_id": 1711,
  "executor": "qwen3-coder:30b-a3b-q4_K_M",
  "executor_prompt_version": "executor-v3",
  "gate": [
    {
      "assertions": {
        "motion(idle)": true,
        "uses(webgl)": false
      },
      "attempt": 1,
      "checks": {
        "audio_context_running": null,
        "console_clean": true,
        "frame_advancing": true,
        "frame_budget": true,
        "is_looping": true,
        "revised": true,
        "sound_lib_ok": null
      },
      "completion_tokens": 1509,
      "evidence": "gate exit 1: assertions failed: uses(webgl)\n\nAssertions that failed:\n- uses(webgl): renderer context is 2D\n\nRuntime state the gate read:\n- frame_advancing compares frameCount at frame 84 of the 120-frame idle window (86) with the end of it (122); at load it was 0\n",
      "exit": 1,
      "ghost": {
        "events": 40,
        "ms": 4000,
        "played": 40,
        "script": "wander",
        "source": "default"
      },
      "given": {
        "kind": "parent",
        "lines": 106,
        "sha256": "c87b4bac67334506a0fbbc26cd12b9cca36af5f5ecba4066ff3734a44d747e45",
        "shown": true
      },
      "model": "qwen3-coder:30b-a3b-q4_K_M",
      "ms_per_frame": 23.3,
      "num_ctx": 16384,
      "preload_s": 0.026,
      "prompt_tokens": 3379,
      "resources_loaded": [],
      "rules_file": "treatment",
      "source": "attempt-1",
      "total_s": 14.271,
      "wall_s": 122.176
    },
    {
      "assertions": {
        "motion(idle)": true,
        "uses(webgl)": false
      },
      "attempt": 2,
      "checks": {
        "audio_context_running": null,
        "console_clean": true,
        "frame_advancing": true,
        "frame_budget": true,
        "is_looping": true,
        "revised": true,
        "sound_lib_ok": null
      },
      "completion_tokens": 1672,
      "evidence": "gate exit 1: assertions failed: uses(webgl)\n\nAssertions that failed:\n- uses(webgl): renderer context is 2D\n\nRuntime state the gate read:\n- frame_advancing compares frameCount at frame 84 of the 120-frame idle window (86) with the end of it (122); at load it was 0\n",
      "exit": 1,
      "ghost": {
        "events": 40,
        "ms": 4000,
        "played": 40,
        "script": "wander",
        "source": "default"
      },
      "given": {
        "kind": "previous",
        "lines": 172,
        "sha256": "ed308a0ec03dc18175a4337105e743b63c87b54699acd7b9e6af0602af9df7c0",
        "shown": true
      },
      "model": "qwen3-coder:30b-a3b-q4_K_M",
      "ms_per_frame": 25.1,
      "num_ctx": 16384,
      "preload_s": 0.026,
      "prompt_tokens": 3905,
      "resources_loaded": [],
      "rules_file": "treatment",
      "source": "attempt-2",
      "total_s": 14.902,
      "wall_s": 148.749
    },
    {
      "assertions": {
        "motion(idle)": true,
        "uses(webgl)": false
      },
      "attempt": 3,
      "checks": {
        "audio_context_running": null,
        "console_clean": true,
        "frame_advancing": true,
        "frame_budget": true,
        "is_looping": true,
        "revised": true,
        "sound_lib_ok": null
      },
      "completion_tokens": 1523,
      "evidence": "gate exit 1: assertions failed: uses(webgl)\n\nAssertions that failed:\n- uses(webgl): renderer context is 2D\n\nRuntime state the gate read:\n- frame_advancing compares frameCount at frame 84 of the 120-frame idle window (86) with the end of it (122); at load it was 0\n",
      "exit": 1,
      "ghost": {
        "events": 40,
        "ms": 4000,
        "played": 40,
        "script": "wander",
        "source": "default"
      },
      "given": {
        "kind": "previous",
        "lines": 190,
        "sha256": "36df76c0325303aa4754b168cd669b0162477676b99aeab243e957f97975e93b",
        "shown": true
      },
      "model": "qwen3-coder:30b-a3b-q4_K_M",
      "ms_per_frame": 23.3,
      "num_ctx": 16384,
      "preload_s": 0.027,
      "prompt_tokens": 4054,
      "resources_loaded": [],
      "rules_file": "treatment",
      "source": "attempt-3",
      "total_s": 14.229,
      "wall_s": 142.862
    }
  ],
  "ghost": {
    "by": "default",
    "events": 40,
    "script": "wander"
  },
  "job_id": 1724,
  "last_error": null,
  "licence": "CC BY 4.0",
  "lineage": {
    "children": [
      1774
    ],
    "critique": "the same view through the rain-streaked windowpane of tiny, upside-down cityscapes, and this time the raindrops collect into larger, more defined puddles before dropping.",
    "critique_by": "gemma4:e4b",
    "generation": 2,
    "inherits_source": false,
    "parent_entry_id": 1607,
    "root_entry_id": 1471
  },
  "loads": [],
  "note": null,
  "off_node": [],
  "planner": "gemma4:e4b",
  "planner_prompt_version": "planner-v2",
  "process": null,
  "prompt": "rain on a window where each drop holds a tiny upside-down city\n\nRevise: the same atmospheric movement of falling raindrops streaking across the surface of a window, and this time the cityscape visible within them subtly pulses with a gentle, slow rhythm.\n\nRevise: the same view through the rain-streaked windowpane of tiny, upside-down cityscapes, and this time the raindrops collect into larger, more defined puddles before dropping.",
  "prompt_tokens": 11338,
  "publish_commit": "3bac3f37f898f70ef60dd5cda6b05535e2e26617",
  "published_utc": "2026-09-27T20:25:22Z",
  "rules_file": "treatment",
  "seed": 1,
  "shape": "VM.Standard.A1.Flex 16/96",
  "source": {
    "attempts": [
      "attempt-1",
      "attempt-2",
      "attempt-3"
    ],
    "entry": "https://profcarroll.github.io/sketchgen-gallery/e/1711/",
    "index_html": "sketch/index.html",
    "repository": "https://github.com/profcarroll/sketchgen-gallery/tree/main/e/1711",
    "sketch_js": "sketch/sketch.js"
  },
  "state": "published",
  "statement": "This sketch simulates a rain-streaked windowpane through which a miniature cityscape is faintly visible. Falling raindrops accumulate into circular puddles that distort the background view, creating a constantly shifting refraction effect. The distant urban environment appears inverted and subtle within each droplet and puddle, revealing itself only through the liquid curtain's movement. The simulation uses simple geometric shapes to model raindrops and puddles, with the cityscape rendered once at setup and reused in each visual element to maintain performance while creating an illusion of depth and motion.",
  "submitted_by": "profcarroll",
  "wall_s": 413.787
}
