Receipts.
Every figure on this site is a row here. Each one says where it comes from, the command that reproduces it, the day it was last checked, and its place in the hash chain that seals all 48 . Change one figure and every seal after it stops matching.
- proven
- Someone else can re-run it or read it in a public repo or document.
- documented
- I wrote it down in a repo or a public document, but you cannot re-run it from there.
- my word
- My statement. There is no proof of it in the repository.
Chain root 8c2da25d685457eaf877426524fb0e593452f1b6cd7eb7c18d8177c20d43207c. Re-check it with node scripts/ledger-seal.mjs --check, or with the button below. The one-page summary is the brief.
- 68unit and integration tests
- Source
NitroDB / nitrodb-core/src/test
68 @Test methods counted in the folder. The README reports 0 failures on 2026-06-05.
- Evidence
- NitroDB / nitrodb-core/src/test. @Test methods across the test classes
- NitroDB / docs/Architecture-and-Design.md. Verified Baseline: mvn verify passed
- How to reproduce
In a clone of NitroDB at f86067b:
grep -rhoE "@Test\b" nitrodb-core/src/test | wc -lIt prints 68.
Counts the tests. It does not run them: that needs JDK 25 and Maven (mvn verify).
- Last verified
- , by running the step above
- Chain entry
Entry 0 of the hash chain.
seal 736c98ba4ce607361f79153f8dc3a5e1cf07528bc054b1b5c6a75e6fb06d3e69
after 0000000000000000000000000000000000000000000000000000000000000000
- 42concurrency outcomes checked, 0 failed
- Source
NitroDB / docs/Architecture-and-Design.md, Verified Baseline
Run on 2026-06-05 with scripts/stress.ps1. The suite is in the repo (nitrodb-jcstress); the result is recorded in the doc and I have not re-run it here.
- Evidence
- NitroDB / docs/Architecture-and-Design.md. Verified Baseline, and the verification matrix
- NitroDB / nitrodb-jcstress. the JCStress suite
- How to reproduce
In a clone of NitroDB at f86067b:
grep -n "42 passed, 0 failed" docs/Architecture-and-Design.mdThe output includes 42 passed, 0 failed.
Reads the recorded result. To re-run it: scripts/stress.ps1 with JDK 25 and Maven. Not re-run here.
- Last verified
- , by reading the source
- Chain entry
Entry 1 of the hash chain.
seal 87abc42d268c74a355f58106cf63e35869bc412edc633f5254bbd12f675151c2
after 736c98ba4ce607361f79153f8dc3a5e1cf07528bc054b1b5c6a75e6fb06d3e69
- 2.25Mpoint reads a second in a one-iteration smoke run
- Source
NitroDB / docs/Architecture-and-Design.md, Performance Discussion
One warm-up, one measurement, one fork, Java 25. The doc itself calls these smoke-test results, not a controlled performance study.
- Evidence
- NitroDB / docs/Architecture-and-Design.md. Performance Discussion: ReadBenchmark.pointRead, smoke run on 2026-06-05
- NitroDB / nitrodb-benchmarks
- How to reproduce
In a clone of NitroDB at f86067b:
grep -n "ReadBenchmark.pointRead" docs/Architecture-and-Design.mdThe output includes 2254766.463 ops/s.
Reads the recorded number. The doc calls its results smoke tests, not a performance study.
- Last verified
- , by reading the source
- Chain entry
Entry 2 of the hash chain.
seal 0a31470088637264bab94a5790717257a4d8bfa89807ad9b3050ae99dbcc4c44
after 87abc42d268c74a355f58106cf63e35869bc412edc633f5254bbd12f675151c2
- 1 nodeno replication, no compression, no TTL
- Source
NitroDB / docs/Architecture-and-Design.md, Current Limitations
Stated by the project itself.
- Evidence
- NitroDB / docs/Architecture-and-Design.md. Current Limitations
- How to reproduce
In a clone of NitroDB at f86067b:
grep -n -E "single-node only|no replication|no compression|no TTL" docs/Architecture-and-Design.mdThe output includes no TTL feature.
- Last verified
- , by reading the source
- Chain entry
Entry 3 of the hash chain.
seal 9a618e6c19fa77c0214e8a34bc9dee5d4bc737de4ebbced02db33b2cbcf6a15f
after 0a31470088637264bab94a5790717257a4d8bfa89807ad9b3050ae99dbcc4c44
- 53API route handlers
- Source
AetherScan / backend
Counted @router / @app route decorators in the backend folder.
- Evidence
- AetherScan / backend. route decorators in the backend folder
- How to reproduce
In a clone of AetherScan at 04404e5:
grep -rhoE "@(router|app)\.(get|post|put|delete|patch)\(" backend --include=*.py | wc -lIt prints 53.
- Last verified
- , by running the step above
- Chain entry
Entry 4 of the hash chain.
seal aab82e0d8cdfa57f01b64eb1cb9f3e0b5c0b0adc4a435d8e3af743ba01934277
after 9a618e6c19fa77c0214e8a34bc9dee5d4bc737de4ebbced02db33b2cbcf6a15f
- 11data sources, each with licence, rate limit and how provenance is kept
- Source
AetherScan / docs/DATA_SOURCE_REGISTRY.md
- Evidence
- AetherScan / docs/DATA_SOURCE_REGISTRY.md. one table row per source: licence, rate limit, provenance strategy
- How to reproduce
In a clone of AetherScan at 04404e5:
grep -c '^| \*\*' docs/DATA_SOURCE_REGISTRY.mdIt prints 11.
- Last verified
- , by running the step above
- Chain entry
Entry 5 of the hash chain.
seal 983ea3c87b4a44f2979592397e69415ba56f0d9d1c370934b6f4f0451c1e23be
after aab82e0d8cdfa57f01b64eb1cb9f3e0b5c0b0adc4a435d8e3af743ba01934277
- 12backend test files, each named test_*.py
- Source
AetherScan / backend/tests
12 files named test_*.py. The folder holds 14 Python files; two of them (probe_cdse.py and probe_ogd_earthdata.py) are probe scripts, not tests, so they are not counted.
- Evidence
- AetherScan / backend/tests. test_*.py files; probe_cdse.py and probe_ogd_earthdata.py are probes and are not counted
- How to reproduce
In a clone of AetherScan at 04404e5:
find backend/tests -name "test_*.py" | wc -lIt prints 12.
Counts files. It does not run them: that needs the project's Python environment.
- Last verified
- , by running the step above
- Chain entry
Entry 6 of the hash chain.
seal 916f734a94141fc7ec29d6616908abef014d27d650cc5975ef24be7f36abef72
after 983ea3c87b4a44f2979592397e69415ba56f0d9d1c370934b6f4f0451c1e23be
- 0 speed-upthe quantum module runs on a classical simulator
- Source
AetherScan / docs/LIMITATIONS.md
Stated by the project: no actual quantum speed-up occurs, and the method has not been benchmarked against classical baselines.
- Evidence
- AetherScan / docs/LIMITATIONS.md. Scientific and Quantum Limitations
- AetherScan / backend/quantum/processor.py. builds its backend with qiskit_aer's AerSimulator
- How to reproduce
In a clone of AetherScan at 04404e5:
grep -n "No actual quantum speedup" docs/LIMITATIONS.mdThe output includes No actual quantum speedup occurs.
- Last verified
- , by reading the source
- Chain entry
Entry 7 of the hash chain.
seal 4273e887e6c0e9a76968e51ec0d9e2456ac7dfe987185ee30191b5a75d2f3926
after 916f734a94141fc7ec29d6616908abef014d27d650cc5975ef24be7f36abef72
- 10 to 20%gap between sensors placed side by side
- Source
Pranjal's own observation while reading the data
Not stated in the repository or its docs. The project exists because of this gap, but the figure itself is my word.
- How to reproduce
Nothing to run. This one is my word.
No file in the repository states this range. It is Pranjal's own reading of the data.
- Last verified
- Never. There is nothing to check it against.
- Chain entry
Entry 8 of the hash chain.
seal 6f0b2473fe99fc7c4160d22aa92e923c110dae4d460acbc238568e40270dca1d
after 4273e887e6c0e9a76968e51ec0d9e2456ac7dfe987185ee30191b5a75d2f3926
- 4people on the team, about 1,050 developer-hours, Pranjal as backend lead
- Source
Pranjal's statement
The commit history shows three author names and cannot confirm team size, hours or role.
- How to reproduce
Nothing to run. This one is my word.
git shortlog lists three author names; it cannot confirm team size, hours or role.
- Last verified
- Never. There is nothing to check it against.
- Chain entry
Entry 9 of the hash chain.
seal b0a0f6514a4739492e02fc126c420feb4453fcbf09ef8df697232eb8f9539bd3
after 6f0b2473fe99fc7c4160d22aa92e923c110dae4d460acbc238568e40270dca1d
- 98.1%of the cost increase happened after the click
- Source
Growth Lab / docs/growth_playbook.md, line 52
- Evidence
- Growth-Campaign-Funnel-Intelligence-Lab / docs/growth_playbook.md, line 52
- Growth-Campaign-Funnel-Intelligence-Lab / data/dashboard_data.json. decomposition: cost_gap and conv_effect
- How to reproduce
In a clone of Growth-Campaign-Funnel-Intelligence-Lab at b03de2e:
node -e "const d=require('./data/dashboard_data.json').decomposition;console.log((d.conv_effect/d.cost_gap*100).toFixed(1))"It prints 98.1.
- Last verified
- , by running the step above
- Chain entry
Entry 10 of the hash chain.
seal 9fe9228dc233c3a1974e2a0f832b25b28187cb313abe3fd9c650b4453482f03c
after b0a0f6514a4739492e02fc126c420feb4453fcbf09ef8df697232eb8f9539bd3
- 19.2xmore spend in the larger campaign
- Source
Growth Lab / data/dashboard_data.json
Campaign 1178 spent $55,662.15 against $2,893.37 for campaign 936.
- Evidence
- Growth-Campaign-Funnel-Intelligence-Lab / data/dashboard_data.json. scorecard: total_spend for campaigns 1178 and 936
- How to reproduce
In a clone of Growth-Campaign-Funnel-Intelligence-Lab at b03de2e:
node -e "const s=Object.fromEntries(require('./data/dashboard_data.json').scorecard.map(r=>[r.campaign_id,r.total_spend]));console.log((s[1178]/s[936]).toFixed(1))"It prints 19.2.
- Last verified
- , by running the step above
- Chain entry
Entry 11 of the hash chain.
seal 4d0ed50ff59a47731686862949dc5fd85e6c1a1ea00d62d7b16760870b81d972
after 9fe9228dc233c3a1974e2a0f832b25b28187cb313abe3fd9c650b4453482f03c
- 73.8%drop in post-click approved conversion
- Source
Growth Lab / data/dashboard_data.json
- Evidence
- Growth-Campaign-Funnel-Intelligence-Lab / data/dashboard_data.json. decomposition: click_to_approved_rate for the base and target campaigns
- How to reproduce
In a clone of Growth-Campaign-Funnel-Intelligence-Lab at b03de2e:
node -e "const d=require('./data/dashboard_data.json').decomposition;console.log(((1-d.target_metrics.click_to_approved_rate/d.base_metrics.click_to_approved_rate)*100).toFixed(1))"It prints 73.8.
- Last verified
- , by running the step above
- Chain entry
Entry 12 of the hash chain.
seal 3eeef54d651fed4706e414e5dd12ca60760d0f87b7594e4d19ca77ead2c2cf17
after 4d0ed50ff59a47731686862949dc5fd85e6c1a1ea00d62d7b16760870b81d972
- 44tests
- Source
Growth Lab / tests
44 test_ functions counted.
- How to reproduce
In a clone of Growth-Campaign-Funnel-Intelligence-Lab at b03de2e:
grep -rhoE "def test_" . --include=*.py | wc -lIt prints 44.
Counts test functions. It does not run them.
- Last verified
- , by running the step above
- Chain entry
Entry 13 of the hash chain.
seal 6b6027939f00e6bcc3d444210e1ad0a373eddbf45d7154d190624d8bdd6afbd5
after 3eeef54d651fed4706e414e5dd12ca60760d0f87b7594e4d19ca77ead2c2cf17
- 100%public data, no confidential company figures
- Source
Growth Lab / README, line 59
- How to reproduce
In a clone of Growth-Campaign-Funnel-Intelligence-Lab at b03de2e:
grep -n "100% public datasets" README.mdThe output includes 100% public datasets.
- Last verified
- , by reading the source
- Chain entry
Entry 14 of the hash chain.
seal 96582ebf3e089757f8a884c84f2310209a6375773166d8e4ce2a63efa8f0e572
after 6b6027939f00e6bcc3d444210e1ad0a373eddbf45d7154d190624d8bdd6afbd5
- 11 of 11planted changes caught in a live pass, no false positives
- Source
Migration Guard / README, regression coverage table (line 403)
The README's regression-coverage table records a pass against a dedicated Appwrite Cloud project: each planted change and the exact finding reported. Nobody else can re-run it without that project, so it is documented, not proven. The credential-free fault-injection suite (go test ./lab/...) is a separate, re-runnable check.
- Evidence
- appwrite-migration-guard / README.md. Live verification, regression-coverage row: findings reported, no false positives, no missed findings
- How to reproduce
In a clone of appwrite-migration-guard at 025a554:
grep -n "no false positives, no missed findings" README.mdThe output includes no false positives, no missed findings.
Reads the recorded result. Re-running it needs a dedicated Appwrite Cloud project with the acceptance fixture, which is not public: documented, not proven.
- Last verified
- , by reading the source
- Chain entry
Entry 15 of the hash chain.
seal 91efafef3437e6d9219c5d3ab6daeb940fe71d2e1881d2fc5385a56f311d5782
after 96582ebf3e089757f8a884c84f2310209a6375773166d8e4ce2a63efa8f0e572
- 8commands, all working against live Appwrite Cloud
- Source
Migration Guard / README, status note
- Evidence
- appwrite-migration-guard / README.md. status note: all commands work against live Appwrite Cloud
- appwrite-migration-guard / internal/cli/cli.go. the command table
- How to reproduce
In a clone of appwrite-migration-guard at 025a554:
grep -c '{Name: "' internal/cli/cli.goIt prints 8.
Counts the commands in the code. That they all work against live Appwrite Cloud is the README's statement and was not re-run.
- Last verified
- , by reading the source
- Chain entry
Entry 16 of the hash chain.
seal 5d7d4a1e46e279ee71ccc36e56bee5bdf2eadaab46297455c0902f948b039a1d
after 91efafef3437e6d9219c5d3ab6daeb940fe71d2e1881d2fc5385a56f311d5782
- 0passwords, emails or environment variables collected
- Source
Migration Guard / README, Limitations
- Evidence
- appwrite-migration-guard / README.md. Limitations: never collects or compares a user's email, phone number or prefs
- How to reproduce
In a clone of appwrite-migration-guard at 025a554:
grep -n "never collects or compares" README.mdThe output includes never collects or compares.
- Last verified
- , by reading the source
- Chain entry
Entry 17 of the hash chain.
seal fb52773b70e3b489bb612ba767e4c4f275c5a62f91f8f0797b6a46cbec6e1f6b
after 5d7d4a1e46e279ee71ccc36e56bee5bdf2eadaab46297455c0902f948b039a1d
- pre-alphathe project's own status
- Source
Migration Guard / README, status note
- Evidence
- appwrite-migration-guard / README.md. the status note at the top
- How to reproduce
In a clone of appwrite-migration-guard at 025a554:
grep -n "Status: pre-alpha" README.mdThe output includes Status: pre-alpha.
- Last verified
- , by reading the source
- Chain entry
Entry 18 of the hash chain.
seal 87ae3bf6a028529d7bf14ba0a7b8c10257f941c3812ba27c5d96a631a07979a7
after fb52773b70e3b489bb612ba767e4c4f275c5a62f91f8f0797b6a46cbec6e1f6b
- 31pytest tests
- Source
NeuroTract / tests
31 test_ functions counted.
- Evidence
- How to reproduce
In a clone of Neurotract at 7012ace:
grep -rhoE "def test_" . --include=*.py | wc -lIt prints 31.
Counts test functions. It does not run them.
- Last verified
- , by running the step above
- Chain entry
Entry 19 of the hash chain.
seal 4b7d4e761e417c9c6df0b8d32333602923a68a95e5ace2badfb1bae5dd373365
after 87ae3bf6a028529d7bf14ba0a7b8c10257f941c3812ba27c5d96a631a07979a7
- livejob progress streamed to the browser as server-sent events
- Source
NeuroTract / src/backend/api/server.py, lines 215 to 217
- Evidence
- Neurotract / src/backend/api/server.py. StreamingResponse with media_type text/event-stream
- How to reproduce
In a clone of Neurotract at 7012ace:
grep -n "text/event-stream" src/backend/api/server.pyThe output includes text/event-stream.
- Last verified
- , by reading the source
- Chain entry
Entry 20 of the hash chain.
seal b44b13a6c8db0c98dd065e529053627a356185d69762ebaffc665d41bbb28452
after 4b7d4e761e417c9c6df0b8d32333602923a68a95e5ace2badfb1bae5dd373365
- sha-256dataset checksums stored with every result
- Source
NeuroTract / src/backend/api/server.py, line 776
- Evidence
- Neurotract / src/backend/api/server.py. dataset_checksums passed into the provenance record
- Neurotract / src/backend/data/validator.py. compute_sha256
- How to reproduce
In a clone of Neurotract at 7012ace:
grep -n "dataset_checksums=val_report.checksums_sha256" src/backend/api/server.pyThe output includes dataset_checksums=val_report.checksums_sha256.
- Last verified
- , by reading the source
- Chain entry
Entry 21 of the hash chain.
seal 23fda8ed1f13ffec829bd76574a77bb716d3c14fd16d0b8fba85ff94573890c0
after b44b13a6c8db0c98dd065e529053627a356185d69762ebaffc665d41bbb28452
- 1.81Msamples a second, checked against an analytical answer
- Source
Preprint on ResearchGate
Stated in the preprint. The repository has no benchmark script, so nobody can reproduce the number from it.
- Evidence
- https://www.researchgate.net/publication/395962866. the preprint states the figure; not loadable by a script (HTTP 403)
- spectral-monte-carlo-raytracer / spectral_raytracer.cpp. the program prints MSamples/sec, but no recorded figure is committed
- How to reproduce
Nothing to run. It cannot be reproduced from the repository.
The repository has no benchmark script or recorded run for this figure, so nobody can reproduce it from there. The number is the preprint's.
- Last verified
- Never. No step could confirm it.
- Chain entry
Entry 22 of the hash chain.
seal 8c444f1fdd0f2138f4565aad3d79f69eca6e2785dd1ebbcb418e0cb74d871243
after 23fda8ed1f13ffec829bd76574a77bb716d3c14fd16d0b8fba85ff94573890c0
- BVHbounding-volume hierarchy for ray traversal
- Source
spectral-monte-carlo-raytracer / spectral_raytracer.cpp, class BVHNode
- Evidence
- spectral-monte-carlo-raytracer / spectral_raytracer.cpp. class BVHNode
- How to reproduce
In a clone of spectral-monte-carlo-raytracer at d8fa178:
grep -n "class BVHNode" spectral_raytracer.cppThe output includes class BVHNode.
- Last verified
- , by reading the source
- Chain entry
Entry 23 of the hash chain.
seal d5e4989c84393ee79afe3a5137583d2f30066c43554465401b39c1eea16bcea9
after 8c444f1fdd0f2138f4565aad3d79f69eca6e2785dd1ebbcb418e0cb74d871243
- 12wavelengths sampled from 380 to 780 nm
- Source
Lightweight-Spectro-Geodesic-Explorer / README
- Evidence
- Lightweight-Spectro-Geodesic-Explorer / README.md. feature list
- How to reproduce
In a clone of Lightweight-Spectro-Geodesic-Explorer at 5a22d6c:
grep -n "wavelength sampling" README.mdThe output includes wavelength sampling (380-780nm).
- Last verified
- , by reading the source
- Chain entry
Entry 24 of the hash chain.
seal fec719d4a09bfd0fe459ddb712f6133f1764964ac82dd7e541a1266232206047
after d5e4989c84393ee79afe3a5137583d2f30066c43554465401b39c1eea16bcea9
- 1.2 sto compute on the fast preset of a 12th-gen i5 (the README's table: about 2.1 s on medium, 5.3 s on high)
- Source
Lightweight-Spectro-Geodesic-Explorer / README, Performance Optimization table
The README also says under 2 s in its feature list; its own table shows that holds for the fast preset only.
- Evidence
- Lightweight-Spectro-Geodesic-Explorer / README.md. Performance Optimization table, by preset, on a 12th-gen i5
- How to reproduce
In a clone of Lightweight-Spectro-Geodesic-Explorer at 5a22d6c:
grep -n "Fast preset" README.mdThe output includes ~1.2s.
The README's own measurement on its author's machine; not re-measured here.
- Last verified
- , by reading the source
- Chain entry
Entry 25 of the hash chain.
seal a17671cd7f7ad215b956050f14ae7673983e8c46f2c8e4649768bc160edf435d
after fec719d4a09bfd0fe459ddb712f6133f1764964ac82dd7e541a1266232206047
- 2preprints on ResearchGate about the geodesic tools: the wavelength-resolved explorer and the WebAssembly engine
- Source
ResearchGate, publications 396446428 and 396176848
The WebAssembly engine paper is https://www.researchgate.net/publication/396176848. ResearchGate refuses automated requests (HTTP 403 when this was checked on 2026-10-06), so no script could load the pages; the links are Pranjal's own record: documented, not proven.
- Evidence
- https://www.researchgate.net/publication/396446428. the wavelength-resolved explorer paper; ResearchGate returned HTTP 403 to scripts on 2026-10-06
- https://www.researchgate.net/publication/396176848. the WebAssembly engine paper
- this site / src/content/writing/geodesic-flow-preprint.json
- this site / src/content/writing/geodesic-wasm-preprint.json
- How to reproduce
In this site's repository:
node -e "const fs=require('fs');console.log(fs.readdirSync('src/content/writing').filter(f=>/geodesic/.test(f)&&require('./src/content/writing/'+f).outlet==='ResearchGate preprint').length)"The output includes 2.
Counts the geodesic preprint entries this site records, each with its ResearchGate link. ResearchGate would not load for a script, so the pages themselves were not confirmed.
- Last verified
- , by reading the source
- Chain entry
Entry 26 of the hash chain.
seal f6d2c9e495a71211439164806bc0c6195a9fb8061b41a7774a30a80805d1c7aa
after a17671cd7f7ad215b956050f14ae7673983e8c46f2c8e4649768bc160edf435d
- 4components: core library, service, GUI, CLI
- Source
SecureHost / README.md, Components (items 1 to 4; the optional kernel drivers are a fifth, not installed)
- Evidence
- SecureHost-Control-Suite / README.md. Components: core library, service, GUI client, CLI client; the optional kernel drivers are a fifth
- How to reproduce
In a clone of SecureHost-Control-Suite at 4935c79:
grep -cE "^### [1-4]\. " README.mdIt prints 4.
- Last verified
- , by running the step above
- Chain entry
Entry 27 of the hash chain.
seal 8ab1dd6b5ede164c8148030668a5344213d2c74b7bb62c7961fe807698c4fd75
after f6d2c9e495a71211439164806bc0c6195a9fb8061b41a7774a30a80805d1c7aa
- 3default policy rules
- Source
SecureHost / DEVICE-CONTROL-AND-RESET.md, line 127
- Evidence
- SecureHost-Control-Suite / DEVICE-CONTROL-AND-RESET.md. Step 2: View Current Rules
- How to reproduce
In a clone of SecureHost-Control-Suite at 4935c79:
grep -n "default rules" DEVICE-CONTROL-AND-RESET.mdThe output includes default rules.
A doc statement; the rules are not defined as a list in code that a check could count.
- Last verified
- , by reading the source
- Chain entry
Entry 28 of the hash chain.
seal d3caa909b719275e7592453989ff76606c346cc48614d341a15415f093dbbaa7
after 8ab1dd6b5ede164c8148030668a5344213d2c74b7bb62c7961fe807698c4fd75
- DPAPIpolicy storage encrypted with Windows data protection
- Source
SecureHost / src/core/SecureHostCore/Storage/SecureStorage.cs
- Evidence
- SecureHost-Control-Suite / src/core/SecureHostCore/Storage/SecureStorage.cs. ProtectedData.Protect and Unprotect, which is DPAPI
- How to reproduce
In a clone of SecureHost-Control-Suite at 4935c79:
grep -n "ProtectedData.Protect" src/core/SecureHostCore/Storage/SecureStorage.csThe output includes ProtectedData.Protect.
- Last verified
- , by reading the source
- Chain entry
Entry 29 of the hash chain.
seal 1bf646d27a64ffda83e3b7507500e4d5b663ffd8051323a70dabd349fdd07eea
after d3caa909b719275e7592453989ff76606c346cc48614d341a15415f093dbbaa7
- YjsCRDT library behind the merging (integrated, not written from scratch)
- Source
SyncState / package.json
yjs, y-webrtc and y-indexeddb are the three dependencies that do the syncing and the offline storage.
- Evidence
- syncstate / package.json. dependencies yjs, y-webrtc, y-indexeddb
- How to reproduce
In a clone of syncstate at 6bb4482:
grep -cE '"(yjs|y-webrtc|y-indexeddb)"' package.jsonIt prints 3.
- Last verified
- , by running the step above
- Chain entry
Entry 30 of the hash chain.
seal 4dd92eab5817ce18c7a192f373a4f7a589a9dc16fb9ed52227cc7584ef4a6ce0
after 1bf646d27a64ffda83e3b7507500e4d5b663ffd8051323a70dabd349fdd07eea
- 0automated tests in the repository
- Source
SyncState
A limit, stated on purpose: no test files were found.
- Evidence
- https://github.com/sailwalpranjal/syncstate. no test files in the tracked file list
- How to reproduce
In a clone of syncstate at 6bb4482:
git ls-files | grep -ciE "(\.test\.|\.spec\.|__tests__)" || trueIt prints 0.
- Last verified
- , by running the step above
- Chain entry
Entry 31 of the hash chain.
seal e2a06a95bb8d0d5865100b4dc735659040d3dd79bfc5fa553b72e7d826a99feb
after 4dd92eab5817ce18c7a192f373a4f7a589a9dc16fb9ed52227cc7584ef4a6ce0
- 71certificates: 70 with an online verification link, one with a credential ID only
- Source
/certifications
The PDFs are in the site's public certificates folder.
- Evidence
- this site / src/content/credentials.json. each entry with verifyUrl, except one that has a credential ID only
- /certifications. the PDFs are in public/certificates
- How to reproduce
In this site's repository:
node -e "const c=require('./src/content/credentials.json').certifications;console.log(c.length+' '+c.filter(x=>x.verifyUrl).length)"It prints 71 70.
- Last verified
- , by running the step above
- Chain entry
Entry 32 of the hash chain.
seal d03edfa4787411d7857d4b189e47bd0dc0835f69ae84e34ecfe613538c24c7d9
after e2a06a95bb8d0d5865100b4dc735659040d3dd79bfc5fa553b72e7d826a99feb
- 19of them in project management
- Source
/certifications, filtered by category
- Evidence
- this site / src/content/credentials.json. category project-management
- How to reproduce
In this site's repository:
node -e "console.log(require('./src/content/credentials.json').certifications.filter(x=>x.category==='project-management').length)"It prints 19.
- Last verified
- , by running the step above
- Chain entry
Entry 33 of the hash chain.
seal 76a266fadbc3a36e70eddb22e0f2fa2a21e4a38b5e5bc180da281873e8ab7f61
after d03edfa4787411d7857d4b189e47bd0dc0835f69ae84e34ecfe613538c24c7d9
- B.Tech CSEGraphic Era Hill University, provisional certificate July 2026
- Source
Provisional certificate (personal details blacked out)
The degree itself is awarded at the next convocation.
- Evidence
- this site / public/certificates/provisional-certificate.pdf. a scan with personal details blacked out, dated July 2026
- How to reproduce
In this site's repository:
node -e "console.log(require('fs').existsSync('public/certificates/provisional-certificate.pdf'))"The output includes true.
Confirms the file is published. It is an image scan, so a script cannot read its text; the degree is awarded at the next convocation.
- Last verified
- , by reading the source
- Chain entry
Entry 34 of the hash chain.
seal 1869b1b9c3f02365af47ab87fa7c90c2e1db7c518800389f543cbb823261c7f5
after 76a266fadbc3a36e70eddb22e0f2fa2a21e4a38b5e5bc180da281873e8ab7f61
- 3 monthsPython programming internship at Yantra Byte; the certificate states the duration and a completion date of 1 April 2026
- Source
Internship certificate with a verification code
Certificate number and verification code are printed on the page. The start month is not printed on it.
- Evidence
- this site / public/certificates/Internship@YantraByte.pdf. states Python Programming internship at Yantra Byte, a duration and a completion date
- How to reproduce
In this site's repository:
pdftotext "public/certificates/Internship@YantraByte.pdf" -The output includes Duration: 3 Months.
Needs pdftotext (poppler). The start month is not printed on the certificate.
- Last verified
- , by reading the source
- Chain entry
Entry 35 of the hash chain.
seal 7e52beb86e9eb980d033fcbff33ddf341ba48aa8e02b50e6d7c9786051b8fbc6
after 1869b1b9c3f02365af47ab87fa7c90c2e1db7c518800389f543cbb823261c7f5
- 7.36 / 10CGPA over eight semesters, no backlogs
- Source
Statements of marks, semesters I to VIII, Graphic Era Hill University (provisional; name of parent, enrolment number and QR codes blacked out)
The statements are marked provisional by the university, and the final CGPA is the one printed on the semester VIII sheet. The degree itself is awarded at the next convocation.
- Evidence
- this site / public/certificates/semester-marksheets.pdf. the eight statements of marks with the parent's name, enrolment number and QR codes blacked out; the semester VIII sheet prints the CGPA
- this site / src/content/academics.json. each semester's SGPA and credits, read from those statements
- How to reproduce
In this site's repository:
node -e "const a=require('./src/content/academics.json').semesters;const c=a.reduce((s,x)=>s+x.credits,0);console.log((a.reduce((s,x)=>s+x.sgpa*x.credits,0)/c).toFixed(2))"The output includes 7.36.
Credit-weighted mean of the eight SGPAs in academics.json. It reproduces the CGPA printed on the semester VIII statement, to two decimals.
- Last verified
- , by reading the source
- Chain entry
Entry 36 of the hash chain.
seal 5ebccfc6ba963938e20e9d83728db2c9027e5d5c038a94873799b4df7bb0653a
after 7e52beb86e9eb980d033fcbff33ddf341ba48aa8e02b50e6d7c9786051b8fbc6
- 10parametric surfaces to explore, from sphere to Klein bottle
- Source
Lightweight-Spectro-Geodesic-Explorer / index.html, surface menu
- Evidence
- Lightweight-Spectro-Geodesic-Explorer / index.html. the surface menu
- How to reproduce
In a clone of Lightweight-Spectro-Geodesic-Explorer at 5a22d6c:
grep -c "<option value=" index.htmlIt prints 10.
- Last verified
- , by running the step above
- Chain entry
Entry 37 of the hash chain.
seal 6d74116108018898e5cf9e232eea383a2c0ef2bc59b7de031f4283a01eed652a
after 5ebccfc6ba963938e20e9d83728db2c9027e5d5c038a94873799b4df7bb0653a
- 4preprints on ResearchGate: AetherScan, the wavelength-resolved geodesic paper, the WebAssembly geodesic engine and the spectral path tracer
- Source
ResearchGate, publications 404379263, 396446428, 396176848 and 395962866
The others are https://www.researchgate.net/publication/396446428, https://www.researchgate.net/publication/396176848, https://www.researchgate.net/publication/395962866. ResearchGate refuses automated requests (HTTP 403 when this was checked on 2026-10-06), so no script could load the pages; the links are Pranjal's own record: documented, not proven.
- Evidence
- this site / src/content/writing. four entries whose outlet is ResearchGate preprint
- https://www.researchgate.net/publication/404379263. ResearchGate returned HTTP 403 to scripts on 2026-10-06
- How to reproduce
In this site's repository:
node -e "const fs=require('fs');console.log(fs.readdirSync('src/content/writing').filter(f=>require('./src/content/writing/'+f).outlet==='ResearchGate preprint').length)"The output includes 4.
Counts the entries this site records. The ResearchGate pages themselves were not loadable by a script.
- Last verified
- , by reading the source
- Chain entry
Entry 38 of the hash chain.
seal a66e607de150cd93adbfa879fa0bf5983001b6caf8e1b152200ca8069b6eb123
after 6d74116108018898e5cf9e232eea383a2c0ef2bc59b7de031f4283a01eed652a
- 2dev logs on dev.to, each about why I made a choice
- Source
dev.to / sailwalpranjal
- Evidence
- https://dev.to/sailwalpranjal. the two posts: SyncState and AetherScan
- this site / src/content/writing. the two dev log entries
- How to reproduce
In this site's repository:
curl -s "https://dev.to/api/articles?username=sailwalpranjal&per_page=100"The output includes SyncState: writing together.
Calls the public dev.to API and looks for one post title; the AetherScan post is in the same list.
- Last verified
- , by running the step above
- Chain entry
Entry 39 of the hash chain.
seal d3152ad22a8b83259e2274d54bf761aad771a4ff3bcc6fc3955801a571443bfc
after a66e607de150cd93adbfa879fa0bf5983001b6caf8e1b152200ca8069b6eb123
- 9projects written up, each with its repository linked
- Source
/work
Counted from the project files; scripts/check-claims.mjs fails the build if this number goes stale.
- Evidence
- this site / src/content/projects. one JSON file per project
- How to reproduce
In this site's repository:
ls src/content/projects/*.json | wc -lIt prints 9.
- Last verified
- , by running the step above
- Chain entry
Entry 40 of the hash chain.
seal 542a8fb207c5d211e7ed4c7d4555aa6f9438f8317177cf6f51a9be1d3d606b64
after d3152ad22a8b83259e2274d54bf761aad771a4ff3bcc6fc3955801a571443bfc
- 15documents in its docs folder, from the product brief to the limitations file
- Source
AetherScan / docs
- Evidence
- How to reproduce
In a clone of AetherScan at 04404e5:
ls docs/*.md | wc -lIt prints 15.
- Last verified
- , by running the step above
- Chain entry
Entry 41 of the hash chain.
seal b4cb18068f7db77b332adfb4ead907565405293ed7ef97931ab11f2d22ce5b91
after 542a8fb207c5d211e7ed4c7d4555aa6f9438f8317177cf6f51a9be1d3d606b64
- 3design documents: a blueprint before the code, a verification matrix and an interview guide after
- Source
NitroDB / BluePrint.md and docs/
BluePrint.md at the root, plus Architecture-and-Design.md and Project-Understanding-and-Interview-Guide.md in docs.
- Evidence
- How to reproduce
In a clone of NitroDB at f86067b:
ls BluePrint.md docs/*.md | wc -lIt prints 3.
- Last verified
- , by running the step above
- Chain entry
Entry 42 of the hash chain.
seal bc796806fcd9cfd9b7f8837451ec8f4faa4121ec9226cc849be1d5f093f45130
after b4cb18068f7db77b332adfb4ead907565405293ed7ef97931ab11f2d22ce5b91
- 60,000writes in a recorded run of the real engine, drawn as its own SSTable files on each level, from the first flush to after compaction
- Source
scripts/data/NitroRun.java, run against NitroDB's own classes on 2026-10-05; the recording is src/content/data/nitrodb-run.json
A recording, not the engine running in your browser. It reads the engine's own manifest while it flushes and compacts. The site's repository is not published yet, so the script cannot be re-run from a public place: documented, not proven.
- Evidence
- this site / scripts/data/NitroRun.java. runs NitroDB's own classes and reads the engine's manifest while it flushes and compacts
- this site / src/content/data/nitrodb-run.json. the recording, with the number of writes and the size of each value
- How to reproduce
In this site's repository:
node -e "const r=require('./src/content/data/nitrodb-run.json');console.log(r.writes)"The output includes 60000.
Reads the recording. Re-running the Java script needs the NitroDB build and JDK 17, and this site's repository is not public yet, so it is documented, not proven.
- Last verified
- , by reading the source
- Chain entry
Entry 43 of the hash chain.
seal 8f8e9e8123d592e6c45f3679b399d0c27542f02c81609f7b4025acc3042e8177
after bc796806fcd9cfd9b7f8837451ec8f4faa4121ec9226cc849be1d5f093f45130
- 226characters in the text two Yjs replicas merged to after 40 recorded steps, drawn as two threads that part and then braid. Yjs is the library SyncState builds on
- Source
scripts/data/yjs-run.mjs, which runs Yjs 13.6.33; the recording is src/content/data/yjs-run.json
A recording of the Yjs library, not of SyncState itself. Both replicas ended with the same text, and applying their states in either order gave the same result. Documented, not proven, because the script is not published yet.
- Evidence
- this site / scripts/data/yjs-run.mjs. runs the Yjs library
- this site / src/content/data/yjs-run.json
- How to reproduce
In this site's repository:
node -e "const y=require('./src/content/data/yjs-run.json');console.log(y.finalLength+' '+y.converged+' '+y.orderIndependent)"The output includes 226 true true.
Reads the recording. Running node scripts/data/yjs-run.mjs rebuilt the same recording on 2026-10-06, but this site's repository is not public yet, so it is documented, not proven.
- Last verified
- , by running the step above
- Chain entry
Entry 44 of the hash chain.
seal aae970f195c72e4b459ac3491eccb12ac776d9fd4fc37509a0830f5b3481c963
after 8f8e9e8123d592e6c45f3679b399d0c27542f02c81609f7b4025acc3042e8177
- 366days of Dehradun air quality from a file in my own files (PM2.5 from 5.4 to 155.3), drawn as a skyline that is tall in winter and low in the monsoon. The file states no source
- Source
City_wise_raw_data_1Day_2024_Dehradun_1Day.csv in my files; scripts/data/dehradun.mjs turns it into src/content/data/dehradun-2024.json
Daily readings for 2024. The CSV names a city and a year but no station or agency, so what produced it is not claimed.
- Evidence
- this site / scripts/data/dehradun.mjs. turns the CSV into the JSON
- this site / src/content/data/dehradun-2024.json. daily rows for 2024, with the lowest and highest PM2.5
- How to reproduce
In this site's repository:
node -e "const d=require('./src/content/data/dehradun-2024.json');console.log(d.days+' '+d.pm25.min+' '+d.pm25.max)"The output includes 366 5.42 155.33.
Reads the processed file. The source CSV is in Pranjal's own files and is not published, so it is documented, not proven.
- Last verified
- , by reading the source
- Chain entry
Entry 45 of the hash chain.
seal c35efd9ba27314a191bcc9a90f19609bc2095c59b3ceda7814f8de54f3a0119c
after aae970f195c72e4b459ac3491eccb12ac776d9fd4fc37509a0830f5b3481c963
- 27public repositories drawn as towers, taller for more code, coloured by language, with a bead on those pushed in the month before the latest push
- Source
GitHub, as the API reported it when the site was built (src/content/generated/github.json); two repositories are left off at my request and one fork is skipped
A build-time snapshot of the GitHub API plus two repositories left off at my request and one fork skipped, so a visitor cannot re-derive 27 from GitHub alone. Data-driven forms stay documented until the site's repository is public.
- Evidence
- this site / src/content/generated/github.json. GitHub API snapshot taken at build time
- this site / src/lib/github.ts. the filter: no forks, no archived, two left off
- How to reproduce
In this site's repository:
node -e "const g=require('./src/content/generated/github.json');console.log(g.all.filter(r=>!r.fork&&!r.archived).length-2)"The output includes 27.
Reads the snapshot and takes off the two repositories left out at Pranjal's request. Not derivable from GitHub alone.
- Last verified
- , by reading the source
- Chain entry
Entry 46 of the hash chain.
seal a800e2ff435b8c4a6a08cb36df2c6b894f697fc407df24e58630b8e46dd13fc1
after c35efd9ba27314a191bcc9a90f19609bc2095c59b3ceda7814f8de54f3a0119c
- 48claims sealed in a hash chain: each seal is the SHA-256 of the one before it and the claim itself, and your browser re-checks the whole chain
- Source
scripts/ledger-seal.mjs --check, and the same check running in your browser (src/lib/ledger/verify.ts)
Change any sealed claim and every seal after it stops matching. Proven because anyone can re-run the check and see it fail.
- Evidence
- this site / scripts/ledger-seal.mjs
- this site / src/content/ledger.chain.json
- this site / src/lib/ledger/verify.ts. the same arithmetic in the browser
- this site / tests/ledger/seal.test.mjs
- How to reproduce
In this site's repository:
node scripts/ledger-seal.mjs --checkThe output includes ledger seal ok.
Re-seals the claims in memory and compares with the file on disk; change any sealed figure and it fails.
- Last verified
- , by running the step above
- Chain entry
Entry 47 of the hash chain.
seal 03677947c3ceaf876db38517bf04b9dc944add6a36ed0ce1ca2fb386b3d9a2da
after a800e2ff435b8c4a6a08cb36df2c6b894f697fc407df24e58630b8e46dd13fc1
- 185credits earned across eight semesters, every subject passed
- Source
Statements of marks, semesters I to VIII (credits registered equal credits earned in each)
22 + 22 + 27 + 28 + 26 + 25 + 19 + 16.
- Evidence
- this site / public/certificates/semester-marksheets.pdf. credits registered equal credits earned on every statement
- How to reproduce
In this site's repository:
node -e "console.log(require('./src/content/academics.json').semesters.reduce((s,x)=>s+x.credits,0))"The output includes 185.
Sum of the credits earned per semester in academics.json.
- Last verified
- , by reading the source
- Chain entry
Entry 48 of the hash chain.
seal 8c2da25d685457eaf877426524fb0e593452f1b6cd7eb7c18d8177c20d43207c
after 03677947c3ceaf876db38517bf04b9dc944add6a36ed0ce1ca2fb386b3d9a2da
Found a number that doesn't add up? Write to me.