From 0c2dcd16b686496180cb222384a026bae9858036 Mon Sep 17 00:00:00 2001 From: Tom Johnell Date: Fri, 27 Mar 2026 12:29:39 -0500 Subject: [PATCH 1/2] Remove reachability scoring code from OI repo The reachability pipeline now lives in tldev/openinterstate-reachability. OI keeps exit_poi_candidates (spatial proximity links consumed by OI-reach) but no longer produces reachability scores or scoring-dependent culling. - Remove osrm_snap_hints table from schema - Remove reachability propagation, unreachable pair deletion, competing exit culling, opposed-axis filtering, and rest area anchoring SQL - Remove exit_place_scores export spec (produced by OI-reach now) - Keep exit_poi_candidates generation + directional rest area filter - Keep exit_place_links export (consumed by OI-reach score.sh) - Remove oi_guard_no_reachability_clears and reachability signature computation from lib.sh - Update AGENTS.md, data contract, and naming glossary Co-Authored-By: Claude Opus 4.6 --- AGENTS.md | 3 +- bin/lib.sh | 25 +--- docs/data_contract_draft.md | 29 ---- docs/naming_glossary.md | 16 --- schema/bootstrap.sql | 16 --- schema/derive.sql | 280 +----------------------------------- tooling/export_release.py | 22 --- 7 files changed, 4 insertions(+), 387 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index cec232d..654a1e5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -26,7 +26,8 @@ ## Pike SQLite Follow-On - After exporting an OpenInterstate release locally, also build Pike's SQLite pack from that exact release archive unless the user explicitly says not to. -- Use Pike's supported release-driven pipeline entrypoint from `/Users/tjohnell/projects/pike/server`: `./pike-pipeline.sh build --release-file /abs/path/openinterstate-release-.tar.gz --reachability-snapshot /Volumes/goose-drive/pike-osrm/reachability/pike.osrm-reachability.snapshot.pgdump`. +- Use Pike's supported release-driven pipeline entrypoint from `/Users/tjohnell/projects/pike/server`: `./pike-pipeline.sh build --release-file /abs/path/openinterstate-release-.tar.gz --reachability-snapshot `. +- Reachability snapshots are produced by the separate `tldev/openinterstate-reachability` repo. - Let Pike keep its own default output locations unless the user asks otherwise. The current default host pack output is `/Users/tjohnell/projects/pike/server/.data/packs/pike.sqlite` and the staged build file is `/Users/tjohnell/projects/pike/server/.data/packs/pike.sqlite.new`. - After the Pike build finishes, validate the pack with `sqlite3` by checking `PRAGMA integrity_check;` and confirming the `meta` table reports the matching `openinterstate_release_id`. diff --git a/bin/lib.sh b/bin/lib.sh index e9b8743..8689fa6 100755 --- a/bin/lib.sh +++ b/bin/lib.sh @@ -544,20 +544,6 @@ oi_container_path() { printf '/data/%s\n' "$rel_path" } -oi_guard_no_reachability_clears() { - local sql_file="$1" - local pattern - - for pattern in \ - 'TRUNCATE[[:space:]]+[^;]*exit_poi_reachability' \ - 'DELETE[[:space:]]+FROM[[:space:]]+exit_poi_reachability' \ - 'DROP[[:space:]]+TABLE[[:space:]]+[^;]*exit_poi_reachability' - do - if rg -n -i -e "$pattern" "$sql_file" >/dev/null 2>&1; then - oi_die "guardrail violation in $(basename "$sql_file"): reachability clears are forbidden" - fi - done -} oi_download_pbf() { local source_url="$1" @@ -1006,11 +992,9 @@ oi_extract_interstate_relation_cache() { oi_apply_derive() { local derive_file="$REPO_ROOT/schema/derive.sql" local derive_state_file import_state_file import_signature derive_signature derive_sql_signature derive_code_signature - local reachability_signature relation_cache_file relation_cache_signature + local relation_cache_file relation_cache_signature local -a derive_source_files=() - oi_guard_no_reachability_clears "$derive_file" - import_state_file="$(oi_state_file import "$OI_DATA_ROOT|$OI_DB_NAME")" import_signature="$(oi_state_read "$import_state_file" signature 2>/dev/null || true)" [[ -n "$import_signature" ]] || import_signature="no-import-state" @@ -1032,19 +1016,12 @@ oi_apply_derive() { relation_cache_file="$(oi_extract_interstate_relation_cache)" [[ -f "$relation_cache_file" ]] || oi_die "missing Interstate relation cache: $relation_cache_file" relation_cache_signature="$(oi_file_signature "$relation_cache_file")" - reachability_signature="$( - { - oi_db_query "SELECT COUNT(*), COALESCE(MAX(updated_at)::text, '') FROM exit_poi_reachability;" 2>/dev/null || true - oi_db_query "SELECT COUNT(*), COALESCE(MAX(updated_at)::text, '') FROM osrm_snap_hints;" 2>/dev/null || true - } | oi_hash_stdin - )" derive_signature="$( { printf 'import=%s\n' "$import_signature" printf 'derive_sql=%s\n' "$derive_sql_signature" printf 'derive_code=%s\n' "$derive_code_signature" printf 'relation_cache=%s\n' "$relation_cache_signature" - printf 'reachability=%s\n' "$reachability_signature" } | oi_hash_stdin )" diff --git a/docs/data_contract_draft.md b/docs/data_contract_draft.md index 0835ab2..19ab947 100644 --- a/docs/data_contract_draft.md +++ b/docs/data_contract_draft.md @@ -90,35 +90,6 @@ Draft key fields: - `brand` - `geometry_geojson` -### exit_place_links - -Represents link relationships between exits and places. - -Draft key fields: - -- `exit_id` -- `place_id` -- `category` -- `distance_m` -- `rank` - -### exit_place_scores - -Represents reachability and ranking metadata for a link. - -Draft key fields: - -- `exit_id` -- `place_id` -- `route_distance_m` -- `route_duration_s` -- `reachable` -- `reachability_score` -- `reachability_confidence` -- `provider` -- `provider_dataset_version` -- `updated_at` - ### reference_routes Represents route artifacts used for exploration and QA. diff --git a/docs/naming_glossary.md b/docs/naming_glossary.md index bc5f0b5..0852583 100644 --- a/docs/naming_glossary.md +++ b/docs/naming_glossary.md @@ -24,14 +24,6 @@ A raw or source exit record that maps to a corridor exit. A point or area of interest reachable from an exit. -### Exit-Place Link - -A candidate or selected relationship between an exit and a place. - -### Exit-Place Score - -Reachability or ranking metadata attached to an exit-place link. - ### Reference Route A route artifact intended for exploration, QA, examples, and simulation. @@ -55,19 +47,11 @@ Useful internally, but too implementation-specific for most public docs and APIs Preferred replacement: `corridor exit`, `normalized exit`, or a more specific term tied to the actual object. -### Candidate - -Useful internally, but vague in public docs unless paired with a clearer object. - -Preferred replacement: `exit-place link` or `draft link`, depending on context. - ## Retired Internal Names - `highway_edges` -> `corridor_edges` - `canonical_exits` -> `corridor_exits` - `canonical_exit_aliases` -> `exit_aliases` - `pois` -> `places` -- `exit_poi_candidates` -> `exit_place_links` -- `exit_poi_reachability` -> `exit_place_scores` - `reference_routes` is the preferred public term for route artifacts - `reference_route_anchors` is the preferred public term for route anchor points diff --git a/schema/bootstrap.sql b/schema/bootstrap.sql index 4c2f14b..f9335d4 100644 --- a/schema/bootstrap.sql +++ b/schema/bootstrap.sql @@ -181,19 +181,3 @@ CREATE TABLE IF NOT EXISTS exit_poi_reachability ( CREATE INDEX IF NOT EXISTS exit_poi_reachability_exit_idx ON exit_poi_reachability (exit_id); -CREATE TABLE IF NOT EXISTS osrm_snap_hints ( - source_scope TEXT NOT NULL, - endpoint_kind TEXT NOT NULL, - endpoint_id TEXT NOT NULL, - dataset_key TEXT NOT NULL, - input_lon DOUBLE PRECISION NOT NULL, - input_lat DOUBLE PRECISION NOT NULL, - snapped_lon DOUBLE PRECISION NOT NULL, - snapped_lat DOUBLE PRECISION NOT NULL, - hint TEXT NOT NULL, - snapped_distance_m DOUBLE PRECISION, - updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), - PRIMARY KEY (source_scope, endpoint_kind, endpoint_id, dataset_key) -); -CREATE INDEX IF NOT EXISTS osrm_snap_hints_lookup_idx - ON osrm_snap_hints (source_scope, endpoint_kind, dataset_key); diff --git a/schema/derive.sql b/schema/derive.sql index 99d07b6..4be2b01 100644 --- a/schema/derive.sql +++ b/schema/derive.sql @@ -196,23 +196,6 @@ CREATE TABLE IF NOT EXISTS exit_poi_reachability ( CREATE INDEX IF NOT EXISTS exit_poi_reachability_exit_idx ON exit_poi_reachability (exit_id); -CREATE TABLE IF NOT EXISTS osrm_snap_hints ( - source_scope TEXT NOT NULL, - endpoint_kind TEXT NOT NULL, - endpoint_id TEXT NOT NULL, - dataset_key TEXT NOT NULL, - input_lon DOUBLE PRECISION NOT NULL, - input_lat DOUBLE PRECISION NOT NULL, - snapped_lon DOUBLE PRECISION NOT NULL, - snapped_lat DOUBLE PRECISION NOT NULL, - hint TEXT NOT NULL, - snapped_distance_m DOUBLE PRECISION, - updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), - PRIMARY KEY (source_scope, endpoint_kind, endpoint_id, dataset_key) -); -CREATE INDEX IF NOT EXISTS osrm_snap_hints_lookup_idx - ON osrm_snap_hints (source_scope, endpoint_kind, dataset_key); - DO $$ BEGIN IF to_regclass('public.osm2pgsql_v2_exits_nodes') IS NULL @@ -351,6 +334,7 @@ FROM ( FROM osm2pgsql_v2_poi_ways w ) src; + INSERT INTO exit_poi_candidates (exit_id, poi_id, category, distance_m, rank) SELECT exit_id, poi_id, category, distance_m, rank FROM ( @@ -380,164 +364,6 @@ FROM ( ) ranked WHERE rank <= 12; --- Reuse existing reachability rows within canonical alias groups so we do not --- require a full recompute when equivalent exit copies change during derive. -WITH propagated AS ( - INSERT INTO exit_poi_reachability ( - exit_id, - poi_id, - route_distance_m, - route_duration_s, - reachable, - reachability_score, - reachability_confidence, - provider, - provider_dataset_version, - updated_at - ) - SELECT - ranked.dst_exit_id, - ranked.poi_id, - ranked.route_distance_m, - ranked.route_duration_s, - ranked.reachable, - ranked.reachability_score, - ranked.reachability_confidence, - COALESCE(ranked.provider, 'osrm'), - ranked.provider_dataset_version, - NOW() - FROM ( - SELECT - c.exit_id AS dst_exit_id, - c.poi_id, - r.route_distance_m, - r.route_duration_s, - r.reachable, - r.reachability_score, - r.reachability_confidence, - r.provider, - r.provider_dataset_version, - ROW_NUMBER() OVER ( - PARTITION BY c.exit_id, c.poi_id - ORDER BY - CASE WHEN r.reachable THEN 0 ELSE 1 END, - CASE WHEN r.route_duration_s IS NULL THEN 1 ELSE 0 END, - r.route_duration_s, - r.route_distance_m - ) AS rn - FROM exit_poi_candidates c - JOIN canonical_exit_aliases dst - ON dst.exit_id = c.exit_id - JOIN canonical_exit_aliases src - ON src.canonical_id = dst.canonical_id - AND src.exit_id <> dst.exit_id - JOIN exit_poi_reachability r - ON r.exit_id = src.exit_id - AND r.poi_id = c.poi_id - LEFT JOIN exit_poi_reachability existing - ON existing.exit_id = c.exit_id - AND existing.poi_id = c.poi_id - WHERE existing.exit_id IS NULL - ) ranked - WHERE ranked.rn = 1 - ON CONFLICT (exit_id, poi_id) DO NOTHING - RETURNING 1 -) -SELECT COUNT(*) AS propagated_reachability_rows FROM propagated; - --- Keep candidates aligned with known reachability truth from existing rows: --- explicitly unreachable pairs should not ship in published link sets. -DELETE FROM exit_poi_candidates c -USING exit_poi_reachability r -WHERE r.exit_id = c.exit_id - AND r.poi_id = c.poi_id - AND r.reachable = FALSE; - --- When multiple nearby exits in the same canonical travel direction point to the --- same POI, keep only the fastest-known link for that corridor context when --- reachability timing exists. -WITH candidate_contexts AS ( - SELECT - c.exit_id, - c.poi_id, - c.distance_m, - ce.highway, - ce.direction, - ce.sequence_index, - COALESCE(r.reachable, FALSE) AS reachable, - r.route_duration_s - FROM exit_poi_candidates c - JOIN canonical_exit_aliases cea - ON cea.exit_id = c.exit_id - JOIN canonical_exits ce - ON ce.id = cea.canonical_id - LEFT JOIN exit_poi_reachability r - ON r.exit_id = c.exit_id - AND r.poi_id = c.poi_id - WHERE ce.direction IN ('north', 'south', 'east', 'west') -), -competing_contexts AS ( - SELECT - cc.poi_id, - cc.highway, - cc.direction - FROM candidate_contexts cc - GROUP BY cc.poi_id, cc.highway, cc.direction - HAVING COUNT(*) > 1 - AND COUNT(*) FILTER (WHERE cc.route_duration_s IS NOT NULL) > 0 -), -ranked AS ( - SELECT - cc.exit_id, - cc.poi_id, - cc.highway, - cc.direction, - ROW_NUMBER() OVER ( - PARTITION BY cc.poi_id, cc.highway, cc.direction - ORDER BY - CASE WHEN cc.reachable THEN 0 ELSE 1 END, - CASE WHEN cc.route_duration_s IS NULL THEN 1 ELSE 0 END, - cc.route_duration_s, - cc.distance_m, - cc.sequence_index, - cc.exit_id - ) AS rn - FROM candidate_contexts cc - JOIN competing_contexts cmp - ON cmp.poi_id = cc.poi_id - AND cmp.highway = cc.highway - AND cmp.direction = cc.direction -), -winners AS ( - SELECT DISTINCT - r.exit_id, - r.poi_id - FROM ranked r - WHERE r.rn = 1 -), -losers AS ( - SELECT DISTINCT - r.exit_id, - r.poi_id - FROM ranked r - WHERE r.rn > 1 - AND NOT EXISTS ( - SELECT 1 - FROM winners w - WHERE w.exit_id = r.exit_id - AND w.poi_id = r.poi_id - ) -), -removed_competing_exit_links AS ( - DELETE FROM exit_poi_candidates c - USING losers l - WHERE c.exit_id = l.exit_id - AND c.poi_id = l.poi_id - RETURNING 1 -) -SELECT COUNT(*) AS removed_competing_exit_links -FROM removed_competing_exit_links; - -- Drop direction-labeled rest areas that explicitly conflict with exit travel -- direction (for example, "eastbound" at a westbound exit). WITH directional_labels AS ( @@ -602,110 +428,6 @@ USING mismatched m WHERE c.exit_id = m.exit_id AND c.poi_id = m.poi_id; --- For rest areas that encode opposing bound labels (northbound/southbound or --- eastbound/westbound), keep only the best route candidate per axis at an exit. --- This avoids showing both sides of divided-highway rest areas when one option --- effectively requires a long crossover/U-turn path. -WITH directional_restareas AS ( - SELECT - c.exit_id, - c.poi_id, - c.distance_m, - CASE - WHEN label.poi_label ~ '(^|[^a-z])(northbound|north[[:space:]]*bound|nb)([^a-z]|$)' THEN 'north' - WHEN label.poi_label ~ '(^|[^a-z])(southbound|south[[:space:]]*bound|sb)([^a-z]|$)' THEN 'south' - WHEN label.poi_label ~ '(^|[^a-z])(eastbound|east[[:space:]]*bound|eb)([^a-z]|$)' THEN 'east' - WHEN label.poi_label ~ '(^|[^a-z])(westbound|west[[:space:]]*bound|wb)([^a-z]|$)' THEN 'west' - ELSE NULL - END AS token_dir, - CASE - WHEN label.poi_label ~ '(^|[^a-z])(northbound|north[[:space:]]*bound|nb|southbound|south[[:space:]]*bound|sb)([^a-z]|$)' THEN 'ns' - WHEN label.poi_label ~ '(^|[^a-z])(eastbound|east[[:space:]]*bound|eb|westbound|west[[:space:]]*bound|wb)([^a-z]|$)' THEN 'ew' - ELSE NULL - END AS axis, - r.reachable, - r.route_duration_s - FROM exit_poi_candidates c - JOIN pois p ON p.id = c.poi_id - LEFT JOIN exit_poi_reachability r - ON r.exit_id = c.exit_id - AND r.poi_id = c.poi_id - CROSS JOIN LATERAL ( - SELECT LOWER(TRIM(COALESCE(NULLIF(p.display_name, ''), NULLIF(p.name, ''), NULLIF(p.tags_json ->> 'name', ''), ''))) AS poi_label - ) label - WHERE c.category = 'restArea' -), -opposed_axes AS ( - SELECT - dr.exit_id, - dr.axis - FROM directional_restareas dr - WHERE dr.axis IS NOT NULL - AND dr.token_dir IS NOT NULL - GROUP BY dr.exit_id, dr.axis - HAVING COUNT(DISTINCT dr.token_dir) > 1 -), -ranked AS ( - SELECT - dr.exit_id, - dr.poi_id, - ROW_NUMBER() OVER ( - PARTITION BY dr.exit_id, dr.axis - ORDER BY - CASE WHEN COALESCE(dr.reachable, FALSE) THEN 0 ELSE 1 END, - CASE WHEN dr.route_duration_s IS NULL THEN 1 ELSE 0 END, - dr.route_duration_s, - dr.distance_m, - dr.poi_id - ) AS rn - FROM directional_restareas dr - JOIN opposed_axes oa - ON oa.exit_id = dr.exit_id - AND oa.axis = dr.axis -) -DELETE FROM exit_poi_candidates c -USING ranked r -WHERE c.exit_id = r.exit_id - AND c.poi_id = r.poi_id - AND r.rn > 1; - --- Keep each rest area / welcome center anchored to a single best exit per --- travel direction to prevent duplicate cards while paginating long corridors. -WITH ranked_restarea_links AS ( - SELECT - c.exit_id, - c.poi_id, - ROW_NUMBER() OVER ( - PARTITION BY - c.poi_id, - CASE - WHEN LOWER(TRIM(COALESCE(ec.direction, e.direction, ''))) IN ('west', 'w', 'wb') THEN 'west' - WHEN LOWER(TRIM(COALESCE(ec.direction, e.direction, ''))) IN ('east', 'e', 'eb') THEN 'east' - WHEN LOWER(TRIM(COALESCE(ec.direction, e.direction, ''))) IN ('north', 'n', 'nb') THEN 'north' - WHEN LOWER(TRIM(COALESCE(ec.direction, e.direction, ''))) IN ('south', 's', 'sb') THEN 'south' - ELSE 'unknown' - END - ORDER BY - CASE WHEN COALESCE(r.reachable, FALSE) THEN 0 ELSE 1 END, - CASE WHEN r.route_duration_s IS NULL THEN 1 ELSE 0 END, - r.route_duration_s, - c.distance_m, - c.exit_id - ) AS rn - FROM exit_poi_candidates c - JOIN exits e ON e.id = c.exit_id - LEFT JOIN exit_corridors ec ON ec.exit_id = c.exit_id - LEFT JOIN exit_poi_reachability r - ON r.exit_id = c.exit_id - AND r.poi_id = c.poi_id - WHERE c.category = 'restArea' -) -DELETE FROM exit_poi_candidates c -USING ranked_restarea_links ranked -WHERE c.exit_id = ranked.exit_id - AND c.poi_id = ranked.poi_id - AND ranked.rn > 1; - -- highway_edges, exit_corridors, corridors, and corridor_exits are rebuilt -- by openinterstate-derive steps that run after this SQL in the pipeline: -- 1. --build-graph-only -> highway_edges + exit_corridors diff --git a/tooling/export_release.py b/tooling/export_release.py index 431e490..90d4e1a 100755 --- a/tooling/export_release.py +++ b/tooling/export_release.py @@ -472,28 +472,6 @@ def build_export_specs(interstate_filter: str = INTERSTATE_FILTER) -> list[Expor ORDER BY epc.exit_id, epc.poi_id """, ), - ExportSpec( - name="exit_place_scores", - filename="exit_place_scores.csv", - query=f""" - SELECT - epr.exit_id, - epr.poi_id AS place_id, - epr.route_distance_m, - epr.route_duration_s, - epr.reachable, - epr.reachability_score, - epr.reachability_confidence, - epr.provider, - epr.provider_dataset_version, - epr.updated_at - FROM exit_poi_reachability epr - JOIN corridor_exits ce ON ce.exit_id = epr.exit_id - JOIN corridors c USING (corridor_id) - WHERE c.highway ~ '{interstate_filter}' - ORDER BY epr.exit_id, epr.poi_id - """, - ), ExportSpec( name="reference_routes", filename="reference_routes.csv", From 6880e103985931a7c43eceb1dd44c0c05b41db42 Mon Sep 17 00:00:00 2001 From: Tom Johnell Date: Fri, 27 Mar 2026 12:59:47 -0500 Subject: [PATCH 2/2] Fix doc references: keep exit_place_links, remove exit_place_scores - Remove exit_place_scores.csv from release_build.md and release_format.md - Restore exit_place_links section in data_contract_draft.md - Restore Exit-Place Link term, Candidate term, and exit_poi_candidates rename entry in naming_glossary.md - Only exit_poi_reachability -> exit_place_scores mapping removed Co-Authored-By: Claude Opus 4.6 --- docs/data_contract_draft.md | 12 ++++++++++++ docs/naming_glossary.md | 11 +++++++++++ docs/release_build.md | 3 +-- docs/release_format.md | 1 - 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/docs/data_contract_draft.md b/docs/data_contract_draft.md index 19ab947..c28c340 100644 --- a/docs/data_contract_draft.md +++ b/docs/data_contract_draft.md @@ -90,6 +90,18 @@ Draft key fields: - `brand` - `geometry_geojson` +### exit_place_links + +Represents link relationships between exits and places. + +Draft key fields: + +- `exit_id` +- `place_id` +- `category` +- `distance_m` +- `rank` + ### reference_routes Represents route artifacts used for exploration and QA. diff --git a/docs/naming_glossary.md b/docs/naming_glossary.md index 0852583..9b67d8a 100644 --- a/docs/naming_glossary.md +++ b/docs/naming_glossary.md @@ -24,6 +24,10 @@ A raw or source exit record that maps to a corridor exit. A point or area of interest reachable from an exit. +### Exit-Place Link + +A candidate or selected relationship between an exit and a place. + ### Reference Route A route artifact intended for exploration, QA, examples, and simulation. @@ -47,11 +51,18 @@ Useful internally, but too implementation-specific for most public docs and APIs Preferred replacement: `corridor exit`, `normalized exit`, or a more specific term tied to the actual object. +### Candidate + +Useful internally, but vague in public docs unless paired with a clearer object. + +Preferred replacement: `exit-place link` or `draft link`, depending on context. + ## Retired Internal Names - `highway_edges` -> `corridor_edges` - `canonical_exits` -> `corridor_exits` - `canonical_exit_aliases` -> `exit_aliases` - `pois` -> `places` +- `exit_poi_candidates` -> `exit_place_links` - `reference_routes` is the preferred public term for route artifacts - `reference_route_anchors` is the preferred public term for route anchor points diff --git a/docs/release_build.md b/docs/release_build.md index d2e8e88..ba3523d 100644 --- a/docs/release_build.md +++ b/docs/release_build.md @@ -117,8 +117,7 @@ changed. 4. `csv/exit_aliases.csv` 5. `csv/places.csv` 6. `csv/exit_place_links.csv` -7. `csv/exit_place_scores.csv` -8. `csv/reference_routes.csv` +7. `csv/reference_routes.csv` 9. `gpx/reference_routes.gpx.zip` 10. `examples/sample_corridors.geojson` 11. `manifest.json` diff --git a/docs/release_format.md b/docs/release_format.md index 6d55c64..493d13f 100644 --- a/docs/release_format.md +++ b/docs/release_format.md @@ -34,7 +34,6 @@ release-YYYY-MM-DD/ exit_aliases.csv places.csv exit_place_links.csv - exit_place_scores.csv reference_routes.csv gpx/ reference_routes.gpx.zip