KARST
Surveythe published parameters, and their grades

How each of these was measured

Cavers grade a survey by how it was measured — a compass-and-tape traverse and a sketch from memory are both surveys and they are not the same document. Every figure on this site carries that grade. It is the cheapest honesty mechanism there is and this category has never used it.

S-01The scale

Five grades

GradeNameWhat it means
G5InstrumentRead from a published standard or from the chain. Reproducible by anybody, exactly.
G4TabulatedA published measurement someone else made, transcribed here. Correct if the source is.
G3ModelledComputed from a law that is right, with constants that are a scale rather than a substance.
G2SketchedThe shape is right and the magnitude is a guess. Load-bearing only for the direction of an argument.
G1AssertedNothing measured it. Anything here is either a plan or a preference, and is named as one.

A grade is about provenance, not confidence. A G5 figure can be irrelevant and a G2 one can be the most useful thing on the page; the grade only says what would have to be wrong for it to be wrong.

S-02Constants

Everything the site is parameterised by

canonical lattice
44 × 26 nodes, 2218 fractures
hero lattice
34 × 20 nodes, 5 sinks — coarser so it can animate
sinks / springs
6 / 1
initial aperture
lognormal, median 1, σ 0.11
aperture ceiling
200 — a safety rail; a control fails if it ever binds
wall retreat, k
0.019 per step at zero saturation
saturation length, α
0.006
rate-law switch
0.9 — first order below, fourth above
supply conductance
2 per sink, head 1
solver
Gauss–Seidel, ω 1.86, 1200 sweeps per step
residual
FLUX, relative, target 1e-7
steps recorded
1600, every 10
seed
20250830 — xorshift32, deterministic in Node and the browser
contracts
solc 0.8.26, optimizer 200 runs — 6,420 bytes, 45 properties executed on an EVM
mutation pass
7 sabotaged builds, 7 caught
router
Uniswap SwapRouter02, 0x2626664c2603336E57B271c5C0b26F421741e481
quote venue
Uniswap V3 on Base, no key, no proxy
quoter
0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a
sizes quoted
11, from $10 to $1,000,000
impact bound
1%, measured against a $10 trade so the fee cancels
ground lightness
OKLab L 0.3 — a preference
surface chroma
× 0.2 of the measured chroma — the other preference

The hero runs a coarser mesh than the canonical figures so that it can animate at sixty frames a second. Both parameter sets are above rather than one being implied.

S-03The colour

The palette is a measurement

Every accent on this site is the colour of water standing on a floor: pure water's own absorption over a path length, a diffuse floor beneath it, integrated against the CIE 1931 observer under D65. The ground is that floor with no water on it — terra rossa, the iron-oxide residue limestone leaves behind when the carbonate has been carried away. One process, two ends of it.

0 m0.15 m0.5 m1 m2 m3.5 m6 m10 m16 m22 m30 m45 mtop: over calcite · bottom: over terra rossa · the two rows converge past the crossover
The same model at twelve depths over the two floors. Top row calcite, bottom row terra rossa. G3

The check that was wrong, and what it found instead

Control 7 originally asserted that the turquoise belongs to the floor — that over terra rossa, no depth of water turns blue. It failed, and the model was right: strip enough red out of the light and every floor returns blue, because what comes back is whatever the water left. Measured, the two floors are 147° apart in hue at half a metre and 1.9° apart at thirty, crossing under ten degrees at 17.82 m. G3

That is a better fact than the one it replaced, and it is the same shape as the site's own argument: past a certain distance, only the constraint is still visible in the answer.

CIE 1931 CMFs, D65 G5
published standards, transcribed
Pure-water absorption G4
Pope & Fry (1997), 10 nm digest
Floor reflectances G3
parametric fits to hematite and calcite
Two-way Beer–Lambert G3
no volume scattering, no Fresnel term
Ground lightness, OKLab L G1
0.3 — a preference, and one of two
Accent contrast on plate2
4.57 / 4.60 / 4.59

The omissions are unquantified and say so. A table with a number beside the cheap approximations and silence beside the expensive ones is a table that flatters itself.

S-04The gate

What fails the build

This table is generated from tools/validate.mjs itself, so the page cannot name a check that does not exist and cannot omit one that does. Rows marked CONTROL are negative controls: they fail if something that should be absent turns up, or if a result the site relies on quietly reverses.

#What it assertsKind
1Every declared document exists on disk and is non-trivialCHECK
2Every document has one <h1>, a title, and a description between 60 and 200 charactersCHECK
3Every internal link resolves to a document this build writesCHECK
4Every page carries the skip link, a <main id="main"> and the demo-mode badgeCHECK
5ZERO IMAGE ASSETS: no <img> and no CSS url() anywhere — every visual is computedCONTROL
6No data-fact placeholder survived the build, and no figure slot is unfilledCHECK
7Nothing is a simulated market, and the state table names every part with its stateCONTROL
8The only addresses printed anywhere are third-party contracts this site reads — never one of oursCONTROL
9No social link the configuration does not set, and no twitter:site without an accountCONTROL
10No canonical, og:image or twitter:card while no host is registered — and all three once one isCONTROL
11The vault is never described as deployed or audited, and both pages that discuss it say soCONTROL
101Palette: A perfect white reflector through the CMF/D65 pipeline lands on the D65 white point and on #FFFFFFCHECK
102Palette: A monochromatic 550 nm stimulus lands on the spectral locus, xy ≈ (0.302, 0.692)CHECK
103Palette: Pure water absorbs least between 400 and 450 nm — the window the whole palette lives inCHECK
104Palette: Energy: water never returns more light than its floor does, at any wavelength or depthCHECK
105Palette: At zero depth the model returns the floor itself, so the water is doing all of the colourCHECK
106Palette: Over calcite, hue rotates monotonically toward blue with depth (1 m → 8 m → 22 m)CHECK
107Palette: The floor decides the colour only while it is in sight: 147° apart at 0.5 m, under 10° past the crossoverCONTROL
108Palette: The hue spread is caused by the absorption SPECTRUM: flatten it and every depth returns one hueCONTROL
109Palette: Every accent pair is at least 30° apart in hue — one parameter is not allowed to give one colourCHECK
110Palette: Every ink hits its solved contrast target against plate2, the lightest surface text sits onCHECK
111Palette: The rock stays in the KARST luminance band, 0.020–0.040 — no sibling site is in itCHECK
112Palette: Every accent clears 4.5:1 as text on every surface, not only on the one it was solved againstCHECK
113Palette: Deep ink on a solid accent fill clears 4.5:1 — a button is text, not a shapeCHECK
114Palette: No accent is achromatic: chroma ≥ 0.04, so hue means something at every stepCHECK
115Palette: The surfaces are the rock: every one carries terra rossa’s measured hue, to within a third of an 8-bit stepCONTROL
12No brand colour appears in css/ or js/ outside the generated :root block, including as an rgb() tripleCONTROL
13js/brand.js and css/base.css both carry exactly what tools/palette.mjs computesCHECK
14Widest path agrees with brute-force enumeration of every simple path, on 20 random graphsCHECK
15Max flow equals the width of the cut it returns — the theorem, checked numericallyCHECK
16The published cut recomputes from the cached edge list, rather than being taken on trustCHECK
17THE ASYMMETRY holds on the published aquifer: widen everything outside the cut fiftyfold, gain nothingCONTROL
18The cached run was made by the code now in the repository, not only by the same parametersCHECK
19The pool scan exists, names its block, and every executable size recomputes from its own quotesCHECK
20The venue limitation is stated on the page that uses the data, not only in the sourceCONTROL
21No pool is credited with a size it was not quoted at, and a censored one is printed as a floorCONTROL
22The mark is still the model: the tick sits on the narrowest fracture inside the massifCHECK
23/survey describes the mark it actually renders — same segment and turn countsCHECK
24The check table on /survey lists every check in this file and no othersCHECK
25Every grade badge in the markup names a grade the scale definesCHECK
26Generated static files are present: favicon, manifest, robots, vercel configCHECK
27robots.txt names no sitemap while no host is registered, and names one once it doesCONTROL
29The two-hop routes partition exactly: compared, plus excluded for being below the resolution floorCONTROL
30The published contract result was produced by the Solidity now in the repositoryCHECK
31The contract suite is known to bite: every sabotaged build was caught by the property it brokeCONTROL
32The vault’s interface has no function that can move the asset somewhere of its choosingCONTROL
34The deploy sequence the page performs was executed against real USDC on Base, from the current SolidityCHECK
36The panel’s own deposit and withdraw calldata was executed against a fresh vault, and a swapped argument was refusedCONTROL
35The page’s own constructor encoder was deployed from and read back, and a corrupted offset was refusedCONTROL
33The app claims no privacy it does not haveCONTROL
28The nav in every document matches js/content.js, in orderCHECK
S-05The lexicon

Words that had to earn it

Every term on this site is a real word from speleology or karst hydrology, and each one has to pass the same test: if the thing it names does not behave the way the word does, the word is wrong.

Aquifer the ERC-4626 vault

An aquifer is not a tank. It is water held in the pore space and the fractures of rock that is still rock — distributed, in use, and measurable only as a level. You do not own a bucket in it. You own a share of how saturated it is, and that share is worth what the level says, not what the sign at the gate says.

Spar the transferable ERC-20 receipt

Calcite spar is the crystal that grows in a cavity out of the water moving through it. It is solid, it is portable, you can hand it to somebody without draining anything, and it got there because flow passed this way. That is a fungible claim on a position that is still working, which is the only thing this product does that a pool position cannot.

Recharge the fee hook

Recharge is water entering the aquifer from above. It raises the level everywhere at once, in proportion to nothing — a harvest lifts every Spar by the same factor, so the small holder and the large one gain the same percentage on the same event. The word is also honest about direction: recharge is seasonal, and so is this.

Conduit the private execution path

A conduit is a route that exists underground. Standing on the surface you cannot tell which sink feeds which spring — that is not a claim about cryptography, it is the ordinary condition of a karst landscape, and it is why hydrologists have to prove connectivity with dye instead of assuming it.

Resurgence the tokenised-equities desk

A resurgence is where an underground river comes back to the surface. The water is from somewhere else, it kept somebody else’s weather, and it arrives on a schedule set upstream. An equity on a chain that never closes is exactly that, and the calendar it keeps is the reason it gaps.

Hydrograph the yield decomposition

A hydrograph is discharge against time, and a karst spring has a famously flashy one: it answers a storm in hours and then falls away for months. A single number called APY is the mean of that curve, which is the one summary that describes none of the days you were actually in it.

Doline the threat model

A doline is a sinkhole — the point where the roof of a void that was already there stops holding. Nothing arrives from outside. The right way to name an insolvency is after the geometry that caused it rather than after the day it was noticed.

Choke the emergency stop

A passage chokes when breakdown or sediment fills it. Flow stops; nothing is taken, and nothing is anywhere it was not already. An emergency stop that can move assets is not an emergency stop, it is a key.

Survey the published parameters, and their grades

Cavers grade a survey by how it was measured — a compass-and-tape traverse and a sketch from memory are both surveys and they are not the same document. Every figure on this site carries that grade. It is the cheapest honesty mechanism there is and this category has never used it.

And five that did not

  • Sump. A passage flooded to the roof: you cannot see past it and you have to commit. Exactly right for a vault and exactly wrong as a product name — a sump is also the pan the oil sits in, and half the readers get that one first.
  • Swallet. The correct word for where a stream goes underground, and the natural name for a deposit. It is also unpronounceable on a first reading, which is a tax paid on every sentence for the rest of the site’s life.
  • Phreatic. The zone below the water table, where passages are full and round. It is the most precise word available for a position that is fully invested, and it reads as a diagnosis.
  • Karren. The fluted grooves solution cuts into bare limestone — the visible trace of the process. One letter from the brand, which is a support burden rather than a resonance.
  • Siphon. What a French caver calls a sump, and what everyone else calls the thing that drains your account. The metaphor is right and the connotation is fatal.
S-06The mark

It is read out of the model

The mark is the widest route from a sink to the spring in a small aquifer run to breakthrough — 15 × 11 fractures, seed 31 — drawn the way a survey draws a centreline, with one perpendicular tick at its narrowest fracture. A route, and the one point on it that decides what the route is worth.

The seed is chosen by a stated rule rather than by eye: of seeds 1–40 it is the one whose widest route has the most direction changes, ties broken by the shorter route. A straight line is not worth drawing as a route.

Changing the model changes the mark, which is correct, because the mark is a claim about the model. The build fails if the tick stops sitting on the narrowest fracture, or if the polyline stops having 16 segments and 5 turns.

The tick excludes the fracture at the spring itself — the same exclusion Aquifer applies to the min cut, and for the same reason.