{
  "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-4",
  "entry": {
    "seq": 4,
    "kind": "lesson-version",
    "record": "{\"ai\":{\"apps\":[],\"models\":[]},\"article\":\"how-infall-ray-traces-a-black-hole-in-the-browser-and-what-we-learned\",\"articleRevision\":1,\"assumed\":\"to put the Doppler-bright side of the disk on the left, as in the reference, I could turn the camera 180° round the disk's axis.\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\",\"handle\":\"ramin-valadan\"},\"evidence\":\"first milestone (5dd4712); `DEFAULT_SETTINGS` in infall-settings.ts (roll −14, spinDirection −1).\",\"fix\":\"the `spinDirection` setting reverses the orbit (−1 puts the bright side on the left). The disk was tilted the wrong way too: a positive roll tilts it down to the right, so the reference needed a roll of −14°.\",\"happened\":\"the bright side stayed where it was.\",\"kind\":\"my-mistake\",\"learnedBy\":\"ai\",\"lesson\":\"L-19NA\",\"packages\":\"\",\"product\":\"black-hole-hero\",\"productRevision\":3,\"publishedAt\":\"2026-10-25T11:23:56.027Z\",\"site\":\"https://upfork.dev\",\"title\":\"Turning the camera round a black hole's disk doesn't move its bright side; the spin direction does\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-19NA\",\"version\":1,\"why\":\"the disk is the same all the way round, so from any azimuth at the same inclination the gas turning toward the camera is on the same side of the screen; which side is brighter depends only on which way the gas turns as seen from the camera.\"}",
    "recordHash": "e24769d284f2cead9c5e4b794725cacc1b5d83540085be151f7fa8ea363f88ee",
    "prevHash": "157b08c4e360e6a0ed912ada750dda3afb427afe3de9a2210936b99071f8a01c",
    "entryHash": "35e94aa48a6e4ce584c1b0843b40427319930e2d7a79d9af020ba54e7d3bcc18",
    "keyId": "k1",
    "signature": "lB5j/TwpC1j6n0CU32xRLLhatdqeU5PC3yttekqNmT4rllYdjU60LyM/ML8Fdx/gH32owKFCL4pu+oFQXC0vDg==",
    "recordedAt": "2026-10-25T18:16:45.797561+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [
    {
      "seq": 5,
      "prevHash": "35e94aa48a6e4ce584c1b0843b40427319930e2d7a79d9af020ba54e7d3bcc18",
      "recordHash": "e865fd471efb17f28552423d965045f0e5f3a3ca4fb076c4a356d01f20953f28",
      "entryHash": "409b18adf7947891ceede9f1309018976ae44009d95321951d432e566aac2d7c"
    },
    {
      "seq": 6,
      "prevHash": "409b18adf7947891ceede9f1309018976ae44009d95321951d432e566aac2d7c",
      "recordHash": "f3b8d22a76567b6a281aece4c29082d8d60f56d78e7316f16509743ca80ce1f6",
      "entryHash": "f9687614e491c2f70b68fd4f8f67baa9bd9b740231a36e9f593db64ec3eb9bdc"
    },
    {
      "seq": 7,
      "prevHash": "f9687614e491c2f70b68fd4f8f67baa9bd9b740231a36e9f593db64ec3eb9bdc",
      "recordHash": "e24f163164e713768b954c085c139ce5062945a465e103073aa173f2b63723d0",
      "entryHash": "6add22f2f963df850ffe2207e1c818b230e3f0aa65c5543c66309f071d44dcce"
    },
    {
      "seq": 8,
      "prevHash": "6add22f2f963df850ffe2207e1c818b230e3f0aa65c5543c66309f071d44dcce",
      "recordHash": "8557688a5e63a08bb1ab8b636ecef0164040773f442abe516e568835c360c917",
      "entryHash": "86e612ac90e03891ac5ad3f5eac1c5b0a9c0b406a7e6184a5d8c7a51775eafef"
    },
    {
      "seq": 9,
      "prevHash": "86e612ac90e03891ac5ad3f5eac1c5b0a9c0b406a7e6184a5d8c7a51775eafef",
      "recordHash": "a11eec84eaa8f191774396800792640870f71942c278f52ff6407c8c05253a05",
      "entryHash": "50595cd6265ad7fe6f1e89414c0a8c5a313e428e3a3937e42126759ae4062eea"
    },
    {
      "seq": 10,
      "prevHash": "50595cd6265ad7fe6f1e89414c0a8c5a313e428e3a3937e42126759ae4062eea",
      "recordHash": "fc69fa3240cf12cfdad23e4192eb99af0734fc46efa768a5401801fabfa0948a",
      "entryHash": "669035f345cd336988e319921da4137c72f4c4dc35ffa49d01c32ed51ad02a3e"
    },
    {
      "seq": 11,
      "prevHash": "669035f345cd336988e319921da4137c72f4c4dc35ffa49d01c32ed51ad02a3e",
      "recordHash": "74474f78e23c80a3baa6e2143452ac240d7cc24b9dc3d965f8ec4690493459eb",
      "entryHash": "d97ed346c9c05bbb262d5ea86d2067e7153c19435dc3abc059d7347c3357a13b"
    },
    {
      "seq": 12,
      "prevHash": "d97ed346c9c05bbb262d5ea86d2067e7153c19435dc3abc059d7347c3357a13b",
      "recordHash": "43dd0acbb2852a30181b029e169b58b3cb0f97f0db4fdfdacb79d6b7b953ab7b",
      "entryHash": "1dde5af8579ea187659721b9a4ae64adc07dd91ff440876833d8837b2095edcb"
    },
    {
      "seq": 13,
      "prevHash": "1dde5af8579ea187659721b9a4ae64adc07dd91ff440876833d8837b2095edcb",
      "recordHash": "2bbbdb4170a7b60b2ba35b29ef0abf25c6259ae95e5378f81119d695b534a0a5",
      "entryHash": "8964419862f9b97dff365076f6af543e93f1b29b420e5289d4f361e14dee6411"
    },
    {
      "seq": 14,
      "prevHash": "8964419862f9b97dff365076f6af543e93f1b29b420e5289d4f361e14dee6411",
      "recordHash": "a5f4d2d86a438ac6280b150767bdd8246bd4d1d149aecb058f6fe197bf45e58f",
      "entryHash": "bf276a03cbfc63f3f53725dabd2b7b4ebcd0e6eb76077fa6f64b21706be4492e"
    },
    {
      "seq": 15,
      "prevHash": "bf276a03cbfc63f3f53725dabd2b7b4ebcd0e6eb76077fa6f64b21706be4492e",
      "recordHash": "5016a8c26b69dab4f77852cb54db287186d08ad9602fba394df21c59e118cdca",
      "entryHash": "1973ef2a783b5dc8af53c75321c8ce223f78ced0b306fbd118987160bc7acab9"
    },
    {
      "seq": 16,
      "prevHash": "1973ef2a783b5dc8af53c75321c8ce223f78ced0b306fbd118987160bc7acab9",
      "recordHash": "e4fd9f74659796ad4075792dcc0599896c385a4633e597d429726eb32bc6a2fd",
      "entryHash": "95c228853039902c57cd7f6b0513dea661994bf1d7ab417f39fcf55881c5bf68"
    },
    {
      "seq": 17,
      "prevHash": "95c228853039902c57cd7f6b0513dea661994bf1d7ab417f39fcf55881c5bf68",
      "recordHash": "2c6d49df2f36740eedabbfe90226e0986c19ed8431b0c8ae79122637f5eaaccc",
      "entryHash": "3c21a260d6238f1f85d64fe039a0d69bd24a95ecdb773095b79a6bb646010f73"
    },
    {
      "seq": 18,
      "prevHash": "3c21a260d6238f1f85d64fe039a0d69bd24a95ecdb773095b79a6bb646010f73",
      "recordHash": "bb3ea4aed60c6003878e894fd26c9853b5e204417893c1c6d4bbe5fcb21d061d",
      "entryHash": "384447c949beb65c2cf6c2101eb40010f9e4c131f8d7a6258e2d7f4ee07b693a"
    }
  ],
  "checkpoint": {
    "seq": 18,
    "kind": "checkpoint",
    "record": "{\"day\":\"2026-10-25\",\"entries\":17,\"head\":\"3c21a260d6238f1f85d64fe039a0d69bd24a95ecdb773095b79a6bb646010f73\",\"site\":\"https://upfork.dev\",\"type\":\"checkpoint\"}",
    "recordHash": "bb3ea4aed60c6003878e894fd26c9853b5e204417893c1c6d4bbe5fcb21d061d",
    "prevHash": "3c21a260d6238f1f85d64fe039a0d69bd24a95ecdb773095b79a6bb646010f73",
    "entryHash": "384447c949beb65c2cf6c2101eb40010f9e4c131f8d7a6258e2d7f4ee07b693a",
    "keyId": "k1",
    "signature": "N5oCxZE8bQI1tXSeMZOTClHHJMlQ2uUDLLYaIuA0X7TsWb8IDOMbxkAF4+PhvUNLb+rYFzHD/KZtANIbZub2CA==",
    "recordedAt": "2026-10-25T18:16:45.970459+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "keys": "https://upfork.dev/ledger/keys.json"
}