[laneB] log: M1 session 1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
45debd3c10
commit
b20354c53f
@ -8,4 +8,54 @@ Format per session:
|
||||
BLOCKED/REQUESTS: …
|
||||
NEXT: …
|
||||
|
||||
(no sessions yet)
|
||||
## 2026-07-18 session 1
|
||||
DONE: M1 complete. All files under `scenegod/web/`.
|
||||
- `timeline.js` — model + clock, no DOM, no three import (self-contained
|
||||
quat/euler/slerp math so `node` can run it). `load/toJSON` lossless
|
||||
round-trip (unknown entity fields preserved via structuredClone + a
|
||||
WeakMap for cached quats). `evaluate(t)`: transform (pos/scale lerp, rot
|
||||
slerp→euler, easing incl. step-hold), params (num lerp, color sRGB lerp),
|
||||
clip blocks (set-time exact scrubbing, fade-out ramp), camera cuts (fires
|
||||
only on change). Clock: `play()` rAF deltas, `seek` clamp, `step(frame)`
|
||||
pure/deterministic for Lane C render. Mutators addKey/moveKey/deleteKey/
|
||||
addClipBlock/moveClipBlock/trimClipBlock/addCut + undo stack (`undo()`
|
||||
wired; Ctrl+Z hooked in tlui). `capturekey` window listener present.
|
||||
Clips need `await tl.preload()` before evaluate (prepareClip is async).
|
||||
- `tlui.js` — canvas panel into `#timeline`. Ruler scrub, drag playhead,
|
||||
space=play/pause, dblclick lane=add key from stage state, drag key (snap
|
||||
to frame, Alt=free), right-click=delete, drag clip block/edge, Home/End,
|
||||
Ctrl+Z. Scene bar name/dur + Save/Load (POST/GET `/scenes/{name}`,
|
||||
localStorage fallback). Names column auto-syncs to `stage.entities()` via
|
||||
`onChange`.
|
||||
- `stagestub.js` — full §4.2 Stage as plain objects; records effects into
|
||||
`stage.applied[]`. Dev-only, delete at SYNC 1.
|
||||
- `timeline_test.mjs` — `node scenegod/web/timeline_test.mjs` → green
|
||||
(midpoint interp, step-ease hold, clip local time @3 frames, camera flip,
|
||||
lossless round-trip, unknown-field preservation).
|
||||
- `tldev.html` — dev-only browser harness. Verified in browser: scrub moves
|
||||
entities (interp live in log), play runs to duration + auto-stops, camera
|
||||
cut flips camA→camB at t=3, keys/clips/cuts render. Delete at SYNC 1.
|
||||
DECISIONS:
|
||||
- Timeline imports NO three.js — inlined euler↔quat + slerp (~30 lines) so
|
||||
the node self-check needs zero deps (there is no node_modules/three in
|
||||
this stack). setTransform rot is euler (matches entityTransform format).
|
||||
- One `<canvas>` for all lanes (not canvas-per-lane); hit-testing via a
|
||||
hitbox list rebuilt each draw. Simpler, fast enough at this scale.
|
||||
- CSS injected from tlui.js via a `<style id=laneB-tl-css>` rather than
|
||||
creating `web/style.css` — that file is Lane A's and didn't exist yet.
|
||||
Move into a `/* === LANE B === */` block at SYNC if John wants it
|
||||
centralized. (See REQUEST below.)
|
||||
- M1 crossfade = fade-OUT only; cross-block fade-IN is M2 "crossfade polish"
|
||||
per the milestone list. Marked with a ponytail comment in timeline.js.
|
||||
BLOCKED/REQUESTS:
|
||||
- None blocking. Note for orchestrator/Lane A: my timeline styles live in
|
||||
an injected `<style>` in tlui.js. If you'd rather they sit in style.css,
|
||||
say so and I'll emit a `/* === LANE B === */` block for Lane A to paste
|
||||
(I won't edit style.css directly — ownership).
|
||||
- Lane A's files (index.html, stage.js, room3d.js, dock.js, style.css) are
|
||||
present untracked in the shared working dir but uncommitted — I staged
|
||||
ONLY my 5 files, left theirs alone.
|
||||
NEXT: Hold at M1 boundary. At SYNC 1 the stub swaps for the real Stage
|
||||
(one-line change in the page import) and tldev.html/stagestub.js get
|
||||
deleted. M2 (locked): clip crossfade polish, params/cut lane UI, snapping
|
||||
config, undo Ctrl+Z already stubbed, box-select multi-drag.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user