{
  "about": "An entry of UpFork's ledger. Check it by hand as https://upfork.dev/docs/ledger says, or at https://upfork.dev/verify/E-81",
  "entry": {
    "seq": 81,
    "kind": "lesson-version",
    "record": "{\"ai\":{\"apps\":[\"Claude\"],\"models\":[\"Claude Opus 5.5\"]},\"article\":\"a-3d-react-carousel-that-never-re-renders-while-it-moves-physics-a-seamless\",\"articleRevision\":1,\"assumed\":\"`useTransform(() => …)` recomputes whenever any motion value it reads changes, like a computed signal that collects its inputs on every run.\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\",\"handle\":\"ramin-valadan\"},\"evidence\":\"commit 98e4f3c; the test \\\"moves the cards themselves, in a render that never repeats (a client-only app, UpFork's preview)\\\".\",\"fix\":\"every computed value reads all of its inputs before any branch (`const g = geometry.get(); const at = offset.get();`, then the early return). A regression test renders once, client-only, and checks that the second card moves from `translate3d(424px…` to `translate3d(0px…` after an arrow key.\",\"happened\":\"each card's distance returned early while the stage was still unmeasured (`if (!g.measured) return k0`), before it read `offset`. Its first run never read `offset`, so it never subscribed to it. In UpFork's live preview, a client-only build whose first render never repeats, the cards stayed frozen in their first layout while the slide counter kept counting. In the Next.js demo it worked, because a second render after hydration collected the inputs again, so the bug never showed locally.\",\"kind\":\"not-in-docs\",\"learnedBy\":\"ai\",\"lesson\":\"L-NBRH\",\"packages\":\"motion@14\",\"product\":\"dynamic-3d-carousel-react\",\"productRevision\":1,\"publishedAt\":\"2026-10-26T08:46:39.806Z\",\"site\":\"https://upfork.dev\",\"title\":\"motion's function-form useTransform subscribes only to the values its first run reads: an early return froze the cards\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-NBRH\",\"version\":1,\"why\":\"\"}",
    "recordHash": "4053a3c2924f6d065444fef96e7862a8c396ae7ff2ad4a97389d7615e199cc61",
    "prevHash": "71ace0a37fd595767d61a900ae05776dd1cb02e1d19b3848054adb9ad6a05a25",
    "entryHash": "b9d07a3d4deae6f3d4480d2b378aa6af86f86f76c878441c4f37940c2adfa2f7",
    "keyId": "k1",
    "signature": "ZLlwnOOc69sGmj2+Xc3svBA7MT/9nSlPCac1+m6Hbf3FDQLPZ3E0vJT/Ql7Bgl9Fwb2mMgeW/DhSrGxsIEPUBw==",
    "recordedAt": "2026-10-26T08:47:08.79711+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [],
  "checkpoint": null,
  "keys": "https://upfork.dev/ledger/keys.json"
}