diff --git a/logs/laneB.md b/logs/laneB.md index bc4058d..0fa960b 100644 --- a/logs/laneB.md +++ b/logs/laneB.md @@ -103,3 +103,34 @@ BLOCKED/REQUESTS: NEXT: Hold at M2. Remaining M2 polish if a session 3 is granted: undo already wired to Ctrl+Z; could add snapping increment config + keyable-param add UI (currently params keys come from Lane A capture/inspector). Await SYNC 2. + +## 2026-07-18 session 3 (M2 polish) +DONE: All three orchestrator session-3 items. + 1. Absorbed `_mirror` (orchestrator's seam) — reviewed; it upserts dock-added + stage entities into `scene.entities` with empty tracks and drops them when + `stage.getEntity(id)===null`. Fixed the STUB to make removal testable: + `removeEntity` now fires `onChange` WITH the removed entity object (was + firing `null`, so `_mirror(null)` early-returned and never removed). + Added timeline_test.mjs lifecycle case: dock-add → keyframe → remove, + asserting entity+empty-tracks appear then vanish. + 2. `setDuration(x)` mutator: clamps the playhead into range, KEEPS keys past + the new end (lossless), notifies the UI (reuses onLoad → syncRows + + refreshBar). Wired the dur field to it — plain `scene.duration = x` skipped + the bar refresh. Test asserts clamp + key retention + notify. + 3. Snap-increment select (frame / 0.1 / 0.25 / 1s) in the scene bar; `_snap` + rounds to the chosen step (Alt still = free). Keyable-param add: dblclick a + params lane captures the entity's current param values as keys (skips + `type`/boolean descriptors) — mirrors the transform-capture dblclick. +DECISIONS: + - params lane now shows only when the entity has ≥1 param key OR kind is + camera/light. `_mirror` seeds `tracks.params=[]` (truthy), which was + giving every mirrored character an empty params lane; tightened to + `tracks?.params?.length > 0 || camera|light`. + - setDuration reuses the onLoad callback list as its "refresh UI chrome" hook + rather than adding a second callback channel (lazy; onLoad handler already + does syncRows+refreshBar+draw). +BLOCKED/REQUESTS: none. Verified with a throwaway harness (`_check.html`, + served :8099, deleted, NOT committed). timeline_test.mjs green. +NEXT: M2 polish complete. Undo already wired (Ctrl+Z). Open for M4 timeline + work when unlocked (audio tracks on the timeline UI + Web Audio sync, per + PLAN §5 M4) or any SYNC 3 fixes. Holding until orchestrator flips M4.