{
  "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-209",
  "entry": {
    "seq": 209,
    "kind": "lesson-version",
    "record": "{\"ai\":{\"apps\":[\"Claude\"],\"models\":[\"Claude Opus 5.5\"]},\"article\":\"confirm-button-a-liquid-two-step-delete-for-react-native-and-seven-skia-trap\",\"articleRevision\":1,\"assumed\":\"once the pill had been drawn, the first split would cost no more than any other frame.\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\",\"handle\":\"ramin-valadan\"},\"evidence\":\"the build's frame-pacing runs and its trace; confirm-button.tsx lines 338–363 and 577–579; the kit README, \\\"Warm every program\\\".\",\"fix\":\"three small shapes are drawn under the opaque pill from the first frame, where no one sees them: a concave path, a circle and a round-capped arc. Three runs of the first arm then had worst frames of 17.1, 17.2 and 17.5 ms, none over 25 ms.\",\"happened\":\"in Chrome on an Intel Iris Plus laptop, the first press that armed the button took one 66 ms frame; a second round on the same page had none. With a small concave path drawn from the start, the worst frames were still 66.1 and 49.5 ms, and a trace of the press showed 35.6 ms of a 67.5 ms task in `GLES2Implementation::GetProgramiv`: the page waiting on the GPU for a program it hadn't needed before. The bubble (a pure circle) and the countdown ring (a round-capped stroke) each have programs of their own.\",\"kind\":\"tools\",\"learnedBy\":\"ai\",\"lesson\":\"L-4MEF\",\"packages\":\"@shopify/react-native-skia@2.6.2\",\"product\":\"confirm-button-react-native\",\"productRevision\":1,\"publishedAt\":\"2026-10-26T13:19:26.932Z\",\"site\":\"https://upfork.dev\",\"title\":\"The first concave path, circle and round-capped stroke each stall for a WebGL program: draw them unseen at mount\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-4MEF\",\"version\":1,\"why\":\"\"}",
    "recordHash": "d0e0a07a5736e91047819f031cfb0fde993f34d9e18e0f03b802005493e5d2ae",
    "prevHash": "2849627e06b7d6e6c2e6092967d0e13946dec65f7cd668dd8f58311acc6d0117",
    "entryHash": "73ed0ac8730e2dd715c9ec5f6d15764a2281adcef9cdb0073a96cf82c3300313",
    "keyId": "k1",
    "signature": "poQffmFkFbbSrJ+KR08FLAWLeTNfkjPA22wGqHdGz8J6hj/mkTe7jFDvzDxeEb/HJNxlcLPs+oPgzkj9cAqIDA==",
    "recordedAt": "2026-10-26T13:20:08.821886+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [],
  "checkpoint": null,
  "keys": "https://upfork.dev/ledger/keys.json"
}