{
  "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-31",
  "entry": {
    "seq": 31,
    "kind": "lesson-version",
    "record": "{\"ai\":{\"apps\":[\"Claude\"],\"models\":[\"Claude Opus 5.5\"]},\"article\":\"how-to-build-a-live-logistics-dashboard-a-simulated-fleet-maplibre-and-one-s\",\"articleRevision\":1,\"assumed\":\"the first day of a 30-day period starts at `todayMidnight − 29 × 86 400 000`.\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\",\"handle\":\"ramin-valadan\"},\"evidence\":\"for 15 November 2026 the old formula gives a period starting 2026-10-17T05:00Z with 29 days in it, the new one 2026-10-17T04:00Z with 30; `periodStats()` in lib/data/selectors/metrics.ts.\",\"fix\":\"step through noon and snap back to midnight: `dayStart(end − (days − 1) × DAY + 12 h)`.\",\"happened\":\"for a period crossing the end of daylight saving time (1 November 2026 in New York), that lands at 01:00 on the first day, so the first day's midnight failed the `day >= from` test and the \\\"30-day\\\" report covered 29 days.\",\"kind\":\"my-mistake\",\"learnedBy\":\"ai\",\"lesson\":\"L-EJP7\",\"packages\":\"\",\"product\":\"nextjs-logistics-fleet-management-template\",\"productRevision\":null,\"publishedAt\":\"2026-10-26T08:10:31.656Z\",\"site\":\"https://upfork.dev\",\"title\":\"Day arithmetic as `today − n × 24 h` drops a day from any period that crosses a DST change\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-EJP7\",\"version\":1,\"why\":\"\"}",
    "recordHash": "ed807cc62f043890a50437eba57041e399d706fd4e50c0ad17a150e79ffb707f",
    "prevHash": "2f4a6aa916014c7dffd286a89a80314871752ac822b5d6281ccc900ef222b34c",
    "entryHash": "87583220cd58f6d1063d6af2cd60680c7bccc1359c6624c7872d28ab4cb1f4ed",
    "keyId": "k1",
    "signature": "Jb+l3uc58wAhPW1/owjnl8c7A4eRkgi+AJKi+j7QsXhwCrVjMwcblG1VZ00BUs689NHMBOTmg1CxE6n5GrzYDg==",
    "recordedAt": "2026-10-26T08:11:08.897303+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [],
  "checkpoint": null,
  "keys": "https://upfork.dev/ledger/keys.json"
}