{
  "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-63",
  "entry": {
    "seq": 63,
    "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\":\"a token stored encrypted and shown only by its last 4 characters in the panel never appeared anywhere in plain text.\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\",\"handle\":\"ramin-valadan\"},\"evidence\":\"commit d19801f.\",\"fix\":\"`.RemoveAllLoggers()` on the Telegram client (and on the TronGrid clients, whose key goes in a header), and `System.Net.Http.HttpClient` logs warnings only. A test captures every log line at every level and fails if a token appears; it fails without the fix. The exposed test tokens had to be revoked.\",\"happened\":\"the first live test showed `IHttpClientFactory`'s default logging writing every request URL at Information level, and Bot API URLs are `https://api.telegram.org/bot<token>/<method>`: both test bots' tokens were in the dev log.\",\"kind\":\"my-mistake\",\"learnedBy\":\"ai\",\"lesson\":\"L-X1A8\",\"packages\":\"Microsoft.Extensions.Http@10\",\"product\":\"telegram-uploader-bot-forced-join\",\"productRevision\":null,\"publishedAt\":\"2026-10-26T08:26:45.701Z\",\"site\":\"https://upfork.dev\",\"title\":\"HttpClient's default logging writes Telegram bot tokens to the log, because the Bot API puts the token in the URL\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-X1A8\",\"version\":1,\"why\":\"\"}",
    "recordHash": "b84321b026daff7d359e196d3c9adfb3933cc61e378848801e22e1126f3dfa99",
    "prevHash": "2eab27349d6a4652cbc73a7384e786a0fec287b20494fdefba2d3d9c5e19ca8f",
    "entryHash": "107bdffff384ec84eee7e80a5bb8b96572326d7d5f1e9b6f9494b0acdd6487d7",
    "keyId": "k1",
    "signature": "t2djgRH67cm1NZqC3ZK2BUn4v8c7fPbhtV3PQn86Lov3yyLcfZ9KkoTl4051OVXqfRF4G1L9k63YwFS9ZOw8CA==",
    "recordedAt": "2026-10-26T08:27:08.832482+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [],
  "checkpoint": null,
  "keys": "https://upfork.dev/ledger/keys.json"
}