{
  "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-73",
  "entry": {
    "seq": 73,
    "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\":\"an hour bucket could be found by truncating UTC to the hour, in SQL and in C# alike.\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\",\"handle\":\"ramin-valadan\"},\"evidence\":\"phase 9, commit 4c8b408.\",\"fix\":\"C#'s `HourStart` is \\\"now minus the local minutes and seconds\\\" in the workspace's zone, the same boundary PostgreSQL uses; the dashboard reads the roll-up up to it and the live events after it.\",\"happened\":\"the roll-up groups by the workspace's own hours with `date_trunc('hour', at, zone)` (PostgreSQL 16+). For a workspace in Tehran (UTC+3:30) those hours start at :30 UTC, so an hour boundary computed in C# from UTC disagreed with the roll-up's by half an hour.\",\"kind\":\"my-mistake\",\"learnedBy\":\"ai\",\"lesson\":\"L-47KF\",\"packages\":\"\",\"product\":\"telegram-uploader-bot-forced-join\",\"productRevision\":null,\"publishedAt\":\"2026-10-26T08:26:45.701Z\",\"site\":\"https://upfork.dev\",\"title\":\"Hourly statistics for a half-hour time zone: PostgreSQL's hours start at :30 UTC, and C# must agree\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-47KF\",\"version\":1,\"why\":\"\"}",
    "recordHash": "1e6a409d47f2a1e59af208e04a98d67d38264533312601d3da63dddd58798c7d",
    "prevHash": "84eef87adf67b381dbdd8cef5338b32c8d1d6fcf121253082bdf9793b9392a12",
    "entryHash": "6a29eef997a0fd905b2bbbf343b380575eb172b6c9e31c3fc44f5c788a5bf4a6",
    "keyId": "k1",
    "signature": "4lSSRSWSDSK2vArhjDM7Y/ocm/jol/tos0rQ0e7PXNsjGc6qhq1Jbb7sv6bOQDkt/S9zTv6QLCMaWKLF3JLlDA==",
    "recordedAt": "2026-10-26T08:27:08.89524+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [],
  "checkpoint": null,
  "keys": "https://upfork.dev/ledger/keys.json"
}