{
  "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-84",
  "entry": {
    "seq": 84,
    "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\":\"the card's `getBoundingClientRect()` when the view opened was where the morph should start.\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\",\"handle\":\"ramin-valadan\"},\"evidence\":\"commit 98e4f3c; `homeRect` in CarouselDetail.tsx.\",\"fix\":\"`homeRect` takes the element's own transform off, measures, and puts it back, all in one synchronous step, so the morph's home is the same however often the effect runs.\",\"happened\":\"the rectangle includes whatever transform the element carries at that moment. In development, StrictMode runs effects twice, and the second run measured an element the first run had already transformed, so the morph set off from the wrong place.\",\"kind\":\"my-mistake\",\"learnedBy\":\"ai\",\"lesson\":\"L-9471\",\"packages\":\"react@19.2\",\"product\":\"dynamic-3d-carousel-react\",\"productRevision\":1,\"publishedAt\":\"2026-10-26T08:46:39.806Z\",\"site\":\"https://upfork.dev\",\"title\":\"Measure a FLIP morph's start with transform none, or StrictMode's second run measures an element already moved\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-9471\",\"version\":1,\"why\":\"\"}",
    "recordHash": "ddc63552fefe03f3bc265fd0c7294f39cacbc881cba9bf5d75a2598007802c1d",
    "prevHash": "074afbc8e1e10a08bb82a8990ed78823326a731f7648392682bd5582fca2b76c",
    "entryHash": "8120ff6c4152f33ebf54f100b0ab3bb4153614deb18f8e92db980635d06adc56",
    "keyId": "k1",
    "signature": "1fxBZHJS4aDV3XyKS3MyRpYRrn+r14YA4UVrGuqfz8GxqXAFc0/t+gArUQHjXj59XjxV7ujhPS2Fyrf5bUzGCw==",
    "recordedAt": "2026-10-26T08:47:08.81381+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [],
  "checkpoint": null,
  "keys": "https://upfork.dev/ledger/keys.json"
}