makepad/tools/map_tiles/europe-overnight.sh
Admin 80d5967198 Map: Europe single-origin archive shipped — 51.8GB base + faces bake + .mkmap shards
Overnight run 2026-08-01: 9,380,390 tiles z2-14 in 3.2h, faces bake 1h
(+8GB, worker-side brotli q10), transmux to 99 shards all <510MB.
App repointed to europe-base-br-faces.mbtiles. nl-bridge-dz verified
byte-identical against the new base (deterministic feature indices).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-02 17:48:42 +02:00

70 lines
2.5 KiB
Bash
Executable file

#!/bin/zsh
# Overnight Europe flow: pbf-base (streets-merged emission) -> verify ->
# painter-cascade faces bake (v2-faces-1, threshold 150ms, buckets 14+16;
# rz15 intentionally falls back to the runtime cascade — the signature
# guard is exact-bucket, so there is no cross-bucket reuse; rz17+ was
# always runtime) -> transmux into Cloudflare-ready .mkmap shards (each
# < 510,000,000 bytes) -> stat-verify every shard under the cap.
#
# Run from the repo root. Reuses the completed pbf-detail store; does NOT
# re-ingest the PBF. Logs progressively to local/maps/europe-overnight.log.
set -e
setopt no_nomatch
PBF=local/maps/europe-260726.osm.pbf
STORE=local/maps/native-detail-europe.store
OUT=local/maps/europe-base-br.mbtiles
FACES=local/maps/europe-base-br-faces.mbtiles
MKMAP=local/maps/europe-base-br.mkmap
BIN=./target/release/makepad-map-tiles
BAKE=./target/release/makepad-map-bake
LOG=local/maps/europe-overnight.log
ulimit -n 8192
phase() {
echo "" | tee -a "$LOG"
echo "==== $(date '+%F %T') PHASE: $1 ====" | tee -a "$LOG"
}
: > "$LOG"
phase "disk headroom"
df -g . | tee -a "$LOG"
phase "pbf-base (brotli q11, all zooms, whole store, z14 streets merge)"
"$BIN" pbf-base "$PBF" "$OUT" \
--store "$STORE" \
--brotli-quality 11 \
--sort-memory-mib 512 2>&1 | tee -a "$LOG"
phase "decode-sanity (base)"
"$BIN" verify-mbtiles "$OUT" --stride 200 2>&1 | tee -a "$LOG"
phase "faces bake (threshold 150ms, buckets 14,16, worker-side brotli q10, all cores)"
# nl-bridge-dz passed so NL tiles bake with the dz configuration the app
# runs with (outside its bounds it is inert). NOTE: dz joins are stale
# against the merged street indices until the dz rebake; the bake and the
# app fail those joins closed IDENTICALLY, so signatures still match.
"$BAKE" "$OUT" "$FACES" \
--bridge-dz local/maps/nl-bridge-dz.mbtiles \
--threshold-ms 150 --buckets 14,16 2>&1 | tee -a "$LOG"
phase "decode-sanity (faces)"
"$BIN" verify-mbtiles "$FACES" --stride 200 2>&1 | tee -a "$LOG"
phase "transmux faces archive to .mkmap shards"
rm -rf "$MKMAP"
"$BIN" transmux "$FACES" "$MKMAP" 2>&1 | tee -a "$LOG"
phase "shard cap verification (all must be < 510000000 bytes)"
ls -l "$MKMAP" | tee -a "$LOG"
OVER=$(find "$MKMAP" -type f -size +509999999c | wc -l | tr -d ' ')
echo "shards over cap: $OVER" | tee -a "$LOG"
if [ "$OVER" != "0" ]; then
echo "SHARD CAP EXCEEDED" | tee -a "$LOG"
exit 1
fi
phase "done"
ls -la "$OUT" "$FACES" | tee -a "$LOG"
echo "europe overnight complete" | tee -a "$LOG"