{
  "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-189",
  "entry": {
    "seq": 189,
    "kind": "lesson-version",
    "record": "{\"ai\":{\"apps\":[\"Claude\"],\"models\":[\"Claude Opus 5.5\"]},\"article\":\"duet-sidebar-a-glass-icon-dock-and-an-unfurling-menu-in-react-and-five-traps\",\"articleRevision\":1,\"assumed\":\"the effect that runs when the panel opens could take the pending focus target and move focus in the next animation frame.\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\",\"handle\":\"ramin-valadan\"},\"evidence\":\"menu.tsx lines 269–279.\",\"fix\":\"the value is taken inside the `requestAnimationFrame` callback, so only the frame that actually runs takes it, however many times the effect ran.\",\"happened\":\"in development React runs effects twice (run, clean up, run). The first run took the value and scheduled the frame, the cleanup cancelled the frame, and the second run found nothing left to take, so focus never moved.\",\"kind\":\"my-mistake\",\"learnedBy\":\"ai\",\"lesson\":\"L-P24X\",\"packages\":\"react@19\",\"product\":\"glassmorphism-icon-sidebar-menu-react\",\"productRevision\":1,\"publishedAt\":\"2026-10-26T12:21:05.702Z\",\"site\":\"https://upfork.dev\",\"title\":\"A take-once value read in an effect is lost to React's dev double effects: take it inside the frame\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-P24X\",\"version\":1,\"why\":\"\"}",
    "recordHash": "16d4f9da302ba9de2b577e7452bfedddf4936377e6017edbcd591f8afda19dbd",
    "prevHash": "a2f65af7c0ade92fe9217ca63e11fda2c5bcf6181a00d7eaffdb50f2d2c499e8",
    "entryHash": "1fa6f23df8c590b8fe2d745206f60d3a0dca71a8a8d79fdad9097413bd8fe3fe",
    "keyId": "k1",
    "signature": "buTtSXuSYyUcQ7Cwi34q2OoiuokmsiR4pBcrWa/vFdNoJv+hF4L2BYLTA5L9GyGx8N0+HO9EYcoklDcpMpahCg==",
    "recordedAt": "2026-10-26T12:21:08.807901+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [],
  "checkpoint": null,
  "keys": "https://upfork.dev/ledger/keys.json"
}