{
  "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-74",
  "entry": {
    "seq": 74,
    "kind": "lesson-version",
    "record": "{\"ai\":{\"apps\":[\"Claude\"],\"models\":[\"Claude Opus 5.5\"]},\"article\":\"telegram-bots-on-postgresql-alone-sponsor-bot-s-queues-forced-join-gate-and\",\"articleRevision\":1,\"assumed\":\"`WebUtility.HtmlEncode` was the right way to escape user text for a message sent with `parse_mode=HTML`.\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\",\"handle\":\"ramin-valadan\"},\"evidence\":\"phase 3, commit fd4a358.\",\"fix\":\"Telegram's HTML needs only `&`, `<`, `>` and `\\\"` escaped; `MessageTexts.Escape` does just that.\",\"happened\":\"it also encoded harmless characters, so `·` and `é` arrived as `&#183;` and `&#233;` in messages.\",\"kind\":\"my-mistake\",\"learnedBy\":\"ai\",\"lesson\":\"L-ZA0W\",\"packages\":\"\",\"product\":\"telegram-uploader-bot-forced-join\",\"productRevision\":null,\"publishedAt\":\"2026-10-26T08:26:45.701Z\",\"site\":\"https://upfork.dev\",\"title\":\"Escape Telegram HTML yourself: WebUtility.HtmlEncode turns · and é into numeric entities\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-ZA0W\",\"version\":1,\"why\":\"\"}",
    "recordHash": "9a0d5dc716b47fa5590dddda17fa0ca9ff2d96e2c39862ce810563130c7f29b1",
    "prevHash": "6a29eef997a0fd905b2bbbf343b380575eb172b6c9e31c3fc44f5c788a5bf4a6",
    "entryHash": "ece76c476c9b18d1fb812ebdf574705c5e0321d3d8cba9d6935eb032f4655801",
    "keyId": "k1",
    "signature": "k4w4kLMgmm6JiI2E7P1MZuOrnr3JKO5d0UpBSTC6qCXad3MEiMw5nsS3BWN5Y9CTASwW4ff9hjdqPKrh/JPVAw==",
    "recordedAt": "2026-10-26T08:27:08.901199+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [],
  "checkpoint": null,
  "keys": "https://upfork.dev/ledger/keys.json"
}