Nandit Vaish

Notebook 02 · July – August 2026

A machine for finding the question

Most research tooling helps you test a hypothesis. Almost none of it helps you find one worth testing. This is an attempt at the second thing, pointed at India from orbit — and then pointed at itself.

2.85 Mrows · 318,706 cells8layers on one join key4bugs caught before they became findings19 TBreduced to 242 MB
0125 July 2026, 21:01

Hour zero: one pixel, three formulas

Before any data was pulled, one tile over Delhi was read and three de-quantisation formulas were tested against it. The obvious one — linear — produces vectors with a norm of about 2.5. The square law produces 1.0001, which is what a unit-sphere embedding is supposed to give.

The rule

The discipline arrived before the data did. Had we scaled first and checked later, every number downstream would have been wrong and plausible.

0225 July 2026, 21:25

The national pull

Eleven thousand seven hundred and forty-nine tiles, nine years, fifty-one minutes. Read directly from cloud storage rather than downloaded, and sampled from the overview pyramid rather than at full resolution — nineteen terabytes of source becomes 242 megabytes by choosing the right level.

The rule

Resolution is a decision, not a constraint. Most of the cost of a large dataset is spent before anyone asks how much detail the question needs.

Every layer below is drawn from the same 318,706 cells. Switch between them — the country is the same, only the question changes:

India rendered by changeIndia rendered by built-upIndia rendered by land typesIndia rendered by populationIndia rendered by rainfallIndia rendered by elevation

Cosine distance between each cell’s fingerprint this year and last. Bright means the surface changed. This is the layer we built the whole instrument to produce — and the one the referee later showed measures volatility rather than development.

The faint curved seams across the north are a known-open bug in the UTM zone joins. They are disclosed in the data dictionary and left visible here rather than retouched out.

0326 July 2026, 00:17

A second domain, the same night

Three hours after the first grid finished, we pointed the same method at something with nothing in common with satellites: NASA’s battery ageing corpus. Thirty-six gigabytes from public storage — not the convenient mirror, which silently drops the impedance cycles. A MATLAB struct-array became five normalised tables and 7.28 million rows, and the data dictionary was written before any analysis ran.

The rule

A research OS that only works on one dataset is a project. Proving it on an alien domain is what makes it an OS.

0427 July 2026

Four connectors, two bugs

Population, elevation, districts and built-up area were joined onto the grid. Two bugs came out of it, and both are the dangerous kind, because both produce numbers that look entirely reasonable.

A negative window offset shifted the whole population raster by 239 rows. Delhi came back at 263 people per square kilometre instead of 23,452 — wrong by two orders of magnitude, and still a number you could put in a table without anyone blinking.

Summing counts over overlapping sample boxes gave India 1.75 billion people instead of 1.34 billion. Correct arithmetic on a wrong assumption: with overlapping windows you must take the mean, not the sum.

India rendered by population density
The population layer, read correctly. This is the plate that came back with Delhi at 263 people per square kilometre the first time — and it looked fine. Nothing about a shifted raster announces itself; the coastline still traces, the Gangetic plain is still bright. Only the cross-check against the census caught it.
The rule

The bugs that matter do not crash. They return a plausible number, and the only defence is an external cross-check — total land area against the published figure, total population against the census.

0529 July 2026

The dashboard, and its danger

A hundred and thirty-two megabytes of binary layers, twelve views, a year slider with playback. It is the prettiest thing in the project and the least load-bearing. It looks like an answer.

India rendered as twelve land-type clusters
Twelve land types, clustered over the embedding. This is the view that does the most damage — it is beautiful, it is obviously structured, and structure is exactly what a person goes looking for. Six weeks later the referee showed that the layer underneath it cannot detect the thing we built it to detect.
The rule

A dashboard is a claim with the evidence removed. Everything on this one was true and none of it had been tested, and for a month nobody noticed the difference — including us.

Open the explorer →
0621 August 2026, 01:18

The referee night

A month after the instrument was finished, we turned it on our own results. Three hypotheses, three kills, each one chained to the last.

Rainfall drives land-surface change. Dead — a calendar artifact. A national year effect swings mean drift by 2.3×, and the two dry years happen to be the two lowest-drift years.

Fine, but the swing itself is real. Dead — the ordering is inverted. Water drifts 2.11× and desert 1.88× against cropland, while built-up land drifts 0.74×. Construction makes land stiller.

Fine, but it still detects real change. Dead — matched against an independent forest-loss dataset, the detector scores an AUC of 0.486. That is worse than a coin.

The rule

Each kill was the referee check on the previous one. Three rounds of “fine, but” is what an honest retreat looks like written down.

0721 August 2026, 02:14

Five pre-registered questions

Predictions written in code before the test ran. Two killed, two partial, one answered.

The humiliating one: a baseline of “where it grew before, it grows again” predicts construction at an AUC of 0.977. The satellite embedding manages 0.60. A single lag of the target beats the entire sixty-four-dimensional apparatus by a distance.

The rule

A trivial baseline is not a formality. Run it first, or you will spend a month measuring something a single lagged variable already knew.

08

What survived

Rainfall volatility moves the land surface at a rank correlation of 0.357 against a null of 0.000. Rainfall level does not. Those are different claims and only one of them holds.

India’s built-up growth is a fringe phenomenon: 74.6% of 2015–20 growth landed on cells that were already between 0.5% and 5% built, up from 60.2% in the 1990s. It is the one clean positive result in the project, and it uses no embeddings at all.

Press play. Thirty-five years of building, on one fixed colour scale so the growth is real rather than a rescaling artifact:

India, built-up area, 1990India, built-up area, 2000India, built-up area, 2010India, built-up area, 2015India, built-up area, 2020India, built-up area, 20251990

Built-up fraction, 1990 to 2025. Watch the corridors thicken between the cities rather than the city centres themselves getting brighter — that is the fringe result, visible without a single statistic.

The rule

The reframe worth the month: the instrument measures surface volatility, not development. That is a real thing to have built. It is simply not the thing we set out to build, and saying so is cheaper than defending it.

Flagged, not resolved

The repository has a verbal tic that turned out to be its best quality. It appears on duplicate archives, on an unreadable weights file, on the UTM seams, on a licence question. It is worth making explicit, because it is the thing that lets one document serve a peer and a client without lying to either.

  1. VerifiedMeasured, with the measurement shown.
  2. ObservedRead directly off the artifact.
  3. InferredDeduced but not confirmed. Treat as a hypothesis.
  4. FlaggedKnown-open, not fixed, and deliberately not smoothed over.