Files
bubblechambersimart/fable/01-intent-vs-execution.md

155 lines
8.7 KiB
Markdown
Raw Normal View History

2026-07-04 09:47:50 -04:00
# 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 2021** — 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 13001600 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.
- ~150200 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 0109,
templates 14, 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.