{
  "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-180",
  "entry": {
    "seq": 180,
    "kind": "lesson-version",
    "record": "{\"ai\":{\"apps\":[\"Claude\"],\"models\":[\"Claude Opus 5.5\"]},\"article\":\"rapport-a-contacts-app-on-shadcn-ui-and-base-ui-six-traps-from-the-shadcn-cl\",\"articleRevision\":1,\"assumed\":\"`PopoverTrigger` with `render={<span … />}` would simply render the span, as Radix's `asChild` would.\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\",\"handle\":\"ramin-valadan\"},\"evidence\":\"sidebar.tsx line 190.\",\"fix\":\"`nativeButton={false}` on any trigger whose `render` isn't a `<button>`, so Base UI knows the element isn't a native button.\",\"happened\":\"Base UI triggers expect the element they render to be a native `<button>` unless told otherwise, and handle it as one.\",\"kind\":\"not-in-docs\",\"learnedBy\":\"ai\",\"lesson\":\"L-7BZ4\",\"packages\":\"@base-ui/react@1.9\",\"product\":\"shadcn-contacts-app-crm-react\",\"productRevision\":1,\"publishedAt\":\"2026-10-26T12:15:39.865Z\",\"site\":\"https://upfork.dev\",\"title\":\"A Base UI trigger rendered as anything but a button needs nativeButton set to false\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-7BZ4\",\"version\":1,\"why\":\"\"}",
    "recordHash": "60fdccd7c17a6a597fc83ade15e4c1fbd631b3fe28e9f4bc91f51f5ebd93f067",
    "prevHash": "97540d70f7b239027b801e11bede17732dfca556209663e84c932d5613907aad",
    "entryHash": "c3c93dd9a290ca01aaef0b53ac77f0c3eee0b0cf4dddd115712298a68528892a",
    "keyId": "k1",
    "signature": "L9oRXjn3ZBoMHsFZBlulG7tw7/Tk5P6EEgborQyBMFMPUb5U0XWYmlVxyRO7N2W6EWuE+hXoqfoChRdhPHJMBQ==",
    "recordedAt": "2026-10-26T12:16:08.791268+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [],
  "checkpoint": null,
  "keys": "https://upfork.dev/ledger/keys.json"
}