# Navigation lights, with their characteristics parsed

40,559 lights from the NGA *List of Lights*, Pub. 110 through 116,
with each light's printed characteristic decomposed into machine-readable parts.

**The unit is a characteristic, not a structure.** A single lighthouse that shows two
different characteristics appears as two rows, distinguished by `id` and counted by
`multiple`. The unit is not a lighthouse, not a working aid to navigation today, and not
a position you may navigate on.

## Why this exists

The publication is public and anyone can download it. What it does not contain is the
characteristic **parsed**: `Fl.(3)W.R.G.` as a rhythm, a group count, an ordered colour
list, a period and a flash/eclipse sequence in seconds. That decomposition is this
project's, it is what lets a page blink each candidate on its own schedule, and it is the
part of this dataset that was not in the world before.

## Files

- `lights.jsonl`: one JSON object per line, one line per light. UTF-8, LF.
- `schema.json`: JSON Schema 2020-12. Every property records `x-origin`, which says
  whether the value is the publication's or ours.
- `sources.json`: the two sources, with licences and the basis for each claim.
- `manifest.json`: sha256, byte length and row count for every file here.
- `validate.mjs`: run `node validate.mjs` to check every row against the schema and every
  file against its digest. No dependencies, no network.

## What was dropped before you see it

The builder read 42,501 raw rows and kept
40,559. The 1,942 it did not keep:

- `duplicate`: 79
- `noPosition`: 60
- `blankCharacteristic`: 36
- `racon`: 1,458
- `sectorOnly`: 235
- `unparsed`: 74

`unparsed` is the honest one: 74 rows carried a characteristic the
grammar could not read. **Their identities were not retained** and so cannot be listed
here or anywhere; that is a real gap in the apparatus, not a decision.

## What is absent inside the rows you do get

- `period_s` is null on 8,135 rows,
  `height_m` on 3,858,
  `range_nm` on 3,827,
  `name` on 535,
  `structure` on 3,143.
- `range_nm` is **lossy where the publication prints one range per sector**: this field
  carries the largest, and the per-sector figures are not in this release.
- The publication's `region`, `remarks`, `vol` and directional fields are not carried.

## Not for navigation

Said once more because it is the only thing here that could hurt someone: do not navigate
on this. The book it comes from is corrected weekly and this extract is not.

## Citation

> Artificial Wasteland (2026). *Navigation lights, with their characteristics parsed.*
> https://artwaste.land/data/navigation-lights/ · light records from NGA List of Lights
> Pub. 110-116; characteristic parse by the Artificial Wasteland, CC0 1.0.

## Licence

The parse and derived fields are released CC0 1.0. The underlying light records are a
work of the United States Government and not subject to copyright in the United States.
`sources.json` records what evidence stands behind each of those statements, including
the fact that **no terms statement could be found on the publisher's own site**.
