dacekroberts
@dacekroberts
Public Skills
publish-city
by dacekroberts
Take finished city work from a branch to the live site - the gate order, which checks catch what, when a full deploy-verify is required versus wasteful, and why landing app/ on master IS deploying. Use when a built city is ready to go public, when merging an app-touching branch to master, or when asked to publish or deploy. Not for building a city (add-city) and not for pipeline-only work, which never reaches the deployed app at all.
osm-rail
by dacekroberts
Build a city's rail leg from OpenStreetMap instead of GTFS - when that is justified, how to derive stations without losing a line, and the traps OSM has that no transit feed has. Use when a city's agency publishes no reachable or current feed, or when a feed is stale or incomplete. Not a replacement for add-city Step 4; it is that step's OSM branch.
efficiency-review
by dacekroberts
Review HOW this project's work gets done - merges and their conflicts, catch-ups, re-renders, approvals, what every session loads, downstream messages - from git history and file sizes, and return a ranked list of findings with evidence, a weekly saving and whose habit each is (owner, session or structure), plus the top three changes. Use when the owner asks for a process or efficiency review, and for the weekly numbers at the archive sitting. Not a code review, and not for auditing the maps (consistency-sweep).
read-licence
by dacekroberts
Establish what a data source's terms actually permit, before building on it or publishing anything derived from it. Follows every pointer a licence makes, separates website terms from dataset terms, and looks for terms incorporated by reference. Use when adding a source, when a licence position is recorded as unresolved, or before a public deploy - not for re-reading a source whose terms are already established in docs/data_sources.md.
add-country
by dacekroberts
Profile a whole country before screening any of its cities - does it license businesses municipally, publish open portals, run urban rail, carve personal information out of its licences, and have a geocoder. Use when the task is "can we add <country>" or "what other countries could this project cover", or before the first city in a country this project has never built in. Not for adding a city in a country already profiled - that is add-city.
japan-city
by dacekroberts
Build a Japanese city on the shared modules Kobe built - japan_step1 (MLIT N02 rail cut at the N03 city line, collapsed on N02's station-group code, English names from OSM), japan_step2 (the city's permit lists through the japan_eigyo taxonomy and the MLIT block join, the owner's name rule), the owner's standing calls, the traps Kobe measured, the notices, and a sheet per city (Osaka, Sapporo, Fukuoka, Kyoto and Tokyo built, with what each left the next - Tokyo's service routes, line-code labels and built credits for any big network). Use for any Japanese city after Kobe; read with add-city, address-join, cjk-text and publish-city, which it does not replace.
tram-city
by dacekroberts
Build a trams-only city outside France and Czechia - the ten T1 cities in seven countries (Odense, Daugavpils, Liepāja, Kansas City, New Orleans, Tucson, Florence, Zurich, Göteborg, Den Haag) - with what every trams-only map shares - the owner's trams-only calls, rings by the spacing rule, no stop thinning anywhere (New Orleans included), gate 3 against the operator's own stop counts in every city, the light-rail test, the shared OSM tram step 1, rolling feeds, OSM rail, the currency rule, one-bucket and narrowed pages, the macro map's mode and coverage keys, and the page text the owner approved - plus a sheet per city pointing at its country's built template. Read with the city's brief, add-city, osm-rail and publish-city, which it does not replace.
map-view
by dacekroberts
Make sure a city map opens at the right zoom, and verify it the way that actually catches the failure. Use when a map looks zoomed out (or in) on load, after any change to the fit logic in pipeline/map_common.py, when publishing a city, and when checking the live site after a reboot. Covers the recurring fit race, the self-correcting guard that answers it, and scripts/check_map_view.js.
consistency-sweep
by dacekroberts
Audit what the build and research sessions leave behind - stale prose written in the future tense, hand-kept counts that drifted, cross-references broken by renumbering, sources in use with no licence read, tables that stopped rendering, orphaned branches and worktrees. Use when asked to check whether the project's own documents are still true, to clean up after a city or country landed, or when a session is claiming the cleanup role. Not for building a city (add-city) or screening one (add-country).
add-city
by dacekroberts
Add a new city to the expanded-heatmap project - live-verify its real data sources, scaffold its pipeline, build its transit/business heatmap, and wire it into the Streamlit app. Use whenever the task is "add city X" or "build out city X" for this project, not for edits to an already-built city.
scaffold-city
by dacekroberts
Generate the shared skeleton of a new city for expanded-heatmap (pipeline config, map script, app page, cities.py entry, and a skeleton taxonomy module if the city needs its own) with scripts/scaffold_city.py, and say which built city to copy for the steps it does not generate. Use right after add-city's Step 0 passes, when starting to build a city - not for edits to a built one.
cjk-text
by dacekroberts
Read, match and display Chinese, Japanese and Korean text in a city's data and on its map - console and file encodings on Windows, bilingual OSM names, choosing a language edition, normalising CJK text before any match or de-duplication, the privacy check's blindness to CJK names, and the font order that decides which glyph forms a reader sees. Use before and during any city whose data carries Han, kana or Hangul - Hong Kong, the Taiwanese cities, Seoul and the Japanese cities - alongside add-city and address-join. Not for Latin-script cities.
multi-source-city
by dacekroberts
Assemble a city's business coverage from several registries when no single one covers all three buckets - diagnose it, find a source per bucket, wire the dispatching taxonomy, and run the licence and privacy checks that every added source multiplies. Use when a city's best business dataset turns out to be activity-specific permits rather than a general register (New York and Philadelphia both are), or when a bucket comes back empty.
decisions-entry
by dacekroberts
Use when adding an entry to DECISIONS.md - after any judgment call, scope change, bug fix with a wrong-number consequence, city added or ruled out, superseded earlier decision, or pipeline verification run. Encodes the log's format and voice so entries stay consistent instead of being re-derived each time.
taiwan-city
by dacekroberts
Build a Taiwanese city on the national modules Taichung built - the tax register reader, the door-plate join with its district-code mapping, the owner's name rule and head-office rule, OGDL v1's load-bearing attribution - plus the traps Taichung measured and a sheet for Taoyuan and Taipei (Regional). Use for any Taiwanese city after Taichung; read with add-city, osm-rail, address-join and cjk-text, which it does not replace.
address-join
by dacekroberts
Place a register's rows on the map by JOINING them to an address file that already carries coordinates, instead of writing a geocoder - find that file, measure the join against a control that must reproduce, report tiers, read the misses. Use when a business register has addresses but no coordinates (Taiwan, Japan, Rome), before any geocoder is written, and when choosing between a join and a per-row geocode. Not for registers that already carry coordinates.
pipeline-drift-check
by dacekroberts
Use after changing any pipeline/*/.py script (a city's step files, pipeline/map_common.py, pipeline/taxonomies/), or when asked to verify the committed outputs/ still match what the pipeline actually produces. Re-runs every city's pipeline and diffs the result against git HEAD, including the one non-obvious step Folium's HTML needs (normalizing its random per-render element IDs) before a diff is trustworthy. Needs at least one commit to diff against.
tokyo-ward
by dacekroberts
Add one of Tokyo's 23 special wards to the Tokyo map as its own source - each ward is its own publisher, with its own file, format, date, licence, credit and completeness. Covers the ward card (the fields a ward must have before it goes on), the owner's rule for which wards go on, how a ward becomes a config entry on the shared Japanese steps (source_rows, SOURCE_MUNICIPALITY, SUPERSEDES for MHLW's slice), the per-ward share of the official count that the page states, and the traps the eight known wards taught. Use for the Tokyo build and whenever a missing ward's data turns up; read with japan-city, which it does not replace.
reprobe-city
by dacekroberts
Re-probe a city that screening left thin - ask the city's OWN host, enumerate its whole catalogue, read who a 403 is for, and look for a second layer in a different shape (a building register's use class) - then measure the new shape's defect, control each layer, read licences in parallel and record. Use for every row in the master list's open screening gap, and for the built one-bucket cities (Stockholm, Göteborg, Zurich, Bucharest) to find out whether a second source exists. Not for a city screened for the first time - that is add-city Step 0.
premises-taxonomy
by dacekroberts
Build a city's classification module when its register uses a local taxonomy rather than NAICS - choosing which LEVEL of a multi-level scheme to key on, finding the catch-alls, and deciding whether a catch-all can be dispatched or must be dropped. Use when add-city Step 1 finds a non-NAICS classification, when scaffold-city has written an empty taxonomy skeleton, or when a bucket's counts look wrong after step 2. Not for a NAICS city (naics.py is complete) and not for choosing a city (add-city Step 0).
czech-tram-city
by dacekroberts
Build a Czech tram city - the six Czech T1 cities (Brno, Ostrava, Plzeň, Olomouc, Liberec with Jablonec, Most with Litvínov) - on the national chain Prague built - ROS02 establishments, RES activity and the RÚIAN join, with their traps; the per-city RÚIAN coordinate control; the two-obec change a regional city needs; the tram leg (Brno's stops from KORDIS's CC BY feed, everything else from OpenStreetMap through the shared osm_tram module); the scope calls, halved rings, UTM per city (Ostrava 34N), the notices, the page-text template and a sheet per city. Use for any Czech city after Prague, with the city's brief; read with add-city, osm-rail and publish-city, which it does not replace.
france-tram-city
by dacekroberts
Build a French tram city - the 21-city France batch (Angers built mark-free) - on what Paris, Marseille, Toulouse, Lille and Rennes built - the SIRENE chain and its traps, the tram leg from each city's own rolling feed (mode flags lie), the owner's pure-extract station rule, the commune-or-regional scope call, 0.3 mi rings, the notices per licence, the page text the owner approved word for word, and a sheet per city. Use for any French city after Rennes, with scripts/scaffold_france_batch.py and the city's brief; read with add-city, osm-rail and publish-city, which it does not replace.
brazil-city
by dacekroberts
Build a Brazilian city on the national CNEFE modules - what São Paulo already built, what each city adds, the traps São Paulo measured, the owner's standing calls, and a sheet for each of the eight cities still to build. Use for any Brazilian city after São Paulo; read with add-city, osm-rail and publish-city, which it does not replace.