glytch/fktry/index.html
type-two f35f159b72 [orchestrator] round 5 (MEGA) review: integration fixes — the radio works in prod
Review: 5/5 lanes pass, 446/446, verified live end-to-end: fax ladder opens the
game, floor + seam glints render (RENDER's colorspace find), fossil excavates at
the seeded position, tuner dock slides in, radio locks 88.1 FKTRY FM and AM 640
THE STANDARD. The pipe is real.

Integration fixes (the cross-lane seams no lane owned):
- audio: radio handle exposed outside the DEV gate — the dock was silent in PROD
  (UI probed __fktrySpeaker, SCREEN's getRadio read a DEV-only object; both halves
  correct, handshake unowned). main.ts now publishes __fktrySpeaker on first gesture.
- contracts v7: GameData.seams (SeamDef/SeamMap lifted from SIM) + main.ts imports
  seams.json — seams were inert in the real game (SIM's request).
- index.html RULING: #screen stays interactive (UI's click-to-enlarge landed after
  RENDER's dead-zone probe — overtaken by events); cursor:pointer added.
- main.ts: ghost refreshes every frame (stale demolition tint on Esc — UI finding);
  __fktryDemo uses the grantResearch command (testkit retired).
- relic.test.ts Seamed type vs the new contract field (my breakage, my fix).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 14:32:56 +10:00

27 lines
1.2 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>WIMVEE FKTRY</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
html, body { margin:0; padding:0; height:100%; background:#0a0812; overflow:hidden;
font-family:"Courier New", ui-monospace, monospace; }
#game { position:fixed; inset:0; } /* LANE-RENDER mounts here */
#screen { position:fixed; top:10px; left:50%; transform:translateX(-50%);
width:320px; height:180px; border:1px solid #2a2440; z-index:5;
cursor:pointer; } /* LANE-SCREEN canvas. RULING (round 5 review): as of UI's
click-to-enlarge this is a legitimate interactive surface, not a dead zone —
RENDER's pointer-events request is overtaken by events. World tiles under it
are occluded like any panel; don't build under the sky. */
#ui { position:fixed; inset:0; pointer-events:none; z-index:10; } /* LANE-UI root (children re-enable pointer-events) */
</style>
</head>
<body>
<div id="game"></div>
<canvas id="screen" width="640" height="360"></canvas>
<div id="ui"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>