Files
bubblechambersimart/fable/02-current-state.md
2026-07-04 09:47:50 -04:00

5.0 KiB
Raw Blame History

Current state — factual snapshot (2026-07-04)

Codebase

Area Size State
Core (src/rng + scene/ + render/ + ui/ + main + build) ~3,220 lines Committed, disciplined, small
QFT (src/qft/) 9 files, ~1,250 lines Committed (one commit, May 29)
Compose (src/compose/) 4 files, ~680 lines Committed
Watercolor (src/render/watercolor.js) 427 lines Uncommitted (Jun 2425)
Milkweed-botanical (src/milkweed/umbel.js) 169 lines Uncommitted (Jun 25)
Milkweed-windfield (src/field/wind.js, src/scene/umbel.js, src/scene/drift.js, GROUP_BUILDERS registry) ~225 lines + compose rework Committed on unmerged branch milkweed-wind-field (63066ee, Jun 17, also pushed)
Tools 37 files, ~4,750 lines Committed except 3 newest

Git: 12 commits on main, May 20 → Jun 10. Last commit 24 days ago. The uncommitted watercolor + milkweed work is a 2-day session (Jun 2425) followed by 9 days of silence. An entire fourth renderer exists only in the working tree.

The two milkweeds (important — memory/docs conflate them)

  1. Branch milkweed-wind-field: the "hidden realities" system — one divergence-free wind field (closed-form time integral, elegantly done), three detectors (dunes/water/seeds), umbel-as-vertex, drift-as-advection, plus the GROUP_BUILDERS registry refactor of the composition engine. Committed Jun 17, never merged.
  2. Working tree on main (src/milkweed/umbel.js): a different milkweed — a botanical Asclepias still-life scene built for the watercolor renderer. Does not import the wind field.

Both export generateUmbel with incompatible signatures. Merging the branch as-is collides. This is an unmade decision materialized as two files.

Renderers

4 renderers for bubble-chamber scenes (photo raster / SVG / PDF / watercolor); QFT has only its own SVG renderer — no photographic or watercolor QFT exists. Feature parity: PDF lags (no media layer, vignette, stains, fingerprints); SVG has private params (boundary*, diskPressure, emit, transparentPaper); ~150200 lines of look logic triplicated and drifting (three bubble sizes). Watercolor integrates through the proper seam (same signature, shared sampleBubbles/depthFactors, palette registry extended not bypassed), with known rough edges: dead preview flag, scratch-canvas cache keyed by width only, heavy per-pigment blur cost at print resolution, no UI entry point yet — reachable only via tools/preview.html?renderer=watercolor.

Parameter surface

≈68 total: 53 in the UI (43 sliders / 2 selects / 8 toggles) + ~15 hidden or SVG-only. Flat namespace is starting to encode per-palette sub-schemas by label convention ("(magentarise)" ×3). Every new param is a 34 place edit.

Tools & outputs

  • 8 durable pipeline tools; ~25 one-off sketch scripts (fork-and-mutate: the same merge() helper verbatim in 5 files, F() color helper redefined in 12 of 17 QFT tools, the contact-sheet HTML inlined 17 times). Zero shared tool-level utility module.
  • output/: 2.4 GB, 19 directories, 675 tracked files. Chronology: inspiration → masters (May 2021) → 5 iteration series → QFT sketches 0109 → qft-bc → layering (642 MB, the largest) → liberation → templates 14 → watercolor + milkweed (untracked).
  • output/masters/: 7 masters, 5 seeds, all from May 2021. Nothing since.

Stale / dead weight

  • bubble_chamber.html — the headline "portable single file" deliverable — built May 31, now 3.5 weeks behind src/ (missing the milkweed palette, the Jun 17 svgVector changes, watercolor). Nothing detects staleness; the built file stamps that it was built, not from what.
  • bubble_chamber.v2.html — superseded snapshot, dead.
  • tools/archive-wall.html — hardcodes the May 29 curation; predates templates/liberation/watercolor.
  • compositions/hero.mjs — the only file in compositions/; uses radial-grid keys (vp, rays, depthLines) that gridSheets now silently ignores.
  • tools/inkwash-export.mjs — self-declared superseded by the native watercolor renderer ("kept as a record").
  • composer.html — works, but one phase behind (untouched during watercolor).
  • package.json — 3 npm scripts, all from May 20; none of the ~25 later tools registered.
  • tools/render-qft-svg.mjs references a render-milkweed-svg.mjs that doesn't exist.

Known bugs

  1. Ripple grids silently dropped by renderQFTSVG (src/qft/renderer.js:178-181) — every "ripple" variation across sketches 0809 shipped without its subject.
  2. drawDamage/drawInstrument last param named inv but called with light (src/render/canvasPhoto.js:110,208) — works today, trap for the next edit.
  3. perspectiveGridSVG creates an rng it never uses — the compose layer's 'pA'/'pB' salts do nothing for radial grids.
  4. Dead pre-palette-era fields in canvasPhoto.js palette(); delta.js:53 comment inverts what the formula does; watercolor.js:374 0.05 * 8.