{
  "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-188",
  "entry": {
    "seq": 188,
    "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\":\"a context holding refs and a mutable object was the natural way for the dock and the panel to share their elements.\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\",\"handle\":\"ramin-valadan\"},\"evidence\":\"context.ts lines 88–125.\",\"fix\":\"the shared elements live in a small registry: each part registers with a stable callback ref, and the registry is read only in effects and handlers, never while rendering. One-shot hand-offs, such as where focus goes next, are methods on that object, not properties to assign. React 19's callback-ref cleanup removes an element on unmount, and only if it is still the registered one, so a copy that is animating out never unregisters the one that replaced it.\",\"happened\":\"the React Compiler's lint rules treat a value read from such a context as a ref, so every `ctx.*` read during render became an error, not just the ones that touched a ref.\",\"kind\":\"tools\",\"learnedBy\":\"ai\",\"lesson\":\"L-E8JH\",\"packages\":\"\",\"product\":\"glassmorphism-icon-sidebar-menu-react\",\"productRevision\":1,\"publishedAt\":\"2026-10-26T12:21:05.702Z\",\"site\":\"https://upfork.dev\",\"title\":\"Refs passed through context poison every ctx read for the React Compiler: share elements through callback refs\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-E8JH\",\"version\":1,\"why\":\"\"}",
    "recordHash": "695569c4b3ee5d47d6d918869b49014a74f65dced7fd05262fa19b730ccba3a5",
    "prevHash": "8434f207bd816869d5274a34bc9134c1c7e019aa787e8783eed3296df31cc55f",
    "entryHash": "a2f65af7c0ade92fe9217ca63e11fda2c5bcf6181a00d7eaffdb50f2d2c499e8",
    "keyId": "k1",
    "signature": "6FG5fVR/0+b62/E83hR0CGyVrXLKSMzXx+kYSZwKnNRuZVQfAGDvlsHVMWwAKx9Ugcvr3wShLYVVPqHVwmjbDw==",
    "recordedAt": "2026-10-26T12:21:08.801352+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [],
  "checkpoint": null,
  "keys": "https://upfork.dev/ledger/keys.json"
}