clone

an offline map explorer where each world, from a game map to a city's open data, ships as one .atlas file

feat/atlas-next-horizon
atlas / docs / decisions / 0019-an-earth-volume-is-included.md
0019-an-earth-volume-is-included.md 2.9K rendered
1# 19. The desktop ships with an included Earth volume23- **Date:** 2026-08-034- **Status:** accepted5- **Where it is written down:** [app.md](../app.md) §1.4; [generate.md](../generate.md) §2.4; `included/README.md`; `main.go`; `internal/generate/crawl/bluemarble.go`; `internal/generate/sources/nasabluemarble`67## Context89A fresh install opened onto the empty-library card. Everything past that card10assumed the reader could produce or obtain a `.atlas` file, which meant the11whole pipeline stood between a new reader and their first world — and there was12no committed bundle with real rasters anywhere in the repository, so nothing13end to end ever proved the imagery leg of the data plane.1415NASA Earth Observatory publishes Blue Marble Next Generation: a global,16cloud-free, true-color composite of the whole planet, free of copyright, at a17size that survives a repository. The format already had everything needed to18carry it — the whole-sphere equirectangular declarations NASA Trek's worlds19make, a registry fold that lets builds sit side by side, and an install path20with validation, versioned naming, atomic staging and idempotency.2122## Decision2324Ship the desktop application with one included volume: Earth, as a real,25ordinary format-v3 bundle composed from a pinned Blue Marble capture, committed26at `included/` and embedded in the desktop executable. At startup the shell27installs it into the library through `format/bundle`'s own rules, before the28host's first scan, and never touches the embedded copy again.2930The capture is pinned — one URL, one SHA-256, one recorded capture time, one31spelled derivation policy — and the crawl that fetches it is the only networked32step, run by hand (`make included-earth`). A digest mismatch is a refusal.33Ordinary builds, tests and every launch are offline; a release checkout builds34from the committed artifact alone.3536The included build is ordinary on purpose: nothing anywhere special-cases it.37The application handler does not know built-in volumes exist; `atlas serve` and38the CLI install nothing; a newer Earth build installed later simply wins the39fold, and deleting the installed file brings it back at next launch by the same40idempotent install.4142## Consequences4344- A first launch opens onto a world, and the empty-library card becomes a45 state most readers never see.46- The repository carries a ~21 MiB binary artifact, regenerable byte for byte47 from the pin by `make included-earth`, with its provenance and recipe beside48 it in `included/README.md`.49- The e2e registry gains its first volume with real rasters, so the data50 plane's imagery leg is proven in a browser rather than only inferred.51- The embedded copy costs every desktop binary its size once; the headless52 host and CLI cost nothing.53- Anything that later enriches Earth — features, layers, regional extraction —54 arrives as ordinary builds and ordinary enrichment, because the included55 volume made no special claims for itself.