guts/web/js/levels/L3_stomach.json
jing 1b5ec767cd [lane C] Round 1: schema v1, levels registry + selfcheck + pacing sim, L2 vertical slice
Data spine:
- Schema v1 ratified (TECH.md, C-owned). Additive over v0: schema/par/next, segment
  name, cross-section placement (theta/rho as a FRACTION of safe radius), spread, span,
  pickup+gate event types, hazard params. STUB_LEVEL synced (that const only, per
  ROUND1 §Lane C.1) — world.hash() unchanged (1bdf001), geometry provably untouched.
- levels/index.js: registry + loader (node+browser, no THREE), real schema selfcheck
  (qa's --selfcheck hook is now live) and a pacing simulator (--sim). Consumes the other
  lanes' contracts live rather than restating them: A's biomes.js for ids and
  wave.amp+breathe, A's SKIN, B's tuning.js hull radius, B's balance.js for scores.
- levels/enemies.js (fiction id -> archetype join table), levels/difficulty.js.

L2_esophagus — the vertical slice, complete: 3600 units, 7 beats, 47 events, 65 enemies,
10 checkpoints, 3 samples, reflux-surge finale. L1/L3 skeletons (shape only).
Anatomy is the level designer: the three real esophageal constrictions are the three
setpieces, and all three enemies are real esophageal pathology (bolus chunk, eosinophilic
esophagitis, candida esophagitis).

Measured (node web/js/levels/index.js --selfcheck|--sim; qa GREEN):
- selfcheck 3/3 valid, exit 0.
- pressure curve 0.27 -> 2.14 -> 4.35 -> 0.69 -> 4.53 -> 6.35 -> 4.40 (breather/pressure/
  spike/breather/pressure/peak/finale).
- par 3:30 vs measured 2:47 speedrun / 3:19 par-pace / 4:22 timid; par.score 9000 of a
  9400 kill budget (95%), computed from B's scores.
- all 10 checkpoint gaps within the <=30s death-cost law (max 28.8s); min clearance 2.73.

Two contract collisions found and resolved (LANE_C_NOTES):
- Biome ids: authored mouth/pharynx/cardia/pylorus; A's registry has six canonical ids and
  rejected all four. A is right — biome = look, segments[].name = anatomy. Conformed.
- Balance: my first enemies.js restated hp/size/speed/score that B owns in balance.js.
  Cut to a join table; index.js reads B's scores via scoreFor().

Caught live: A raised esophagus wave.amp 0.9 -> 1.4 mid-session, making the diaphragmatic
hiatus unflyable (2.33 vs the 2.5 floor). Widened 6.5 -> 6.8. The invariant also failed my
own aortic constriction's first draft (radius 7, symmetric squeeze) -> radius 9, directional.

No in-engine flythrough: ?stub=1&lvl= does not compose (snippet offered to F) and the stub
is single-segment, so it could only render beat 1. The pacing evidence is a kinematic model,
not a playtest — it proves L2 is flyable, paced and survivable, not that it feels good.

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

77 lines
4.3 KiB
JSON

{
"schema": 1,
"id": "L3_stomach",
"name": "Stomach",
"tagline": "The acid sea",
"seed": 20260703,
"par": { "time": 540, "score": 15000, "samples": 3 },
"next": "L4_small_intestine",
"design": {
"owner": "Lane C",
"status": "SKELETON (round 1) - shape only: biomes, lengths, arenas, boss placement, gate. Encounters, mucus-shallow lanes, churn cyclones and the pH field are round 2+. Do not read the (near-empty) events list as a design.",
"identity": "The coat level. Ambient pH drains the mucus coat continuously, so position IS the resource: mucus shallows along the greater curvature pause the drain, open acid does not. Ends on the Pyloric Guardian.",
"anatomy": "Cardia -> fundus -> body (greater/lesser curvature) -> antrum -> pyloric antrum -> pylorus. Real order, real proportions.",
"biome_note": "biome = tissue/look family (Lane A's registry), segments[].name = the anatomy. There is no 'cardia' or 'pylorus' biome and there should not be. The cardia deliberately keeps the ESOPHAGUS palette so that the acid sea REVEALS itself: you arrive still in teal, and the world turns orange the moment the fundus opens out. Spending a biome id on the cardia would throw that reveal away.",
"scale": "Real stomach is ~25cm long, ~15cm wide when full; arena radius 180 units = 36cm. The one place the 1 unit : 1 mm fiction nearly holds - the stomach is genuinely a room.",
"open_question": "The body of the stomach is not a sphere and arenas[] currently only expresses spheres. Either A's arena primitive grows to a capsule/blob union, or L3 chains overlapping spheres. Flagged to Lane A in LANE_C_NOTES.md §-> Lane A - do not treat arenas[1] as final geometry."
},
"segments": [
{
"biome": "esophagus",
"name": "Cardia",
"length": 200,
"radius": { "base": 12, "wobble": 0.2 },
"curviness": 0.3,
"flow": 8,
"note": "You arrive through the cardiac sphincter with the reflux surge still behind you. Short, tube-mode, decompression after L2's finale. Still wearing the esophagus palette (see design.biome_note) - the orange hits when the fundus opens, not before."
},
{
"biome": "stomach",
"name": "Fundus",
"length": 600,
"radius": { "base": 40, "wobble": 0.25 },
"curviness": 0.2,
"flow": 3,
"note": "The gas dome at the top of the stomach. First taste of 6DOF-in-acid, low density: a breather that happens to be lethal if you loiter in the open."
},
{
"biome": "stomach",
"name": "Body",
"length": 900,
"radius": { "base": 45, "wobble": 0.3 },
"curviness": 0.2,
"flow": 3,
"note": "THE ACID SEA - the level's centrepiece and the biggest room in the game so far. Churn cyclones, pepsin swarms, and the mucus shallows hugging the greater curvature."
},
{
"biome": "stomach",
"name": "Antrum",
"length": 500,
"radius": { "base": 25, "wobble": 0.25 },
"curviness": 0.35,
"flow": 6,
"note": "The stomach starts squeezing down toward the exit. Room shrinks, current returns, pressure builds into the boss."
},
{
"biome": "stomach",
"name": "Pyloric Antrum",
"length": 300,
"radius": { "base": 14, "wobble": 0.15 },
"curviness": 0.25,
"flow": 10,
"note": "The Guardian's lair (see arenas[2]). The churn here is a current that pushes you at the walls for the whole fight."
}
],
"arenas": [
{ "at": 800, "radius": 70, "biome": "stomach", "note": "Fundus dome. Spans s 730-870." },
{ "at": 1250, "radius": 180, "biome": "stomach", "note": "The acid sea. Spans s 1070-1430. PROVISIONAL - a sphere is the wrong shape for the stomach body; see design.open_question." },
{ "at": 2350, "radius": 70, "biome": "stomach", "note": "Pyloric Guardian lair. Spans s 2280-2420." }
],
"events": [
{ "s": 20, "type": "checkpoint", "name": "Cardia" },
{ "s": 2260, "type": "checkpoint", "name": "Pyloric Antrum", "note": "Checkpoint before the boss - the law, and the reason a Guardian wipe costs seconds and not minutes." },
{ "s": 2350, "type": "boss", "id": "pyloric_guardian", "note": "Full phase spec (phases / telegraphs / windows / failure pressure) in LANE_C_NOTES.md §Boss specs." },
{ "s": 2480, "type": "gate", "id": "pylorus", "to": "L4_small_intestine" }
]
}