SHELFPIN PUBLIC PROOF CHAIN Every night we take a SHA-256 fingerprint of the whole archive of shelf records and chain it to the night before. Each line's chain_hash is sha256( prev + archive_digest + ts ). Change any past line of this file and every line after it stops matching -- anyone holding an earlier copy of this file can see it, and the command below will return False. The archive the digests describe is private. This file fixes the chain, and the date each digest was committed -- not the contents of the archive. An outsider cannot recompute a digest without the data. A tool that checks a brand's own emailed record against the archive is on the roadmap and not yet built. Latest fingerprint : 2026-10-27T03:30:06Z (UTC) — fingerprints are taken at 09:00 IST each morning, after the 7am emails go out, so every number a brand received is inside that morning's fingerprint. Nights on chain : 39 (plus 1 annotation line) Files in archive : 4805 Latest chain hash : ffc22221fd1879d8840c41db2a38ea293abe819e3af7d13b86191a77a3db0cc3 ONE LINE PER NIGHT (oldest first) date fingerprinted_at_utc files chain_hash previous 2026-09-19 2026-09-19T15:02:51Z 469 d697fb9314e117e24fde9ebb7373f9c4cbd7072d80e5a44f795fb52ff2cd9a79 GENESIS 2026-09-20 2026-09-20T03:30:03Z 582 750f35bcc7d086432c83a211bce5063c71ec6501d748f4a0c2e5899e629a5362 d697fb9314e1 2026-09-20 2026-09-20T11:35:41Z NOTE 2f2e753b149beb8f6ae7402424a605ca4c8382c7d49956d3a5a5c3613b4fd34b 750f35bcc7d0 ↳ annotation on 2026-09-20: Archive digest for 2026-09-20 does not reproduce. Between 09:30 and 11:30 UTC on 20 Sep, operator test runs overwrote data/outbox/20260920.json and data/reviews/20260920.json and added two operational files, all after that night was notarized at 03:30 UTC. No client scan capture was altered: data/ecosys/*.json, the category census and the ad census are byte-identical with original timestamps, and no emailed number changed. Cause was testing, not alteration of evidence. Shadow runs and bookkeeping now write outside data/. Full account: notes/INTEGRITY_20260920.md. 2026-09-21 2026-09-21T03:30:02Z 667 c33ec1652f1898ce257d821805b42f0f2a350892590e97abaac7daf4798493cf 2f2e753b149b 2026-09-22 2026-09-22T03:30:01Z 833 de02a81bbcdd5cad9200990ef2cffceff736d594b1ea74b409b0d2a2781b209a c33ec1652f18 2026-09-23 2026-09-23T03:30:03Z 961 b810a7491382d69723deb9283d2f1d56bc72649e1a5640719a72afc7f7f3e116 de02a81bbcdd 2026-09-24 2026-09-24T03:30:02Z 1100 fc3483925b07adf65191caea05b7b8a1d06702d804cb3229915cb1a7947cf223 b810a7491382 2026-09-25 2026-09-25T03:30:02Z 1218 b276f68507a3fdf327650794fddcee60c159a6e0d169959ebe218af7c5c5f978 fc3483925b07 2026-09-26 2026-09-26T03:30:02Z 1369 eebf077c5cc54040b82a401fb066ddcc8d86a100b8b8603d04577c9825e6c15c b276f68507a3 2026-09-27 2026-09-27T03:30:02Z 1490 8a64ab9313aa7207e5c3a65882dddab83da27be5b49666619ad4a2e4f60c7505 eebf077c5cc5 2026-09-28 2026-09-28T03:30:02Z 1614 a277ff8807fcc8d0c2d7d0cddadbd2f8ca4b8e52b4f2f256f582c65933f5d6c7 8a64ab9313aa 2026-09-29 2026-09-29T03:30:05Z 1737 1abf23f0d3d1b224fe218c69197f4c5db582c3670ac1177193ec4edd416e4d45 a277ff8807fc 2026-09-30 2026-09-30T03:30:02Z 1859 a83ec92f32160a3a5a5a17bc579f05fa74b14bcf5b606caadf970d69ba94287e 1abf23f0d3d1 2026-10-01 2026-10-01T03:30:02Z 1992 6145cda9cacc7281e0a1511ab2641e61193044b8bd9168e5eb9359eeb419d27b a83ec92f3216 2026-10-02 2026-10-02T03:30:04Z 2113 7af7f0cb4b3702a6b1b7c38adddacc18cd01ca6adcbb27376eaab6ecdfe93f59 6145cda9cacc 2026-10-03 2026-10-03T03:30:03Z 2238 5322f2d8931ef5e56d3b8cff8b950f198b090c2efe613266177d3617a53cb30e 7af7f0cb4b37 2026-10-04 2026-10-04T03:30:04Z 2356 0ad4b701c1a354de07f30c4b71eda4433e4b5f9b806b6e16c152706cf5027a53 5322f2d8931e 2026-10-05 2026-10-05T03:30:04Z 2473 0f25af2d8b648aac4264c294538aa98324276a44b8a23d1728875870d296d839 0ad4b701c1a3 2026-10-06 2026-10-06T03:30:03Z 2596 ab4f2ec724b2bf09f3f18c022eaa9299f9b375b524c9c45455b2e91f970e9986 0f25af2d8b64 2026-10-07 2026-10-07T03:30:03Z 2726 483f099b6bf28c08641d32d7795c03bdf90998324aed0fde120b6537cc2123f5 ab4f2ec724b2 2026-10-08 2026-10-08T03:30:04Z 2835 d8aa2438310819597601f9a88da36c7a3f759eb0c763108aa6fedc32343b23d3 483f099b6bf2 2026-10-09 2026-10-09T03:30:04Z 2967 6b7bf8742afe71ad92f132a2673c282063bdecfefb1c112b58847cec148f92bd d8aa24383108 2026-10-10 2026-10-10T03:30:04Z 3095 68759c9e31fe66ddc148694d322a9b50b59b4a9d126616222253e9ca927ec962 6b7bf8742afe 2026-10-11 2026-10-11T03:30:03Z 3208 ad7b75016dc99093a9e69cc8b1b30b0f819797220ae7bbe165fed8e7c906c118 68759c9e31fe 2026-10-12 2026-10-12T03:30:04Z 3331 ac5c0d6b2299005c6db5cc97a09c6e1a2e58945a15c7fdb7933927b20d7d933d ad7b75016dc9 2026-10-13 2026-10-13T03:30:05Z 3445 e2839ea94384d3e35598282a9309bd6c3385588ec44c3afafa20f242721bbf5d ac5c0d6b2299 2026-10-14 2026-10-14T03:30:05Z 3563 47744b7831713a684a0f0456f5d798b83c678ce6e03ec438e4a969c1fec70b69 e2839ea94384 2026-10-15 2026-10-15T03:30:04Z 3663 e1182d14f1a47323585414d0a094fe46778cc7c6a8cb1c4c834f58c3458599ad 47744b783171 2026-10-16 2026-10-16T03:30:05Z 3775 03d9e57bf1431d3937436a6e7a64422e9b9b90a72dfb16a360213c9e6db0a2ab e1182d14f1a4 2026-10-17 2026-10-17T03:30:03Z 3862 e78d0702138f1d502176fc0f614d784918282d1b36ac0843cf0cf0d20ffb4b3a 03d9e57bf143 2026-10-18 2026-10-18T03:30:04Z 3865 9b18b0df8c570747553e30df46d3564c6a47ee62368a601376cae6f3e5eea4b8 e78d0702138f 2026-10-19 2026-10-19T03:30:04Z 3868 f102b191511b9e1605cb8947d4f995ae55faa1614ecaecb3f3a61560295726a2 9b18b0df8c57 2026-10-20 2026-10-20T03:30:05Z 3967 b0334957480e3d8d7f47ce1da398c6d8420f6dc9c20d4581fd1e50c8918ecdae f102b191511b 2026-10-21 2026-10-21T03:30:05Z 4081 2ce1b39d23cfeca33e3977ef166e6871dbd29e86c7c0cb86e942fdb9a7930190 b0334957480e 2026-10-22 2026-10-22T03:30:05Z 4204 4f5be97245ecafcb01eb1fbc50fd0f86f9e9cf6bffaf2be540c284d30617343a 2ce1b39d23cf 2026-10-23 2026-10-23T03:30:05Z 4326 ca68dc61efaa2e02b3fed4a45dd99548a69e9a0f671a6c9727f10fc18e069abb 4f5be97245ec 2026-10-24 2026-10-24T03:30:06Z 4444 2cfae84bbaf18380f3a3af233b58a0ed4db7ac7b773e176007bf8ae348566989 ca68dc61efaa 2026-10-25 2026-10-25T03:30:06Z 4569 c127c37d3e3711a1ac1524bd9971a3adcda888127a297fba2fc69f381650491c 2cfae84bbaf1 2026-10-26 2026-10-26T03:30:05Z 4683 06c44fa15116b66c38c640a5764148d7d47a93d9ee7fa01507c45f9c45dcdb9f c127c37d3e37 2026-10-27 2026-10-27T03:30:06Z 4805 ffc22221fd1879d8840c41db2a38ea293abe819e3af7d13b86191a77a3db0cc3 06c44fa15116 HOW TO CHECK IT YOURSELF Machine-readable copy of the same chain: https://shelfpin.in/ledger.jsonl (one JSON object per night: date, ts, files, archive_digest, prev, chain_hash). Lines marked NOTE are annotations: append-only corrections about an earlier night. A past line is never edited; a note is added after it and chained like any other entry. Each night's chain_hash = sha256( prev + archive_digest + ts ). Recompute it for every line; every 'prev' must equal the chain_hash of the line above. Python: python3 -c "import json,hashlib,urllib.request;R=[json.loads(l) for l in urllib.request.urlopen('https://shelfpin.in/ledger.jsonl').read().decode().splitlines() if l.strip()];print(all(hashlib.sha256((r['prev']+r['archive_digest']+r['ts']).encode()).hexdigest()==r['chain_hash'] and (i==0 or r['prev']==R[i-1]['chain_hash']) for i,r in enumerate(R)))" WHAT THIS PROVES, AND WHAT IT DOES NOT It proves the order of the nights and that no record was altered after its fingerprint was published. It does not, by itself, prove what a record says: the archive holds shopper-facing shelf captures, and brand-level detail goes to that brand, not to this page. A brand can check its own emailed record against the archive fingerprint on request. Independent, not affiliated with Blinkit or any platform. hello@shelfpin.in