93 lines
5.0 KiB
Markdown
93 lines
5.0 KiB
Markdown
# 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 24–25) |
|
||
| 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 24–25) 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`);
|
||
~150–200 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 3–4 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 20–21) → 5 iteration series → QFT sketches 01–09 → qft-bc →
|
||
layering (642 MB, the largest) → liberation → templates 1–4 → watercolor +
|
||
milkweed (untracked).
|
||
- `output/masters/`: 7 masters, 5 seeds, all from May 20–21. 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 08–09 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`.
|