← All entries
Web app

Algorithm Catalog

Browse the NASA Disasters product algorithms by hazard, sensor, product, modality, date, event or AOI — and file an activation request as a prefilled PR, with the STAC naming standard enforced as you type.

Web app disastersalgorithmsstachdsreactvalidationevents

◎ What it solves

Makes the product algorithms findable, and catches malformed event names at the keyboard — before a name that merely looks valid writes a wrong hazard tag into a GeoTIFF downstream.

⚠ Limitations & Risks

Every catalog entry must acknowledge at least one limitation or risk.

What it solves

Two problems, and the second one is the dangerous one.

The first is ordinary discovery: there was no single place showing which product algorithms exist for which hazard, sensor and product, so asking for one meant knowing who to ask.

The second is that an event name can be wrong in a way that looks right. Names follow YYYYMM_Hazard_Location, and upstream’s validation regex ends in .+ — which means the LOCATION slot quietly swallows any extra underscores. 202501_Tropical_Cyclone_CA sails through. It is then parsed as hazard = Tropical, location = Cyclone_CA, and that wrong hazard gets written into the GeoTIFF’s HAZARD tag. Nothing errors. The product is simply mislabelled from then on, and the mistake was made at the moment somebody typed an underscore.

So the rule here is deliberately stricter than upstream: the pattern ends _[^_]+$, making three or more underscores a hard error the form refuses to submit. The divergence is one-directional and safe — everything this accepts, DPS accepts too. And it is enforced in three places rather than documented in one: the form as you type, validate_data.py over committed data, and a CI parity test that fails if those two implementations ever disagree.

A plausible event name mis-parsing downstream, versus being rejected at the keyboard

Before: the name 202501_Tropical_Cyclone_CA passes upstream validation, is split into the wrong hazard and location, and writes a wrong hazard tag into a GeoTIFF with no error. After: the stricter pattern rejects it while typing, and three enforcement layers keep the rule honest.

BEFORE — wrong, but valid-looking202501_Tropical_Cyclone_CA✓ passes upstream regex (ends in .+)parsed as202501TropicalCyclone_CAhazardlocationproduct.tifHAZARD = “Tropical” ← wrong⚠ no error, ever — just mislabelled from here onAFTER — rejected at the keyboard202501_Tropical_Cyclone_CA✗ underscore-count — expected exactly 2pattern ends _[^_]+$ · the form will not submit202501_TropicalCyclone_CA ✓the same rule, enforced three times1 · rules.ts — while you type2 · validate_data.py — over committed data3 · CI parity test — fails if 1 and 2 disagree

The failure on the left is silent, which is what makes it worth a hard error on the right. Being stricter than upstream is the safe direction: everything accepted here is also accepted by DPS.

What it does

A catalog of the NASA Disasters product algorithms, in three tabs:

The standard is enforced, not documented

The YYYYMM_Hazard_Location STAC event-name rule lives once in src/rules.ts — the regex is lifted verbatim from upstream dps/_validate.sh — and is enforced in three places:

  1. the form, while you type (it won’t submit an invalid name),
  2. scripts/validate_data.py, a 1:1 mirror of the rules,
  3. .github/workflows/algorithm-catalog-validate.yml, which re-checks every committed record on the PR and runs scripts/rules_parity_test.py — a test that pushes one fixture table through both implementations and fails if they disagree, so the two copies can never silently drift.

Multi-word hazards and locations are CamelCase (TropicalCyclone, WinterWx). The catalog serializes hazard ids, never display labels.

Where the data comes from

Hand-curated data/{algorithms,events,hazards}.json, bundled at build, plus data/requests/*.json overlaid via import.meta.glob. Submitting opens a prefilled new-file PR; on merge, algorithm-catalog-compact.yml folds the request into the canonical data.

Run it locally

cd algorithm-catalog
npm install
npm run dev

# The standards gate, offline:
python3 algorithm-catalog/scripts/validate_data.py
python3 algorithm-catalog/scripts/rules_parity_test.py