{
  "assertions": [
    "motion(idle)",
    "uses(webgl)"
  ],
  "attempts": 3,
  "attribution": "\u201ctea steam curling into the shapes of forgotten words\u201d \u2014 sketchgen entry 1467, prompted by profcarroll, written by qwen3-coder:30b-a3b-q4_K_M under the treatment rules file. https://profcarroll.github.io/sketchgen-gallery/e/1467/ Licensed CC BY 4.0.",
  "brief": "The canvas displays soft, luminous tendrils of steam rising and drifting across the background. These ephemeral clouds slowly condense and coalesce, momentarily forming the vague outlines and fragmented letterforms of forgotten words. The movement is fluid and gentle, with the steam appearing to curl and twist like smoke. The shapes are not static, but constantly reforming, drifting, and dissipating back into ambient steam as new words briefly materialize only to dissolve once more.",
  "completion_tokens": 3587,
  "created_utc": "2026-09-23T15:25:59Z",
  "entry_id": 1467,
  "executor": "qwen3-coder:30b-a3b-q4_K_M",
  "executor_prompt_version": "executor-v3",
  "gate": [
    {
      "assertions": {},
      "attempt": 1,
      "checks": {
        "audio_context_running": null,
        "console_clean": true,
        "frame_advancing": null,
        "frame_budget": false,
        "is_looping": null,
        "sound_lib_ok": null
      },
      "completion_tokens": 1183,
      "evidence": "Names this sketch shadows (checked before the gate ran):\npreflight: `sphere()` is called inside a loop inside `draw()`, so this sketch builds one lit mesh per item per frame; draw the items as one `beginShape(POINTS)` or build the mesh once in `setup()` with `buildGeometry()` (sketch.js line 64)\n\ngate exit 1: checks failed: frame_budget\n\nFixed checks that failed:\n- frame_budget = false\n    frame_budget: 420 ms per frame over the first 42 frames of the 120-frame idle window, budget 100 ms \u2014 batch points and lines into one shape, no sphere() per particle, no all-pairs loop\n    frame_budget: the run stopped at 42 of the 120 idle frames and did not finish the probes or the assertions\n",
      "exit": 1,
      "ghost": null,
      "given": null,
      "model": "qwen3-coder:30b-a3b-q4_K_M",
      "ms_per_frame": 420.0,
      "num_ctx": 16384,
      "preload_s": 0.047,
      "prompt_tokens": 2397,
      "resources_loaded": [],
      "rules_file": "treatment",
      "source": "attempt-1",
      "total_s": 26.739,
      "wall_s": 77.93
    },
    {
      "assertions": {
        "motion(idle)": true,
        "uses(webgl)": false
      },
      "attempt": 2,
      "checks": {
        "audio_context_running": null,
        "console_clean": true,
        "frame_advancing": null,
        "frame_budget": true,
        "is_looping": false,
        "sound_lib_ok": null
      },
      "completion_tokens": 1320,
      "evidence": "gate exit 1: assertions failed: uses(webgl)\n\nAssertions that failed:\n- uses(webgl): renderer context is 2D\n",
      "exit": 1,
      "ghost": {
        "events": 40,
        "ms": 4000,
        "played": 40,
        "script": "wander",
        "source": "default"
      },
      "given": {
        "kind": "previous",
        "lines": 122,
        "sha256": "082297ceae1ec97e33ca4f50aeba808aaf0948e16f3f476de494573e887f0fb6",
        "shown": true
      },
      "model": "qwen3-coder:30b-a3b-q4_K_M",
      "ms_per_frame": 37.7,
      "num_ctx": 16384,
      "preload_s": 0.046,
      "prompt_tokens": 3655,
      "resources_loaded": [],
      "rules_file": "treatment",
      "source": "attempt-2",
      "total_s": 22.042,
      "wall_s": 117.675
    },
    {
      "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,
        "sound_lib_ok": null
      },
      "completion_tokens": 1084,
      "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": 137,
        "sha256": "60fb1109b76c9ad78fd20b4b9836846421cf72cfc0457b86dc8ad3cae2c770b2",
        "shown": true
      },
      "model": "qwen3-coder:30b-a3b-q4_K_M",
      "ms_per_frame": 8.6,
      "num_ctx": 16384,
      "preload_s": 0.027,
      "prompt_tokens": 3643,
      "resources_loaded": [],
      "rules_file": "treatment",
      "source": "attempt-3",
      "total_s": 5.614,
      "wall_s": 102.08
    }
  ],
  "ghost": {
    "by": "default",
    "events": 40,
    "script": "wander"
  },
  "job_id": 1478,
  "last_error": null,
  "licence": "CC BY 4.0",
  "lineage": {
    "children": [
      1603
    ],
    "critique": null,
    "critique_by": null,
    "generation": 1,
    "inherits_source": false,
    "parent_entry_id": null,
    "root_entry_id": 1467
  },
  "loads": [],
  "note": null,
  "off_node": [],
  "planner": "gemma4:e4b",
  "planner_prompt_version": "planner-v2",
  "process": null,
  "prompt": "tea steam curling into the shapes of forgotten words",
  "prompt_tokens": 9695,
  "publish_commit": "fe51ebdba3e99c933ae28ea6312372facfbfb8ef",
  "published_utc": "2026-09-24T01:15:28Z",
  "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/1467/",
    "index_html": "sketch/index.html",
    "repository": "https://github.com/profcarroll/sketchgen-gallery/tree/main/e/1467",
    "sketch_js": "sketch/sketch.js"
  },
  "state": "published",
  "statement": "This sketch creates an atmospheric visualization of rising steam that subtly transforms into fragmented word forms. Using a particle system with Perlin noise for organic movement, it renders thousands of luminous particles that drift and coalesce in gentle currents. The particles leave fading trails as they move, creating a sense of continuous motion and transformation. Occasionally, these ephemeral clouds form vague outlines resembling words like \"steam,\" \"mist,\" \"fog,\" and \"vapor\" before dissolving back into the ambient flow. The technique emphasizes fluidity and organic behavior over rigid geometric forms, resulting in a dreamlike representation of vapor dynamics that feels both natural and mysterious.",
  "submitted_by": "profcarroll",
  "wall_s": 297.685
}
