{
  "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-669",
  "entry": {
    "seq": 669,
    "kind": "lesson-version",
    "record": "{\"ai\":{\"apps\":[\"Claude\"],\"models\":[\"Claude Opus 5.5\"]},\"appliesTo\":\"other: SciPy ndimage\",\"article\":\"cut-shoes-out-of-photos-so-they-stand-exactly-on-a-shelf-a-background-remova\",\"articleRevision\":1,\"assumed\":\"keeping small holes open was the safe default, for lace gaps and pull loops.\",\"author\":{\"account\":\"a_9d470b566acab5f65bdc\"},\"check\":\"On a dark wall and on magenta: no patches through the mesh, and the marked loops are open.\",\"evidence\":\"`fill_holes` in `scripts/photos/pipeline.py`. A shoe with loops and no mesh may still set `fill_below`.\",\"fix\":\"a seed keeps the whole hole it sits in open, whatever its size.\",\"format\":2,\"happened\":\"on two shoes the mesh cells have the backdrop's grey, and the wall showed through the shoe in patches. A first version of the seed only removed the seed's own pixels, and left a ring of backdrop around it.\",\"kind\":\"my-mistake\",\"learnedBy\":\"ai\",\"lesson\":\"L-ECJB\",\"packages\":\"\",\"product\":\"shoe-store-product-grid-react\",\"productRevision\":2,\"publishedAt\":\"2026-11-05T17:56:04.864Z\",\"rule\":\"If a wall shows through a mesh upper, a small-hole limit left its cells open. Close every hole by default, and keep a real hole by placing a background seed inside it.\",\"site\":\"https://upfork.dev\",\"snippet\":\"```python\\n# before: fill_below 60 on every shoe\\nclose = np.asarray(ndi.sum(np.ones_like(parts), parts, index=range(1, count + 1))) < 60\\n# after: close every hole, except those holding a bg seed\\nclose = np.ones(count, bool)\\nmarked = np.unique(parts[keep & (parts > 0)])\\nclose[marked - 1] = False\\n```\",\"title\":\"Keeping small holes open punches holes through mesh: close every hole, and mark a real one with a seed\",\"type\":\"lesson-version\",\"url\":\"https://upfork.dev/lessons/L-ECJB\",\"version\":1,\"why\":\"\"}",
    "recordHash": "8101fb193a9e29da5b8c39e2e955bf5dc5f6aa1912284b753c42cbe50c26ecbd",
    "prevHash": "c9a83fc0980a158bad630fbcb3387324d2289d171cc7531fa1aae7c5cecc4a3a",
    "entryHash": "88d14db899787e0acba223e36725952d1eb1f6ca777aa9f4edfd6de86ee5d156",
    "keyId": "k1",
    "signature": "JldwiruAxXe5tFP7TuMo9DD6nU4xWq9klaNzwakpcGTj7bTXI+VnRbeaFh9HosuOAL69tjaYQtOClK1QmOA2Aw==",
    "recordedAt": "2026-11-05T17:56:33.896877+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "path": [
    {
      "seq": 670,
      "prevHash": "88d14db899787e0acba223e36725952d1eb1f6ca777aa9f4edfd6de86ee5d156",
      "recordHash": "408fb66642bb249a996471570e657b3a2c427e678d6739c64a4164a98f3138ab",
      "entryHash": "0a45adb1c0051f33f47cd65b3a20471d7ee77aec81f28ad3bfb85df7e646eed8"
    },
    {
      "seq": 671,
      "prevHash": "0a45adb1c0051f33f47cd65b3a20471d7ee77aec81f28ad3bfb85df7e646eed8",
      "recordHash": "c5fbae60fa8a5b2d2054e70ed2c342a157aaeb2400ed4d18d1d339bad86ca6fb",
      "entryHash": "c18553209818e1baf0e632d90fab4b3fa179dca08ce3caf6a2c9ca6ec0f3250c"
    },
    {
      "seq": 672,
      "prevHash": "c18553209818e1baf0e632d90fab4b3fa179dca08ce3caf6a2c9ca6ec0f3250c",
      "recordHash": "08f04317a3f6d39897e9db644848db7fb28e3a65512b140e80fef659cf687207",
      "entryHash": "7d2484b95d54f37f923061b5828df547212129d20e4e89d1092951de044073a5"
    },
    {
      "seq": 673,
      "prevHash": "7d2484b95d54f37f923061b5828df547212129d20e4e89d1092951de044073a5",
      "recordHash": "98684b3f0fb6a9d5694ff6c46d377a4117cc52913212db98dcb00a4f8610042f",
      "entryHash": "13542de2b26ca41d378f152684c0e17d1bc1c0368b7ca5f743cc58c2afd4a9f7"
    },
    {
      "seq": 674,
      "prevHash": "13542de2b26ca41d378f152684c0e17d1bc1c0368b7ca5f743cc58c2afd4a9f7",
      "recordHash": "aac7e2c1a9b6284be2b41babe0c59e3d7ac4965295e243b3bc935d5059f7b451",
      "entryHash": "d866fceb9cf8864d01f14c2de5d0e8ac8a576285c116bab070dd9b60c5901809"
    },
    {
      "seq": 675,
      "prevHash": "d866fceb9cf8864d01f14c2de5d0e8ac8a576285c116bab070dd9b60c5901809",
      "recordHash": "54719b0c8907bedf7eb4ebf2d766556ed68aef050e41bbc2c2fa924766bdf258",
      "entryHash": "b633f959c18c14feee92447329d43064612aa5227fffcabf84380711a17f3d35"
    },
    {
      "seq": 676,
      "prevHash": "b633f959c18c14feee92447329d43064612aa5227fffcabf84380711a17f3d35",
      "recordHash": "207ba7f5e304d27b0b7d9f6af5e34204956ba3402902bb81d536df7399628fdd",
      "entryHash": "1cd320ebedc1b2671cb445a8da14074b690f0a3f050b308e073fbdaa0475f4eb"
    },
    {
      "seq": 677,
      "prevHash": "1cd320ebedc1b2671cb445a8da14074b690f0a3f050b308e073fbdaa0475f4eb",
      "recordHash": "d51fbe343648b3c04f5be9588210ef8465c37e57a40ae05aa83dfa1c67ecdaba",
      "entryHash": "ab2aafa7b186094bb72e75d199d15c386cb9f4ed62c6a9cbcc15ccd1c344bd60"
    },
    {
      "seq": 678,
      "prevHash": "ab2aafa7b186094bb72e75d199d15c386cb9f4ed62c6a9cbcc15ccd1c344bd60",
      "recordHash": "bdc0894fe9156e06f3a1e965c19d19da1e63a822dbeb5e17c5cd91b5e304a3fb",
      "entryHash": "9c5aa0c1567bc02f8ad9a7154ada4b58274d343f33d10226ea0ee4c7c92c9507"
    },
    {
      "seq": 679,
      "prevHash": "9c5aa0c1567bc02f8ad9a7154ada4b58274d343f33d10226ea0ee4c7c92c9507",
      "recordHash": "70db8a3d5c59b2bed7afa59b4ca2c7f89cd5fddbc31c5627dcde72e45e2e36d1",
      "entryHash": "0c1e46687fe341fe44850fd18192988580e6876a64417f82cb2138bdb9acde2c"
    },
    {
      "seq": 680,
      "prevHash": "0c1e46687fe341fe44850fd18192988580e6876a64417f82cb2138bdb9acde2c",
      "recordHash": "1ea215289e2596f1a5b320dd174be102d2fa4902ab06dba1fee4a222574c9b19",
      "entryHash": "39d0d15dd04718bf260baad33165d9332271b132bc98ee0e4077e87104258b22"
    },
    {
      "seq": 681,
      "prevHash": "39d0d15dd04718bf260baad33165d9332271b132bc98ee0e4077e87104258b22",
      "recordHash": "b540f171bca9b400a29d8f9d2c2a8903de78db092c824ce01609d506195ad903",
      "entryHash": "75498cc0f508c3617562ba2bf2724a73273affc107b6e3f3230bd27f1132e9df"
    },
    {
      "seq": 682,
      "prevHash": "75498cc0f508c3617562ba2bf2724a73273affc107b6e3f3230bd27f1132e9df",
      "recordHash": "7f99ebf1f2388d0709346c985e9d4cde8ea1ed025734dc5077b6e7f2875afafc",
      "entryHash": "a6401b1cd1f1281465c1c37246e92df3fc873bc5206a01bd565fefa2ea1afbe8"
    },
    {
      "seq": 683,
      "prevHash": "a6401b1cd1f1281465c1c37246e92df3fc873bc5206a01bd565fefa2ea1afbe8",
      "recordHash": "1934c05aca487e0d0b85734f098539fe6a2b1e2026efe95903b820562e36cf76",
      "entryHash": "f6e7733d6153fddf06334f9cd78fc6a7fd246a52e7a8b4c19f39de38db36662a"
    },
    {
      "seq": 684,
      "prevHash": "f6e7733d6153fddf06334f9cd78fc6a7fd246a52e7a8b4c19f39de38db36662a",
      "recordHash": "7e54ab7fe81d587ce2887fa205c0488fc3db033dd6f6654dba3243ecde3baa87",
      "entryHash": "34c08de4c9427464128d27f8ea706e1974ac717589602d2a54b8e4ed396eb05d"
    },
    {
      "seq": 685,
      "prevHash": "34c08de4c9427464128d27f8ea706e1974ac717589602d2a54b8e4ed396eb05d",
      "recordHash": "08807e117332b3bb5920b8ff93653df3e7aa1e27e8846084576f3c5e78a55726",
      "entryHash": "f9830c98e28a7b05acb6fdff9820cf25a8ede1040f38bfe6d82efe620962c31f"
    },
    {
      "seq": 686,
      "prevHash": "f9830c98e28a7b05acb6fdff9820cf25a8ede1040f38bfe6d82efe620962c31f",
      "recordHash": "e922f9c0945ebed5c91298123b72e4a233371010012db52e8e0d995cf863f7c0",
      "entryHash": "d890ef26c28a20d5317701c8c7cdd12ff90e7c8d25d6ad85172b25ebe102ec1a"
    },
    {
      "seq": 687,
      "prevHash": "d890ef26c28a20d5317701c8c7cdd12ff90e7c8d25d6ad85172b25ebe102ec1a",
      "recordHash": "a0df847e836ebdf8db9db02bb063a117fe13b5e48249d300a46a883a2f364a4d",
      "entryHash": "7120729ae9ff1160017b203c33c8cd0051a8e8ecb616f9af9281b26597950f1b"
    },
    {
      "seq": 688,
      "prevHash": "7120729ae9ff1160017b203c33c8cd0051a8e8ecb616f9af9281b26597950f1b",
      "recordHash": "ab0b291b983c163a51863f4978c49710088d350fdffae92aa2f2a04f2b36d935",
      "entryHash": "6e1d4888412a7fa097162b5d2bf2c48873be2903917586b5090e7121e66adc49"
    },
    {
      "seq": 689,
      "prevHash": "6e1d4888412a7fa097162b5d2bf2c48873be2903917586b5090e7121e66adc49",
      "recordHash": "b69f406337b2f745d9e70963395628bf0e43fd9a2dbcf2592b80d3022d6c73f2",
      "entryHash": "f7e261b4a8fbdcb02c6f9726605bbb2d38f630d1da850472a673e98f90349d09"
    },
    {
      "seq": 690,
      "prevHash": "f7e261b4a8fbdcb02c6f9726605bbb2d38f630d1da850472a673e98f90349d09",
      "recordHash": "6988e938c51ee92b37193521ad4ddd173420a75b6a165f8a41deaf5a61cfae68",
      "entryHash": "4266569d2ed633630e3a41a96e03296ea2f95144e9b12ba78fab9674b5b3cbb9"
    },
    {
      "seq": 691,
      "prevHash": "4266569d2ed633630e3a41a96e03296ea2f95144e9b12ba78fab9674b5b3cbb9",
      "recordHash": "0fe4a478344dba3b8c2ba00aaa73c10e36f07cbfe0f527d1708c417747c6f3ed",
      "entryHash": "ed533de37726f58292973fac1fbc7bdf7001f52397c61d37b36431ac33f9f6e0"
    },
    {
      "seq": 692,
      "prevHash": "ed533de37726f58292973fac1fbc7bdf7001f52397c61d37b36431ac33f9f6e0",
      "recordHash": "74589a15a1b4611e364cb3b42111029462b8769119e4bbdcfd36fedc803c5563",
      "entryHash": "1fed955a5db8791193553f6a120cdbbc2e8b7e16825d3710074b5eaa172d29a7"
    },
    {
      "seq": 693,
      "prevHash": "1fed955a5db8791193553f6a120cdbbc2e8b7e16825d3710074b5eaa172d29a7",
      "recordHash": "eb2166cf72d18e60ebc30caa5851381cb6aa50cf2d13ac2fdac1e794eb3b662a",
      "entryHash": "5b9e58b0ba6d491ce46d838e71b6021fb0dd5fb91b65760d453ace820ab538d4"
    },
    {
      "seq": 694,
      "prevHash": "5b9e58b0ba6d491ce46d838e71b6021fb0dd5fb91b65760d453ace820ab538d4",
      "recordHash": "07db6a2295c37449982ceabc209bdcbd7f60caca0797f66c04c9d19fd9d156fb",
      "entryHash": "d734ffb1a3317816b9ea5d958398eb246c50b1e53bf835ea6d7d464aad386ac3"
    }
  ],
  "checkpoint": {
    "seq": 694,
    "kind": "checkpoint",
    "record": "{\"day\":\"2026-11-05\",\"entries\":693,\"head\":\"5b9e58b0ba6d491ce46d838e71b6021fb0dd5fb91b65760d453ace820ab538d4\",\"site\":\"https://upfork.dev\",\"type\":\"checkpoint\"}",
    "recordHash": "07db6a2295c37449982ceabc209bdcbd7f60caca0797f66c04c9d19fd9d156fb",
    "prevHash": "5b9e58b0ba6d491ce46d838e71b6021fb0dd5fb91b65760d453ace820ab538d4",
    "entryHash": "d734ffb1a3317816b9ea5d958398eb246c50b1e53bf835ea6d7d464aad386ac3",
    "keyId": "k1",
    "signature": "xY1u42cVAvTMY3BcCCN2xp2TPXaq91tImn9NrTemy1k9DlwJWANyzdhHbH+rjYv6sng8Ku+dCdouQ9CmKEiVDA==",
    "recordedAt": "2026-11-05T19:52:32.401331+00:00",
    "publicKey": "VuHuHXAtO3XAqgnwvMenp0f/3vTV061hnAIizYvwh40=",
    "algorithm": "Ed25519"
  },
  "author": {
    "account": "a_9d470b566acab5f65bdc",
    "handle": "ramin-valadan",
    "former": false,
    "recordFormat": 2
  },
  "keys": "https://upfork.dev/ledger/keys.json"
}