Files
bubblechambersimart/fable/02-current-state.md

93 lines
5.0 KiB
Markdown
Raw Permalink Normal View History

2026-07-04 09:47:50 -04:00
# 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`.