# Intent vs. execution The project states its intent unusually well, in four layers: - **originalprompt.md** (May 19): "One goal is large format print. Vector graphics are ideal. …seed/hash concept for reproducibility. This is an art project." - **DESIGN.md**: one renderer-agnostic scene model, many renderers; "get the β statistics right and the image reads as authentic." - **PRINT.md**: a ~2.5 × 4 m wall piece, assembled from registered SVG geometry + raster texture layers. - **roadmap.md**: the feelings — awe, stillness, melancholy, scale-vertigo, the numinous — and a guiding test: *"does it deepen the sense that we are looking at a real trace of something unseen — and does it reward standing closer?"* Below, each declared intent against what the repo actually shows. --- ## 1. "Large-format print" — the founding goal is the least-executed one The print pipeline is real and good: `tools/render.sh`, a hand-rolled CMYK PDF writer with OCG layers (`src/render/pdf.js`, 295 lines, genuinely impressive), Inkscape-convention layered SVG, resolution math in PRINT.md. The execution record: `output/masters/` holds 7 masters across 5 seeds, **all dated May 20–21** — the first 48 hours. No master exists from any of the eight creative phases since. No `_9000.png` photographic master is on disk. The tiled renderer PRINT.md names as the escape hatch for the 4 m dimension (`tools/render-tiled.mjs` — "ask and I'll build it") was never built. The dev entry `index.html` still says "Print target: 24″ × 24″", contradicting the 2.5 × 4 m ambition in PRINT.md — neither has been updated because neither has been tested against a physical object. Every phase since May 21 stopped at 1300–1600 px exploration renders. The roadmap's guiding test — "does it reward standing closer?" — is a question about a physical print viewed by a body, and it has never once been asked of a physical print. **The project optimizes a feeling it has not yet measured.** ## 2. "One scene model, many renderers" — the seam holds; the look leaks DESIGN.md's architectural claim is verifiably true in the strict sense: all 11 files in `src/scene/` are pure data, zero canvas/DOM references. Bubble positions come from one shared salted stream and land identically in raster, SVG, and PDF. The discipline held for six weeks of feature growth. That is rare and worth saying plainly. But the *look* was never given the same seam. Style decisions live triplicated as freehand copies inside the three renderers, and they have already drifted: - Bubble radius: `rr*foot(soft)` in canvas, `b.r*scale*1.15` in SVG, `b.r*scale` (no 1.15) in PDF — three renderers, three bubble sizes. - Fiducial arm length: 6u canvas, 9u SVG, 8u PDF. - ~150–200 lines of formulas (under-stroke width, bubble alpha, disk-stroke alpha, iridescent spectrum mix) exist in verbatim triplicate. - PDF quietly lags: no vignette, no media layer (grease pencil / réseau / film furniture), no shock stains, no fingerprints. Fingerprints are canvas-only. Whole parameters (`boundaryY/R`, `diskPressure`, `emit`, `transparentPaper`) exist only in the SVG renderer. `bubbleStops()` in palette.js — one edge profile consumed by both the canvas sprite gradient and the SVG radial gradient — is the model the rest of the look logic should have followed. The architecture document describes the seam that exists; it does not mention the seam that's missing. ## 3. "Determinism is a feature. The seed as a true name" — true at the altar, loose in the pews The salt discipline (`makeRng(seed, 'subsystem')`) is followed at feature granularity: changing cosmic count cannot move the shock disk; `eventX/eventY` overrides still burn their rng draws so downstream is stable. Someone thought about this carefully. But within modules the promise breaks: dialing `shockStriations` reshuffles the rim segments, rings, stains, *and* core cracks; the `artifacts` slider re-rolls every scratch and dust speck instead of fading them; the density slider — nominally a render-mode param — reshuffles every bubble position on every track. And the theology weakens with distance from the original generator: PRINT.md admits manual slider tweaks are *not* part of the seed fingerprint; `src/qft/params.js` claims "seed → complete fingerprint" while the camera, ripples, vortices, and wavepackets have **no seeded path at all** — a bare QFT seed always yields the default isometric lattice. The true name names less and less of the plate the further you get from `src/scene/`. ## 4. The confirmed bug that is secretly the thesis `renderQFTSVG` silently drops ripple grids. The scene builder creates `id:'ripple'` grids; the renderer emits only `cubic`, `schlegel`, and `e8` layers (`src/qft/renderer.js:178-181`). Verified at runtime: a scene declaring ripples renders an SVG with no ripple geometry. This has been true since the single "Added QFT" commit. Consequence: sketch08's entire premise ("RIPPLES — concentric expanding wavefronts"), sketch09's `03_vortex-with-spinning-ripples`, `15_perturbation-cascade`, `17_spectral-vortex-storm` — **106 hand-authored variation configs, and every one that invoked ripples shipped a plate whose label describes a feature absent from the image.** Two subsequent sketch series were art-directed on top of it. Nobody noticed, because the plates were judged by eye against feelings, not against their own scene models. Note what happened here: a project whose subject is *evidence of the invisible*, which forges archival captions ("PLATE 095 · EXPOSED 1972"), produced a catalogue of plates whose captions confidently describe invisible content. The fiction became true by accident. There are two valid responses — fix it, or recognize it (see [04-ideas.md](04-ideas.md) §3, the neutrino argument) — but the current state, where the archive lies and the author doesn't know, is the only wrong one. ## 5. "The series is an argument" — the argument exists; it's the repo itself Roadmap principle 5 wants Becher-typology grids, a fabricated catalogue, an archive. Phase 4 is marked "in progress" and the media layer (grease pencil, sprockets, réseau) shipped beautifully — the BEBC-1973 output plate genuinely reads as a worn archival photograph; I looked. Meanwhile, without noticing, the project *built an actual archive*: 19 output directories, 675 tracked files, ten gallery `index.html`s, sketch series 01–09, templates 1–4, a wall-mock (`tools/archive-wall.html`) frozen at the May 29 curation. It has the true properties of real archives: numbered series with missing entries (perspective1/2 scripts deleted, their outputs orphaned), instruments that no longer match their plates (`compositions/hero.mjs` uses radial-grid keys the code no longer reads), mislabeled holdings (§4), and an expedition that never reported back (the `milkweed-wind-field` branch). The fabricated-archive artwork the roadmap plans is a *simulation* of what the repo has *actually become*. That inversion is the most interesting unexploited material in the project. ## 6. Physics honesty — the one place intent and execution fully agree The code is candid about its fakery in a way most generative-art code isn't: δ-rays are analytic log spirals because integrating to sub-percent radii "is unreliable" (the header says so); the shock disk announces "Not physics — a chamber/window pressure artifact"; every particle in this universe has mass 1; V-decays conserve neither momentum nor anything else. The load-bearing claim — get the 1/β² bubble statistics right and the eye accepts everything — is correct, and the outputs prove it. One comment lies (`delta.js:53` claims the angular step gets finer toward the center; the formula coarsens it), which is the kind of thing that only matters because the rest of the codebase has earned the habit of being believed. ## 7. The drift nobody wrote down The documents describe a project: *one generator, deepened along a staged plan.* The git history records a different project: *a widening fleet of instruments* — bubble chamber → QFT lattices → carpet/perspective primitives → composition schema → art-historical templates → element liberation → watercolor → milkweed — where each phase spawns a fork-and-mutate tool family and a fresh output directory, and commits are creative sessions ("vast ocean", "Element Liberation"), not code changes. Neither mode is wrong. But the roadmap still narrates mode one while the hands do mode two, which is why Phase 3 (the translucent stacked print — the *stated* strongest fusion) has had no work at all while two unplanned renderers and two unplanned subject-matters shipped. The truest sentence in the repo is in the memory index, not the roadmap: "typology MATRIX of standalone singles." The roadmap should be made to say what the project has decided by doing.