# Third-party notices and data provenance

CycleCalcs incorporates third-party software and data. This file
reproduces, in full, every license that requires reproduction, and
records the provenance of every dataset named in CREDITS.md, verified
against the files this repository actually ships.

CREDITS.md points here. A machine-readable form of the same rights
position is served from `GET /v2/attribution`, and the plain-language
version for API callers is at `/api/terms.html`.

---

## PART 1. LICENSES REPRODUCED IN FULL

### 1.1 Astronomy Engine (MIT)

Vendored at `netlify/lib/vendor/astronomy-engine.mjs` and
`assets/vendor/astronomy.browser.min.js`, version 2.1.19. This is the
astronomy library behind every computed value the site and the API
return.

Upstream: https://github.com/cosinekitty/astronomy

The vendored file's own notice, reproduced in full and unedited:

    MIT License

    Copyright (c) 2019-2023 Don Cross <cosinekitty@gmail.com>

    Permission is hereby granted, free of charge, to any person obtaining
    a copy of this software and associated documentation files (the
    "Software"), to deal in the Software without restriction, including
    without limitation the rights to use, copy, modify, merge, publish,
    distribute, sublicense, and/or sell copies of the Software, and to
    permit persons to whom the Software is furnished to do so, subject to
    the following conditions:

    The above copyright notice and this permission notice shall be
    included in all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE.

The "2019-2023" year range above is printed in the vendored file itself
and is reproduced unchanged. It is older than the current year because
the notice obligation attaches to the copy this repository redistributes,
not to whatever copyright line the upstream project carries today.

Serving computed output over HTTP is not distributing this Software; the
MIT license has no network clause, so an API response built with this
engine carries no MIT obligation of its own. See PART 3.

### 1.2 d3-celestial (BSD-3-Clause)

Data derived from d3-celestial ships in four places:

  - `assets/data/constellation-lines.json`, the 88-constellation figure
    lines
  - `assets/data/milkyway.json`, the Milky Way isophote outline (see the
    open item in PART 4: d3-celestial attributes this specific dataset to
    a third party, Jose R. Vieira, whose own license position is
    unresolved)
    (`assets/data/sky-stars-deep.json` NO LONGER comes from d3-celestial.
    It was built from d3-celestial's `stars.8.json`, which carries the XHIP
    compilation and so ESA astrometry; it is now built from the SAO catalog.
    See PART 2.1.)
  - `assets/data/messier.json`, the base layer of designation, type,
    magnitude, angular size and coordinates for the Messier and Caldwell
    objects

Upstream: https://github.com/ofrohn/d3-celestial

Full text, reproduced because BSD-3-Clause clause 2 requires reproduction
rather than a bare citation:

    Copyright (c) 2015, Olaf Frohn
    All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions are
    met:

    1. Redistributions of source code must retain the above copyright
       notice, this list of conditions and the following disclaimer.

    2. Redistributions in binary form must reproduce the above copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the
       distribution.

    3. Neither the name of the copyright holder nor the names of its
       contributors may be used to endorse or promote products derived
       from this software without specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Olaf Frohn does not endorse CycleCalcs. Clause 3 above forbids using his
name or the d3-celestial name to suggest otherwise.

### 1.3 GeoNames place index (CC BY 4.0)

Backs `GET /v2/places` and the `place` parameter accepted by every
location-taking `/v2` endpoint, generated into
`netlify/lib/v2/data/places-top.mjs` and `places-rest.mjs`; the site's
own place search uses the sibling reduction in `assets/data/cities-top.txt`
and `assets/data/cities-rest.txt`.

Source: https://download.geonames.org/export/dump/
Terms: https://www.geonames.org/about.html: "available for download free
of charge under a creative commons attribution license"
License: CC BY 4.0, https://creativecommons.org/licenses/by/4.0/

Attribution is a condition of this license, not a courtesy, and it is
discharged per response rather than once for the whole API: any `/v2`
response that resolves a place name carries `meta.rights` of
`"attribution_required"` and the exact required credit line in
`meta.attribution.text` and in `meta.attribution.sources`. That credit
line, reproduced here verbatim because it is the string the API actually
emits:

> "Place names and coordinates from GeoNames (geonames.org), CC BY 4.0."

A response that does not resolve a place name carries `meta.rights` of
`"unrestricted"` and owes GeoNames nothing, because it never touched the
index. See `/api/terms.html` for what this means for a caller.

### 1.4 Typefaces: Marcellus and Inter (SIL Open Font License 1.1)

Both are vendored as base64 inside importable `.mjs` modules, because
the no-build deploy never runs `npm install` and the function bundle
has no file access.

| Family | Vendored at | License text at | Used by |
|---|---|---|---|
| Marcellus Regular | `netlify/lib/vendor/marcellus-font.mjs` | `netlify/lib/vendor/marcellus-OFL.txt` | display type in both calendar PDFs |
| Inter Regular, Inter SemiBold | `netlify/lib/vendor/inter-font.mjs` | `netlify/lib/vendor/inter-OFL.txt` | all text and data type in the press calendar |

Sources, with the hashes the modules assert at import:

- Marcellus: google/fonts `ofl/marcellus`, `Marcellus-Regular.ttf`.
- Inter: github.com/rsms/inter release **v4.1**, `Inter-4.1.zip`
  (sha256 `9883fdd4a49d4fb66bd8177ba6625ef9a64aa45899767dde3d36aa425756b11e`),
  files `extras/ttf/Inter-Regular.ttf` (sha256 `40d692fc…`) and
  `extras/ttf/Inter-SemiBold.ttf` (sha256 `78a843fa…`). The full digests
  are exported from the module and checked by `tools/press-smoke.mjs`.

**Why the license files travel with the font data.** The OFL permits
embedding a font in a document without the document becoming subject to
the license, so a customer's calendar PDF carries subsetted outlines and
owes nothing further. Redistribution of the font data *itself* — which
is exactly what this repository does — is the case the license does
govern, and it requires the license and copyright notice to travel with
the files. That is what the two `-OFL.txt` files are for; neither may be
removed while the corresponding `.mjs` is present.

Neither license requires attribution in the rendered output, so the
printed calendar carries no font credit and `GET /v2/attribution` is
unaffected.

---

## PART 2. OTHER DATASETS NAMED IN CREDITS.md

None of the entries below requires reproduction of license text (the
underlying licenses are short permissive grants, public domain notices,
or, in one case, an open question rather than a grant). Each is recorded
here because CREDITS.md names it, verified against the files this
repository actually ships as of this notice.

### 2.1 Star catalogs (NASA HEASARC) - CLOSED, formerly ESA Hipparcos

Files: `assets/data/sky-stars.json`, `assets/data/sky-stars2.json`,
`assets/data/star-names.json` and `assets/data/constellations.json`
(naked-eye star positions, magnitudes, color index, the name-to-star join
and per-constellation metadata), plus `assets/data/sky-stars-deep.json`
(the binocular-depth tier), plus `netlify/lib/v2/data/star-targets.json`
(the named-star targets of the v2 API: for the stars its own selection
block lists, the J2000 place at the catalog's precision, proper motion,
parallax, radial velocity and V magnitude, built by
`tools/generate-star-targets.py`). All are generated at build time and none
redistributes a catalog in raw form.

Sources, both served by NASA's High Energy Astrophysics Science Archive
Research Center:

  - **Bright Star Catalog, 5th Revised Ed. (Preliminary)**, Hoffleit, D.
    and Warren, Jr., W.H., 1991. Naked-eye stars.
    https://heasarc.gsfc.nasa.gov/W3Browse/star-catalog/bsc5p.html
  - **Smithsonian Astrophysical Observatory Star Catalog**, SAO Staff
    1966, J2000 revision. The depth tier fainter than magnitude 6.5.
    https://heasarc.gsfc.nasa.gov/W3Browse/star-catalog/sao.html

Neither HEASARC page asserts any copyright, license or usage restriction,
and both tables declare `table_security = public` in the data files
themselves. The quantities used are positions, magnitudes, color indices
and catalog cross-identifiers: measurements of the sky rather than
authorship. Credit is given here because crediting a source is right even
where no license compels it.

**THIS ITEM WAS PREVIOUSLY OPEN AND IS NOW CLOSED.** These files were
built from the ESA Hipparcos Catalogue, and `sky-stars-deep.json` from the
XHIP compilation by way of d3-celestial, which is the same ESA
observations at one remove. ESA licenses Hipparcos under **CC BY-NC 3.0
IGO** and requires written authorization for any use that "directly or
indirectly generates a financial gain". This site carries advertising and
sells API access, so that term could not be satisfied by a credit line.
No authorization was sought; the dependency was removed instead. No ESA
measurement remains in any shipped file: every position, magnitude and
color now comes from BSC5P or SAO. What does remain, and is described
exactly rather than glossed over, is the identifier column noted in 2.2.1
below.

Deep-tier color is an **estimate, not a measurement**, and the payload
says so: SAO carries no B-V, so `sky-stars-deep.json` sets
`bv_source: "spectral_type_estimate"` and the value is derived from the
star's spectral type. The naked-eye tiers use BSC5P's measured B-V.

#### 2.2.1 What is still Hipparcos-shaped, stated precisely

Two residues remain. Both are deliberate, and this section replaced an
earlier sentence claiming that no file in `assets/data/` derived from ESA
data "in any amount", which was simply not true of the first of them.

**HIP identifiers, 532 of them.** `assets/data/star-names-index.json`
carries a Hipparcos catalogue NUMBER per named star, in its second
column, and `star-names.html` deep-links on it (`#32349`). That is a
reference to a catalog entry, not a measurement taken from one: no
ESA position, magnitude, parallax or color is stored beside it, and the
astrometry those rows display comes from BSC5P and SAO. An identifier
that names a row is the part of a catalog that has to be quotable for
anyone to cite it, and the CC BY-NC term above is about USE of the
catalog's content. The number is kept because it is the identifier
astronomers and other catalogs actually cross-reference by, and
removing it would strand every star page's stable anchor. Note it is
NOT the identifier the sky map selects on: that moved to HR precisely so
an old HIP link could not silently resolve to a different star.

**Twenty-one quoted distances.** `tools/constellation-facts.mjs` carries
hand-curated `distLy` values for individual bright stars, cited as
"Hipparcos/Gaia values as commonly quoted". Those are individual
published quantities quoted as facts, not an extraction from a database,
and the per-star distance of Betelgeuse is not a protectable element of
anyone's catalog. Naming the measuring mission is a citation.

### 2.2 NOAA Space Weather Prediction Center

File: `assets/js/sunspot-planets.js` (yearly mean total sunspot number).

Source: https://www.swpc.noaa.gov/products/solar-cycle-progression
License: United States Government work, public domain (17 U.S.C. 105). No
attribution condition; credited as good practice and for provenance.

### 2.3 Wikipedia, "List of Messier objects"

Used at build time only, as a cross-validation source in
`tools/build-messier-facts.mjs`: only uncopyrightable measurements (NGC
identifier, distance, common name) are taken, and each is checked against
an independent source before it ships.

Source: https://en.wikipedia.org/wiki/List_of_Messier_objects
License: the article text is CC BY-SA 4.0. The values taken here are
facts, not the licensed prose; credited as good practice.

### 2.4 IAU Catalog of Star Names (IAU Working Group on Star Names, WGSN)

Files: `tools/star-names-wgsn.json`, `assets/data/star-names.json`,
`assets/data/star-names-index.json`, `netlify/lib/v2/data/star-targets.json`
(the names the v2 API accepts as star: targets and returns on their rows).

Source: https://exopla.net/star-names/modern-iau-star-names/ (an IAU-data
mirror; recorded as the source in the fetched file itself)
License: CC BY 4.0. The IAU states: "All IAU-produced products (Images,
Videos, Texts) are released under Creative Commons Attribution (i.e. free
to use in all perpetuity, world-wide, as long as the source is
mentioned)."

Credit: "Star names: IAU Catalog of Star Names (IAU-CSN), IAU Working
Group on Star Names (WGSN). International Astronomical Union, CC BY 4.0."

### 2.5 International Meteor Organization Working List of Visual Meteor Showers

Files: `assets/js/meteors.js`, `tools/meteor-catalog.mjs` (peak solar
longitudes, radiants, drifts, ZHR values and entry speeds, cross-checked
against the American Meteor Society calendar).

Source: https://www.imo.net/resources/calendar/
License position: the IMO publishes no commercial redistribution grant
and asserts copyright in its website text, graphics and table layout. The
values taken here are astronomical parameters, independently tabulated in
this repository's own files rather than reproduced as the IMO's table; no
IMO prose, graphic or table layout ships. Credited as good practice and
for provenance.

### 2.6 International Earth Rotation and Reference Systems Service (IERS)

Files: `netlify/lib/deltat.mjs` and `assets/js/deltat.js` (delta-T, TT
minus UT1, sampled from 1972 to the end of the current prediction), built by
`tools/build-deltat.mjs`.

Sources: the IERS EOP 20 C04 series (EOP Product Center, Paris
Observatory), the IERS Rapid Service finals and IERS Bulletin A (IERS Rapid
Service/Prediction Center, U.S. Naval Observatory), from
https://datacenter.iers.org/. The bulletin issue and the last date of each
series are recorded in the files.
License position: published measurements and predictions of the Earth's
rotation. The values taken are sampled values of UT1 minus UTC combined
with the leap-second record; no IERS document, table layout or text ships.
Credited as good practice and for provenance.

---

## PART 3. RIGHTS IN COMPUTED OUTPUT

Values computed by this software (positions, phases, rise and set times,
twilight, eclipse circumstances, conjunctions, seasons, aspect angles and
every other quantity CycleCalcs calculates rather than obtains from a
third party) are facts about the physical universe. CycleCalcs LLC, a
Virginia limited liability company, asserts no copyright and no database
right in them. See LICENSE clause 3 for the
repository-level grant, and `/api/terms.html` for the version published to
API callers, which is kept byte-consistent with the `output_rights`
string `GET /v2` publishes.

The free one-year sample of the event database (edition sample-2027, made
by `tools/build-event-sample.mjs`) goes further: its files themselves,
including their selection, arrangement and README, are dedicated to the
public domain under CC0 1.0 Universal
(https://creativecommons.org/publicdomain/zero/1.0/), so they may be
copied and republished as files. This is the grant in NOTICE.md that LICENSE
clause 2 provides for.
It does not extend to the paid event-database files, which may not be
redistributed although the values in them stay public domain.

---

## PART 4. OPEN ITEMS

Recorded openly rather than omitted.

  1. ~~Hipparcos and Tycho are distributed by ESA under CC BY-NC 3.0
     IGO.~~ **CLOSED.** The ESA dependency was removed rather than
     licensed: star data now comes from the Bright Star Catalog and the
     SAO catalog via NASA HEASARC, neither of which asserts a
     restriction. See PART 2.1. Kept here, struck through rather than
     deleted, so the history of the decision stays legible.
  2. No license statement has been located for the Milky Way Outline
     Catalog attributed to Jose R. Vieira, which underlies
     `assets/data/milkyway.json` by way of d3-celestial's `mw.json`.
     d3-celestial's own BSD-3-Clause notice (PART 1.2) covers Olaf
     Frohn's compilation and cannot convey rights in an underlying
     catalog Frohn may not himself hold.

Neither item currently blocks anything this repository ships to a
browser or to the frozen `/v1` API. Both are recorded here so they are
not lost, and so this file states the honest position rather than a
convenient one.
