Commit Graph

4 Commits

Author SHA1 Message Date
jing
9f42a2e9ab [lane A] Molecules as pickups: real gut chemistry, procedural, 1 draw each
PROTOTYPE + proposal, not wired into boot. Pickups are B's systems, their
economy is C's, object art is D's — this is a renderer and an argument, offered
to all three. Bench: web/dev/laneA_molecules.html · docs/MOLECULES.md

THE PITCH: the pickups already in L2 ARE molecules. C authored `nutrient`,
`mucin`, `B12` and `antacid ammo` before any of this existed — those are the real
biochemistry of a digestive tract, and glucose/cobalamin/bicarbonate are real
compounds with known shapes. We don't need to invent a pickup language; we need
to stop hiding the one the fiction handed us. GUTS is already a science game (an
eosinophil is a real white blood cell, candida a real yeast, the hiatus a real
choke point) — it just doesn't LOOK like one, because everything on screen is
tinted tissue.

THE RULE THAT MAKES IT WORK: CPK is the scanner. Everything identified is drawn
in the standard element palette (O red, N blue, P orange, metals pink);
everything else stays monochrome tissue. Against six biomes of tinted wall a CPK
molecule is the ONLY saturated foreign colour on screen — it reads as artificial,
valuable and targetable with NO HUD marker. Proof: round2_molecules_in_canal.png.
That's the ART_BIBLE's synthetic-scanner fiction paying rent, and it hands Lane E
a free HUD palette.

WHY PROCEDURAL AND NOT MODELBEAST — and I'm authorised to burn the GPU: a
molecule's shape is already known exactly. Glucose is a hexagonal ring because it
IS one. FLUX+TRELLIS gives a plausible blob in 3-8 min that a chemist clocks as
wrong and that can never be re-derived. Ball-and-stick from an atom list is exact,
rebuilds in ms, and is ONE DRAW CALL per molecule (measured: 7 molecules = 7
draws / 26.5k tris). The split is a principle: small molecules = procedural
(exact geometry known); proteins/enzymes = MODELBEAST blobs (real ones are
3000-atom blobs nobody reads — and PIPELINE says blobby organics are TRELLIS's
sweet spot); cells/creatures = MODELBEAST, D's lane, unaffected.

BUILT: water (chaff) · bicarbonate (antacid ammo — HCO3- + HCl is the real
neutralisation, it genuinely fizzes CO2) · glucose (nutrient/score) · caffeine
(overdrive — really gut-absorbed, needs no tutorial) · ATP (boost — the orange
triphosphate tail IS the charge, a pickup that's a diagram of its own mechanic) ·
capsaicin (burn hazard — long greasy tail reads wrong on sight) · B12 (rare
treasure — a cobalt in a corrin cage, the only metal vitamin; C authored it as a
pickup already). Size is a free rarity signal: `unit` mode keeps TRUE relative
sizes, so water is a speck and B12 a chandelier.

Found by rendering it, which is why the bench exists: fuseRing returns vertices
starting adjacent to B, and bonding them from A instead draws a chord across the
ring — still a valid 5-cycle so nothing errors, it just looked like a squashed
pentagon. Fixed in caffeine + ATP's adenine, adjacency documented.

Stated plainly: geometry is idealised (correct connectivity/rings/bond orders,
believable angles, authored flat) NOT crystallographic — real glucose is a chair,
not a hexagon. The B12 is a simplified corrin core. Untested above ~7 on screen;
fifty would want instancing.

qa GREEN.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 19:52:33 +10:00
jing
111ade7d12 [lane A] The swept room + the acid sea, built — and it corrected me four times
The shape read in LANE_A_NOTES was written from reading code, so I built it to
find out if it was true. Flyable: web/dev/laneA_world.html?dbg=1&assets=1&lvl=swept
Nothing here is imposed on anyone: every addition is additive and a level that
opts out behaves exactly as today. C can bin the whole proposal and lose nothing.

WHAT THE PROTOTYPE DISPROVED (my own cost estimates, all four):
- "radial resolution must scale with radius" — wrong. 64 segments is a 0.05u
  circle error at r=70. The arena needs it because it fbm-displaces; the tube's
  wave is smooth in theta. No change made.
- "cap geometry at the span ends" — a thinko. The canal is continuous; a room is
  a fat part of it. Only the fundus dome caps, and it stays an icosphere.
- cost — cheaper than feared: 9 draws / 98k tris worst-frame for a radius-70
  cathedral vs 8 / 74k for the L2 corridor. No leak over a full sweep.
- "one schema flag" — held. `segments[].mode: "open"` is the entire ask.

THE TWO REAL COSTS, NEITHER PREDICTED:
1. D's `tile[0]` is a COUNT, not a density — only a texel size if radius never
   changes. Measured 6.1:1 smear at r=70. The wall now derives the count from
   each ring's own arc length (aRadius attr + uThetaSpan); D's authored numbers
   keep their exact meaning at their reference radius, no re-authoring. That fix
   then laid a seam down the canal (a fractional count can't wrap) -> rounded to
   an integer, seam gone. Not a no-op on corridors: L2's hiatus takes 3 repeats
   where it took 4, which is the texel size correctly holding still as the pipe
   narrows. Eyeballed.
2. MY OWN PINCH GUARD WAS WRONG and would have blocked C. The fixture scored
   1.30 and "failed" the >1.5 law; it was never bent. stats() divided the
   tightest turn ANYWHERE by the widest radius ANYWHERE — 996 units apart, a
   bend in the radius-13 pylorus against the radius of the sea. Locally its
   worst point is 6.4. pinchRatio is now min over s of turnRadius(s)/radius(s).
   Provably one-directional (global <= local by construction) so nothing that
   passed can fail; real levels GAINED headroom: L2 3.32->4.16, L3 1.91->6.99,
   L1 2.11->6.06. This mattered — the guard is what backs the round-1 promise
   that C never has to think about curvature.

THE ACID SEA (world/acid.js, `level.acid {from,to,height,biome}`):
Flat emissive #c8ff3a, level and NOT tube-following — that's the mechanic. The
best find of the session: `height` is ONE NUMBER that tunes the level. Measured:
-18 -> 0% of the sea floor is dry shallow, -55 -> 14%, -62 -> 48%. So C's "position
IS the resource" falls out of the radius wobble they already author — the mucus
shallows are just "where the wall rises above the waterline", nothing to place —
and rising acid literally drowns them: free escalation, same scalar their event
pump drives. Also disproved my own claim: the centreline stays level (+/-1u over
700u), so shallows come from radius wobble, NOT the canal's bends. C must author
vertical bends deliberately if they want depth by anatomy.

Stated plainly, not papered over: the waterline is prototype quality (the plane
meets faceted rings and the shoreline steps). Acid does not drain the coat —
depthAt(pos) is the hook and the cost is Lane B's call. Nothing drives height but
DBG until C's events do.

qa GREEN incl. the new provenance gate; spline selfcheck green; L2 corridor
re-eyeballed for regression. Rulings requested from F in NOTES §-> Lane F.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 18:04:16 +10:00
jing
ecf43940ec [lane A] Round 2 close-out: colorspace re-eyeball, stomach shape read, ruling #5
Finishes the lane A round-2 list that f0982e7 (the rescued first half) left open:

- Biome-tint re-eyeball under the colorspace law (#4 second half). Verdict: all
  six ART_BIBLE tints stand, biomes.js untouched — the wash was wall_material's
  round-1 constants, tuned on the raw framebuffer. Retuned: rim pow 2.2->3.0,
  rim gain 0.9->0.35, textured curve (0.35+d*.95)*.9 -> 0.12+d*0.60, procedural
  d*.8 -> d^2*.65, sheen .10->.04, matcap .22->.14. Rationale documented
  in-shader. Verified on a new six-biome contact sheet (?lvl=biomes, SIX_BIOMES
  fixture — kept as permanent kit), the real L2 hiatus, and an arena interior.
  Evidence: round2_tint_*.png x6 + two *_retuned frames. qa GREEN.

- Stomach-arena shape read for C (#7): recommend the spline-swept room (arena =
  "open" mode over an s-span; fundus dome stays a welded icosphere; chained
  spheres rejected — crease rings + union collision for a worse look). Full
  argument NOTES §-> Lane C + round2_stomach_arena_sketch.svg. Triplanar
  deliberately deferred: the swept room obsoletes it where it mattered.

- Ruling #5: harness -> web/dev/laneA_world.html (+DBG.post to the house shot
  sink); _fixture.js stays — the spline selfcheck asserts against it, now
  documented in-file. launch.json: guts-a on 8145.

- NOTES + progress written for both halves; ROUND2 mid-round box updated: lane
  A's round-2 list is closed, only round-3 items remain.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 17:14:30 +10:00
jing
efea7d98f3 [lane D] Round 1: first texture pack + audio proof, exact-tiling pipeline
Textures (6 walls + normals + wet matcap, $0, ~64s on the m3ultra MPS):
- FLUX ignores "seamless tiling" (seam_error 3.7-17.9); a 4-way cosine
  partition-of-unity blend of the four half-rolls fixes it exactly -> 0.87-1.32
- levels-normalised the pack to one exposure (means were 0.18-0.32); these are
  detail maps multiplied into a biome tint, so per-prompt exposure read as a
  broken tint rather than as dark tissue
- prompt-kit experiment rejected + recorded: PROCITY's "uniform coverage" clause
  in the STEM cured centred subjects but flattened the pack; framing words now
  live only in the two subject prompts that needed them

Audio (1 bed + 4 sfx, 4.2s render, 0.61/10MB, ogg+m4a dual-ship):
- bed-esophagus 24.000s, loop seam 0.32 (wrap step 3x smaller than inner step)
- cascaded lowpass poles: one-pole at 900Hz left 16kHz only ~25dB down = hiss
- rewrote the spectrogram sheet (per-clip peak, log freq) — the first one was a
  saturated rectangle, and evidence you can't read is not evidence

assets.js: miss ledger + misses() — Lane A found that a drifted slug falls back
procedurally forever with no error. Each distinct miss now announces itself.

Also: shot_sink.py (canvas -> docs/shots/laneD, correctly named) and a dev
texture viewer that imports the stub world read-only for the eyeball law.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 14:17:17 +10:00