Changes
What the people and agents building Society have changed, newest first.
-
Loaded Finland's President, Government, Parliament (200 members) and top courts
Presidency (Stubb), Government of Finland (PM Orpo, Deputy PM and 18 ministers, 19 persons), Parliament of Finland with 13 electoral-district seats and all 200 current members with parliamentary group party, Speaker Halla-aho, Supreme Court and Supreme Administrative Court presidents, 9 parties, fi/sv names, powers, next parliamentary election 2027-04-18 and presidential 2030-01-27, about 150 photos from Wikimedia Commons. Sources: Eduskunta open data API, court sites, Wikipedia for the Government (valtioneuvosto.fi blocked). Regions fi-01..19 got fi/sv names; regional governments not loaded (tickets).
-
Loaded Austria's federal government, parliament, courts and 9 state governors
Presidency (Van der Bellen); Government of Austria: Chancellor Stocker, Vice-Chancellor Babler and 13 ministers (bundeskanzleramt.gv.at); National Council 183 members and Presidium, Federal Council 60 members and President (parlament.gv.at live person list, 5 parties); Constitutional Court 14 judges (vfgh.gv.at) and Supreme Court President Kodek; 9 state governments with current Landeshauptleute (note Salzburg: Edtstadler since 2025-07-02; Carinthia: Fellner since 2026-04-07) and 9 Landtag offices with seat counts; 7 power rows; contests for the next National Council and presidential elections (legal latest dates); 116 Wikimedia Commons photos. State names switched to English with German names added. Gaps ticketed: seat splits, Bundesrat per state, ministers' parties, state election dates, Landtag members. Linked page is the country page.
-
Loaded Australia's federal government, Parliament (150 MPs, 76 senators) and High Court
Government of Australia: PM, Deputy PM and 49 portfolio offices (23 cabinet + 7 outer ministers, held); House of Representatives: 150 division seats and members with parties, Speaker; Senate: 8 state/territory seats (76 senators), President; High Court: Chief Justice + 6 justices; Governor-General Sam Mostyn and King Charles III on the existing Crown in Australia; 8 constitutional power rows; next House (latest 2028-09-23) and half-Senate (latest 2028-05-20) elections; 8 new parties; Heard Island membership; ~166 Wikimedia photos. Sources: aph.gov.au member and senator lists (official), pm.gov.au ministry, Wikipedia/Wikidata fallbacks for start dates, justices and election dates. /places/au also lists them; the authority page is the representative link.
Tickets: #517
-
Loaded Ireland's President, Government, Oireachtas (174 TDs, 59 senators) and Supreme Court
Presidency (Catherine Connolly), Government (Taoiseach, Tánaiste and 18 ministerial offices held by 15 ministers after the Nov 2025 reshuffle), Dáil (43 constituencies, 174 members), Seanad (7 panels/universities and 11 nominated, 59 of 60 seats filled; by-election 2026-11-06), Supreme Court (Chief Justice and 7 justices), 10 parties, Irish names, 11 powers, next-election contests (Dáil, Seanad, President latest-possible dates). Provinces recorded as having no government. Sources: Oireachtas Open Data API, supremecourt.ie, Constitution of Ireland; Wikidata/Wikipedia fallbacks noted in fact_source. 225 Wikimedia Commons photos.
-
King Frederik X; Frederiksen III government formed 3 June 2026 (PM + 20 ministers); Folketing elected 24 March 2026: 179 members (175 + 2 Greenland + 2 Faroe) with party and constituency, Speaker Henrik Frandsen (from 6 Oct 2026); 16 parties; Supreme Court president; regional councils with chairs (Hovedstaden/Sjælland merge into Østdanmark 2027); 6 powers; next-election contests; 13 photos. Sources: Folketinget open data (oda.ft.dk), Wikipedia/lex.dk fallbacks. Greenland and Faroe governments are loaded by world:dk-realm. Representative page /places/dk.
-
Loaded the Niue government and 20 Assembly members
Head of state (King), Premier, 3 ministers, Speaker and all 20 members of the 19th Niue Assembly (14 villages + 6 common roll), sworn in 13 May 2026. Sources: Government of Niue (gov.nu) and media release, Wikipedia election article. Next election date not announced.
-
Loaded the Cook Islands government and 24 members of Parliament
Head of state (King), King's Representative, Prime Minister, Deputy PM, 3 further ministers, 24 MPs with parties after the 12 Aug 2026 election, 2 parties. Sources: Wikipedia election and cabinet articles (official parliament site not yet updated); see tickets. Cabinet portfolios and Speaker not loaded.
-
Source: Riksdagen open data (349 members with party and constituency, Speaker and 3 deputies, 23 ministers + PM), Valmyndigheten 2026 mandate file (29 constituency seats, 21 regional council sizes), domstol.se (16 justices), Wikidata for county governors (3 checked on lansstyrelsen.se). 22 contests for 8 Sep 2030. 199 photos from Wikimedia Commons. See tickets filed by world:se for gaps.
-
Photo credits on person pages are short: "Photo: <source>" with the licence one tap away
The credit under a portrait is at most two lines, linked to the page the photo came from; short licences (CC BY-SA 4.0, Public domain) show beneath it, and long terms of use (e.g. the Legislative Assembly of Ontario's, 179 characters with a URL) or a credit that might be cut off open from a Licence / Full credit disclosure as a panel beside the page. Kinga Surma's name now sits beside her photo instead of above a 20-line credit column; no sideways scroll on phones.
Tickets: #484
-
Loaded the governments and parliaments of Switzerland's 26 cantons
26 cantonal governments (25 with current members: 149 members and 25 presidents; Obwalden has no holders yet), 26 cantonal parliament offices with seat counts and electoral systems, 58 official-language names, 17 next-election contests (FR, VD, LU, ZH, TI, BL, SG, BS and an Aargau by-election). Members verified on cantonal sites 2026-10-12; parties for continuing members from the German Wikipedia list. Representative page: Zurich. Tickets filed for OW, ZG, AG, BL and missing election dates.
-
Loaded the Faroe Islands' government, Løgting (32 of 33 members) and High Commissioner
Prime Minister Beinir Johannesen (elected 13 Apr 2026 after the 26 Mar 2026 election) and 6 ministers, 32 Løgting members with party, Speaker Johan Dahl, 7 parties, powers, next election (derived 2030). Source: Wikipedia (en/fo)/Wikidata fallback. Membership dk->fo added.
-
Loaded Greenland's government, Inatsisartut (31 members) and High Commissioner
3 authorities + High Commissioner office, Premier Jens-Frederik Nielsen and 9 ministers, 31 Inatsisartut members with party, Speaker, 5 parties, powers, next election (derived 2029). Siumut left the coalition 13 Mar 2026. Source: Wikipedia/Wikidata fallback (official sites unreachable). Membership dk->gl added.
-
Loaded Switzerland's federal government, Federal Assembly and Federal Supreme Court
Authorities: Federal Assembly, National Council (200 members, 26 canton seats), Council of States (46 members, 26 canton seats), Federal Council (7 members, President Parmelin 2026), Federal Chancellery (Viktor Rossi), Federal Supreme Court (President François Chaix). 254 current federal officeholders with parties from the parlament.ch web service, 251 with Commons photo links. 12 parties, 11 powers with constitution articles, de/fr/it/rm names, contests: National Council and Council of States 2027-10-24, Federal Council by-election 2026-12-09. Justices of the Federal Supreme Court not yet loaded. Cantons (26) existed from the regional load.
-
Loaded Chile's president, cabinet, Congress and regional governments
1 president, 25 ministries with holders, 155 deputies (Chamber open-data feed), 50 senators in 16 regional seats with official portraits (Senate list), 16 regional governors, 16 presidential delegates, 16 regional councils (302 seats), Supreme and Constitutional Courts (offices only, president of the Supreme Court), 3 scheduled 2029-11-18 contests (date computed from rule, unconfirmed). Cabinet, governors and delegates come from Wikipedia/Wikidata because gob.cl was unreachable. Representative page: /places/cl. Gaps in tickets 606-615.
Tickets: #606, #607, #608, #609, #610, #611, #612, #613, #614, #615
-
Loaded Belgium's King, federal government, Chamber of Representatives and three regional governments
Crown (King Philippe), Federal Government (Prime Minister De Wever + 14 ministers, sworn in 3 Feb 2025), Federal Parliament with Chamber (150 members with party, from dekamer.be) and Senate (offices only, members missing), Constitutional Court and Court of Cassation (offices only), Minister-Presidents and parliament offices of Flanders, Wallonia and Brussels (Brussels changed 14 Feb 2026), 10 parties, powers cited to the Constitution, nl/fr/de names for main bodies, next federal and regional election placeholders (June 2029). Government and regional heads from Wikipedia/Wikidata because official sites were blocked; see tickets. 170 terms.
-
Lookups outside Canada name members in full instead of made-up initials
Office titles shorten to initials only for ones people use (MP, MLA, MPP, MNA, MHA, MLC, MSP, MEP). Munich now reads "57 members of the Bundestag, elected from the party list for Bayern" (was "Your representative: 57 MBs"), Tokyo "127 members of the Metropolitan Assembly" (was "127 MMAs"). Japanese prefecture votes on /elections are grouped as prefectural elections. Canadian lookups are unchanged (compared text before and after for 6 lookups and 2 places).
Tickets: #490
-
National: King Willem-Alexander; Jetten cabinet (18 ministers, sworn in 2026-02-23); House of Representatives 150 members with groups, Speaker Thom van Campen; Senate 75 members, President Mei Li Vos; Supreme Court president. 12 provinces: King's Commissioner, Provincial Council (570 seats). Contests: provincial elections 2027-03-17, Senate 2027-05-24, House 2030-05-15 (unconfirmed). Sources: Rijksoverheid, Tweede Kamer open data, Eerste Kamer, Constitution; Wikipedia/Wikidata fallbacks noted in fact_source. 8 tickets filed (590-597). Photos not loaded.
-
5 authorities, 28 offices, 255 seats (254 constituencies with the vacant Gangneung seat, plus a 46-member national list seat), 323 current terms (299 Assembly members, 19 cabinet ministers incl. 2 deputy PMs, President Lee Jae Myung, PM Han Seong-sook, Speaker Cho Jeong-sik, Constitutional Court President, Chief Justice), 7 parties, 3 contests (Assembly general election 2028-04-12, Gangneung by-election 2027-04-07, presidential election latest 2030-04-24), 10 powers, Korean names, ~99 Commons photos. Members from the National Assembly open data API; cabinet from Wikipedia (official sites unreachable). Link shows the country page; see tickets for gaps.
-
6 authorities, 28 offices, 346 seats (289 single-member districts + 11 PR blocks for the House of Representatives 465; 45 districts + national list for the House of Councillors 248), 727 people, 750 current terms, 11 parties, 15 powers with Constitution article numbers, 2 scheduled contests (House of Representatives latest legal date 2030-02-07, unconfirmed; House of Councillors 2028-07-25 for 124 seats), 527 Wikimedia photo links. PM Sanae Takaichi (re-designated 2026-02-18 after the 2026-02-08 election; cabinet reshuffled 2026-09-17), Speaker Eisuke Mori. Sources: shugiin.go.jp and sangiin.go.jp rosters, japan.kantei.go.jp, courts.go.jp, Constitution of Japan; English names via Wikidata. Open page shows the Cabinet and Diet; see tickets 582-589 for gaps.
-
Loaded Germany's federal government, Bundestag members, Federal Council and constitutional court
5 authorities (Federal President, Government, Bundestag, Federal Council, Federal Constitutional Court), 27 offices, 630 Bundestag members with party and group (274 constituency seats + 16 state-list seats = 630), Chancellor Merz and 17 ministers incl. the July 2026 reshuffle (Bilger, Linnemann, Warken), President Steinmeier, Bundestag President Klöckner, Bundesrat President Bovenschulte, 16 constitutional court judges, 13 powers, German names, 2 scheduled contests (Federal Convention 2027-01-30; Bundestag by 2029-03-25 at the latest), 415 photos from Wikimedia Commons. Sources: Bundestag MdB-Stammdaten (snapshot 2026-04-29), bundesregierung.de, bundesverfassungsgericht.de; Wikipedia/Wikidata as fallback where noted. Gaps are in tickets. Link shows the country page.
-
Loaded Italy's national government, Parliament and 604 members
President Mattarella, PM Meloni and 24 ministers (governo.it, 2026-10-12, after the Santanche/Mazzi change), Chamber of Deputies (399 of 400 seats filled; Abruzzo U01 vacant, by-election 15-16 Nov 2026) and Senate (200 elected + 5 for life) from the Camera/Senato open-data endpoints; 200 Chamber seat rows (147 single-member colleges + 53 list colleges) and 24 Senate seats; Constitutional Court and Court of Cassation offices (President Amoroso only); 4 scheduled contests; 15 constitutional powers; Italian names for bodies and offices. Gaps in tickets 562-569.
-
France: full ministers, Constitutional Council and top courts added; Senate 2026 renewal applied
Added 19 full ministers (Lecornu II government, current to 22 Sept 2026) to the Government of France; Constitutional Council (9 members, President Richard Ferrand), Court of Cassation (First President Christophe Soulard) and Council of State (Vice-President Marc Guillaume since 2026-05-21) with holders; 11 power rows citing the Constitution; French names for 8 authorities and 9 offices; start_date 2026-10-01 for the 178 senators elected 27 Sept 2026 (provisional) and a new term for Gérard Larcher, re-elected Senate President on 1 Oct 2026 (old term ended 2026-09-30); photos for 26 people from Wikimedia Commons. National Assembly (574 of 577) verified against data.assemblee-nationale.fr: unchanged. Sources: Wikipedia FR (ministers, fallback because info.gouv.fr gave HTTP 403), conseil-constitutionnel.fr, conseil-etat.fr, data.gouv.fr senatoriales 2026, service-public.gouv.fr. Tickets 556-561.
-
Loaded the governors and assemblies of Japan's 47 prefectures with next election dates
47 governors (directly elected, current as of 2026-10-12 incl. new governors in Ishikawa, Fukui, Nagasaki, Okinawa), 47 prefectural assemblies with legal seat counts (2,662 seats total), 90 scheduled contests (Fukushima governor 2026-10-25, Ehime 2026-11-15, Ibaraki assembly 2026-12-13, unified local elections 2027-04-11 unconfirmed), Japanese names, 37 photos (Wikimedia Commons). Outlines already loaded by world:adm1-boundaries. Sources: Japanese Wikipedia governor list, Hiroshima assembly secretariat seat table, prefectural election commissions; Wikidata fallback. Representative page: Fukushima.
-
Authorities 26, offices 45, 155 current terms: President/VP, Premier/Vice Premier and 15 ministers, Speaker, 113 LY members with 76 seat rows (73 districts, 6 indigenous, 34 list) and parties, acting Judicial Yuan president, 21 mayors/magistrates of the 22 divisions with the 2026-11-28 local election contests, 2028 national elections as latest_possible. Sources: Legislative Yuan open data (official), MOJ constitution, Wikidata/Wikipedia fallbacks. Gaps in tickets. Representative page /places/tw.
-
Loaded the governors, prime ministers and parliaments of Sint Maarten
Partial load: Governor, Prime Minister, Estates (seat count) and membership under the Netherlands; ministers and Estates members pending (see tickets). Sources: Rijksoverheid, gobierno.aw, Curaçao Chronicle, Wikipedia (fallback).
-
Loaded the governors, prime ministers and parliaments of Curaçao
Partial load: Governor, Prime Minister, Estates (seat count) and membership under the Netherlands; ministers and Estates members pending (see tickets). Sources: Rijksoverheid, gobierno.aw, Curaçao Chronicle, Wikipedia (fallback).
-
Loaded the governors, prime ministers and parliaments of Aruba
Partial load: Governor, Prime Minister, Estates (seat count) and membership under the Netherlands; ministers and Estates members pending (see tickets). Sources: Rijksoverheid, gobierno.aw, Curaçao Chronicle, Wikipedia (fallback).
-
States, provinces and regions worldwide are recognised and labelled, and can be found by search
Any direct part of a country (oblast, krai, union territory, region, autonomous community...) now shows as "State or region" on cards and place pages, with its own kind named; Elections groups their votes as regional elections; search finds them (Delhi, Moskva, Krasnodar, Île-de-France). Dependent territories read Territory. List seats, reserved seats and names in the holder's own script are shown once loaded. Canada unchanged. Example: Piedmont.
Tickets: #490
-
Loaded the governments and parliaments of Germany's 16 states
16 state governments with current Minister-President (or Governing Mayor / First Mayor / Senate President), 16 state parliaments with size and electoral system, 4 parties, 5 scheduled elections (NW, SH, SL, HB, NI). Berlin, Mecklenburg-Vorpommern and Saxony-Anhalt heads are marked caretaker after the September 2026 elections. Sources: Wikidata and English Wikipedia (fallback). Representative page: Bavaria.
-
Loaded Wallis and Futuna's Administrator Superior and Territorial Assembly offices
Administrator Superior Jean-François de Manheulle (appointed Oct 2025), Territorial Assembly of 20 seats and its president office. Assembly members not loaded (no official roster read). Membership under France added.
Tickets: #179
-
Loaded French Polynesia's High Commissioner, Government and Assembly offices
High Commissioner Alexandre Rochatte, President Moetai Brotherson, Vice-President and 8 ministers from gouvernement.pf, Assembly of 57 seats with president Antony Géros. Assembly members not loaded (assemblee.pf blocked). Membership under France added.
Tickets: #179
-
Loaded New Caledonia's High Commissioner, 19th Government, Congress (54 members) and three provinces
High Commissioner Jacques Billant; Government of 11 (president Milakulo Tukumuli elected 31 July 2026, vice-president Christopher Gygès); Congress of 54 members with groups and province seats (32/15/7), president Virginie Ruffenach; three province jurisdictions with assemblies (40/22/14 seats, members not loaded) and presidents Backès, Néaoutyine, Forrest. Sources: congres.nc, gouv.nc, press. Membership under France added.
Tickets: #179
-
Loaded the governments of Australia's 6 states and 2 self-governing territories
Crown/Governor (or NT Administrator), Premier/Chief Minister with current holders (Victoria Ben Carroll since 28 July 2026, Tasmania Governor Caroline Wells since 17 June 2026), 8 parliaments (14 chambers, seat counts and electoral systems), 11 next-election contests (Victoria 28 Nov 2026, NSW 13 Mar 2027). Jervis Bay Territory marked not applicable. Tasmania elections, MPs and photos pending (tickets). Sources: Wikipedia fallback plus Government House sites and NSW Electoral Commission. Representative page: Victoria.
-
Added Norfolk Island and Indian Ocean Territories administrators and Australian membership
Memberships au->nf, au->x-ioa; 2 Administrator offices with current holders (Fiona McKergow, Farzian Zainal, terms from 2026-06-01); minimal Crown in Australia selector offices. Source: Dept of Infrastructure and ministerial releases (via search summaries; page fetches timed out). No elections (research_done not_applicable).
Tickets: #517
-
7 authorities, 32 offices, 111 seat rows (52 Congress districts totalling 350, 59 Senate districts totalling 208), 15 parties, 10 powers, 165 terms: King Felipe VI, President Sanchez and 22 ministers, presidents of Congress, Senate and both courts, and 137 deputies. Cortes were dissolved on 6 Oct 2026 with an election on 29 Nov 2026; only the Diputacion Permanente deputies remain listed as sitting. Sources: congreso.es open data, lamoncloa.gob.es, Constitution/LOREG (BOE), Euronews. Senators, court magistrates, ministers parties not loaded (tickets).
-
18 regions (ISO 3166-2 codes added to the existing fr-reg-NN rows): 14 regional councils plus Assembly of Corsica, Assembly of Martinique, Assembly of Guyane and Departmental Council of Mayotte, Executive Councils of Corsica and Martinique, 18 regional prefects (appointed by the President, office 25390), 18 contests (March 2028). Members from the RNE of 2026-08-11 (about 1,770 new people, 1,900 terms). Seats, prefects and election date from Wikipedia because Legifrance returns 403. Links to Corsica; same pattern for every region.
-
19 regions: 19 executives, 19 parliaments/assemblies with seat counts, 19 current presidents (incl. new 2026 investitures in Andalusia, Aragon, Castile and Leon, Extremadura and Valencia's Pérez Llorca), 5 parties, 15 next-election rows (4 recently elected regions recorded as research_done). Source: Wikipedia fallback (official sites not fetched); see tickets. Representative page: Community of Madrid.
-
16 executives (16 current holders, terms from 2026-07-01), 16 councils with seat totals, 32 next-election contests (latest_possible 2030-06-30); Gwangju and South Jeolla merged into new unit kr-x-jeonnam-gwangju; Jeonbuk reclassified special self-governing province; Korean names. Source: Wikipedia/Wikidata fallback (NEC not retrieved). Representative page: Seoul.
-
Loaded Italy's 20 regions: presidents, regional councils and next elections
20 region governments with current presidents (incl. 2025 winners in Veneto, Campania, Apulia, Tuscany, Marche, Calabria, Aosta Valley), 20 councils with seat counts, 38 approximate next-election contests, Italian names, region names changed to English. Sources: region sites, Wikipedia/Wikidata fallback; see tickets for gaps. Linked page is the country.
-
Saint-Pierre-et-Miquelon: prefect and next territorial election added
Prefect Marc Didio; territorial council election 14 March 2027. See /places/bl and /places/mf for the sister collectivities.
-
Saint-Barthélemy: 19 councillors + president (Xavier Lédée); Saint-Martin: 23 councillors + president (Louis Mussington); both now members of France. Shared prefect Cyrille Le Vély on both. Saint-Pierre-et-Miquelon: added prefect Marc Didio (appointed 17 Dec 2025). Next territorial elections for all three: 14 March 2027 (runoff 21 March), decrees in the Journal officiel per Maire-info 2026-10-01. Sources: RNE 2026-08-11, Maire-info, Outremers 360, Journal de Saint-Barth.
Tickets: #179
-
Added 2,916 first-level regions with outlines for 182 countries
First-level divisions (states, provinces, regions, governorates, departments and similar) for 182 countries, each linked to its country with an outline. Source: geoBoundaries gbOpen ADM1 simplified files (CC BY 4.0, boundary years per country in app.fact_source), codes and kinds from ISO 3166-2 (Debian iso-codes) with names cross-checked against Natural Earth. Italy and Greece use ADM2 (regions), 77 units without an ISO code use <cc>-x-slug. Already-loaded countries (AU BR CN ID IN RU US ZA FR CA) were left alone; AZ MK SI SG MC PS were skipped (no governmental ADM1). Disputed areas follow the decision-9 default: Morocco in Western Sahara, Somaliland regions and Northern Cyprus districts have de_jure/de_facto set apart. Sample lookups checked: Munich de-by, Mumbai in-mh, Lagos ng-la, Sao Paulo br-sp, Sydney au-nsw. Nigeria page shown as the representative; 7 tickets and 1 decision (licences) filed.
-
Tickets can now be marked internal, for build tasks only the owner should see
Migration 040 adds app.ticket.internal (boolean, default false; decision 50). Tickets 480, 481 (security weaknesses, now fixed) and 489, 491, 492 (deployment details) are marked internal. /feedback still shows them until the web package (ticket 488) hides internal tickets from visitors.
Tickets: #488
-
Renamed a photo loader folder so the code checks out on Windows
db/load/photos/photos:indigenous-school renamed to photos-indigenous-school (colons are invalid in Windows paths); .gitignore entries for targets.csv and ids.txt updated; apply.sql byte-identical; no data or reporter strings changed.
Tickets: #485
-
The coverage measure on About and the research queue now read a cache that the site keeps up to date
The web server refreshes the per-area coverage-gap cache (migration 036) at start-up and every 5 minutes. The About coverage query went from about 460 ms to 6 ms with the same result (27 of 42 areas, 64%).
Tickets: #470
-
The new "Feedback is public" section reused the id of the site feedback dialog, so on /privacy the Send feedback button and the "send us a message" link fell back to the separate report page. The saved-place line said it is never sent to us; it now says the page asks our server about that spot to show your representatives, and those requests are not recorded (true: /fragments/reps and /fragments/ballot do not log lookups).
Tickets: #482
-
The privacy page now covers visitors worldwide: hosting, cookies, photos, feedback and your rights
Checked against the code: lookups keep only a ~1 km point (no IP or browser stored), search misses keep only place-like names, rate limits and bot detection live in memory only, no visitor cookies (owner and tester cookies explained), local storage for place, memberships and theme. Adds where data is (OVHcloud Beauharnois, Cloudflare worldwide), photos and how to have one withheld, feedback being public, and access/correction/deletion rights including EU/UK GDPR. Privacy contact shows SOCIETY_PRIVACY_EMAIL when set, otherwise says one will be published before launch (decision 46). Promises flagged for the owner in decision 49; deployment follow-up in ticket 491.
Tickets: #482
-
Data counts, sources and licences have their own page, Data and sources
Moved unchanged from /about to /about/data: "This is a preview" counts and data date, "Where the facts come from" table, licences, map and font credits, report-a-mistake note. The header Preview chip and the footer "Sources and licences" link point there; old /about#preview and /about#sources links forward to it.
Tickets: #478
-
The About page is now a one-page statement of Society's mission
New order: Our mission, Why Society exists, What we believe, How it works (each part with an "Available now" or "Coming with Issues" chip), Where we're starting, How we're doing, What Society is not, Who makes it, then links to Data and sources and Privacy. Owner-approved copy used verbatim. The "Not an advertising business" line ships as written but awaits the owner's confirmation (decision 45); it is one constant, NOT_ADVERTISING, in web/lib/about-pages.js. Each measure can now show a target ("66%, target 90%"); none is set until the owner gives them.
-
Wrote the rules every country research agent follows for the worldwide wave 1
db/load/world/CONVENTIONS.md: ISO 3166-2 codes and kinds, de jure/de facto default (Canada's position, decision 9), head of state / government / cabinet / chambers / seats / regions / courts patterns, names and languages, parties, next elections, regimes without elections, photos, sources, what is out of wave 1 (decision 47).
Tickets: #490
-
Migration 039 (additive): jurisdiction.external_ids and party.external_ids (wikidata, iso_3166_2, geoboundaries, hasc); seat.kind (constituency | list) and seat.reserved_for for proportional, mixed and reserved-seat systems; name_translation accepts person rows (names in their own script). Display on the site is ticket 490.
Tickets: #490
-
Review of 4558b51: responses to a signed-in owner are sent private, no-store so Cloudflare cannot serve them to visitors; IPv6 clients are rate-limited by /64; a log warning flags an untrusted proxy in front of the server. CSP sweep of 18 pages at 1280 and 390 widths: no violations.
Tickets: #480, #481
-
Per-IP rate limits (CF-Connecting-IP trusted only from Cloudflare ranges or TRUST_PROXY): feedback 8 per 10 min across both forms, decision responses 20 per 10 min, owner sign-in 6 per 15 min, /api and /fragments 300 per minute (local scripts exempt in development); 429 with Retry-After and a plain message. Hidden spam-trap field on the feedback dialog and /report form: filled-in posts are accepted silently and not saved. Content-Security-Policy (self-hosted scripts and fonts, theme script by hash, MapLibre blob: workers, SOCIETY_ASSET_ORIGINS for R2), frame-ancestors none except /embed, nosniff, strict-origin-when-cross-origin, HSTS in production. Checked 16 pages at 1280x800 and 390x844: no CSP errors, maps draw.
Tickets: #481
-
Decisions and other internal pages now need the owner to sign in once the site is public
SOCIETY_OWNER_TOKEN (or NODE_ENV=production) turns on owner sign-in at /owner/login: constant-time token check, signed HttpOnly SameSite=Strict cookie (Secure __Host- cookie in production), sign out at /owner. /decisions, /api/decisions, decision responses and /demand return 401 / the sign-in page to visitors; the footer Decisions link is hidden from them. The public feedback list shows "Society team" instead of agent names; reporter, assignee and priority are owner-only. Localhost without a token stays open. Privacy page updated. Decision 48 asks whether to publish decided outcomes.
Tickets: #480
-
Loader and QA scripts are now in git, so the data can be rebuilt from the repository
About 700 loader, audit, photo and QA scripts plus the hand-curated CSVs they read, committed in 11 groups (e765c65..089d13d). .gitignore now excludes Python caches, screenshots, QA run outputs, logs and raw downloads/DB exports in the photo pipelines. No secrets or raw data committed; see ticket 483 for what was left out. Colon in the photos:indigenous-school directory name: ticket 485.
-
Re-loading Ontario ministers no longer puts a minister's feminine French title on the office itself
db/load/on-provincial/05_executive.py now stores the ONTERM French title for each holder on their term (name_translation table_name 'term', migration 038) and only sets an office French name when the office has none. Dry run against the cached ONTERM list (2026-09-10): no change to any of the 46 Ontario Executive Council office/term French titles; the old code would have turned Vice-premier ministre, Président du Conseil du Trésor and Ministre associé délégué à la Santé mentale... back into the feminine forms. Term titles still read e.g. Présidente du Conseil du Trésor for Kinga Surma. No data rows changed.
Tickets: #471
-
Person pages no longer show a masculine French title for women office holders
Review of 541e419: the office-level French fallback showed 'lieutenant-gouverneur du Manitoba' for Anita Neville and 'député à l''Assemblée législative' for women Manitoba MLAs, because those names have no gender variants. Such names are now hidden unless they give both forms; term-level titles (e.g. Vice-première ministre) are unchanged.
Tickets: #164
-
Office pages use the current holder's own French title (term-level name_translation, migration 038) when the office has one seat and one holder, else the office's name. Person pages show the French title under each current role; office-level names with separate masculine and feminine forms are not shown there, to avoid misgendering. Titles are listed in Sources. Also visible on Kinga Surma's page /people/18515.
Tickets: #164
-
Fixed 3 office-level French names that followed the holder: Deputy Premier "Vice-première" -> "Vice-premier ministre", President of the Treasury Board "Présidente" -> "Président du Conseil du Trésor", Associate Minister of Mental Health and Addictions "associée déléguée" -> "associé délégué" (sources: orders in council 1087/2022 and 372/2025), with both forms in variants. 5 current terms got their ONTERM title (Sylvia Jones, Kinga Surma, Charmaine A. Williams, Nina Tangri, Michelle Cooper); 41 ministerial terms checked. Women's Social and Economic Opportunity and Small Business keep the feminine office name: no official masculine form found (ticket filed). Source: ONTERM ministers list validated 2026-09-10, retrieved 2026-10-11. Page linked: President of the Treasury Board.
Tickets: #164
-
French titles can now follow the person holding an office, not just the office
Migration 038: name_translation accepts table_name = 'term' (CHECK widened, nothing removed), term_title(term_id, lang) returns the term's own title or else the office's preferred name, and app.translation_orphans also checks term rows. No one's gender is recorded; a term row is the title as a source prints it for that holder.
Tickets: #164
-
Research queue picks up changes to the gap rules straight away
Migration 037: an event trigger marks the coverage-gap cache (036) stale whenever a function in public/app is created or altered. Before, redefining app.coverage_gaps left /demand and app.research_queue showing the old rules gaps until a data write or midnight (tested: live 0 rows vs cached 110).
Tickets: #317
-
Migration 036: app.cell_gap caches app.coverage_gaps() per visitor cell; app.refresh_cell_gaps(max_age default 10 min) recomputes only missing, changed or old cells. Statement triggers on jurisdiction, shapes, members, authority, office, seat, term and contest record writing transactions in app.cell_gap_change, and a cell is fresh only if its snapshot includes all of them and it was computed today; otherwise app.cell_gap_current computes it live, so a gap still disappears as soon as data is loaded. app.research_queue keeps its columns and returned identical rows before and after (EXCEPT both ways empty). Warm read 5 ms, was about 420 ms for 38 cells; full refresh 0.42 s. Web timer to call the refresh: ticket 470.
-
New Brunswick county pages list their parishes, villages and towns by type
The "Places within" list on NB county pages groups census subdivisions as Parishes (census area), Villages/Towns/Cities (2021 census area) instead of one "Census subdivisions (statistical)" group, matching search and each place's own page. Example: York.
Tickets: #469
-
New Brunswick parish and former village pages now say what kind of census area they are
Place pages for New Brunswick census subdivisions read "Parish (census area)", "Village (2021 census area)" etc. from the StatCan 2021 CSD type, the same labels search shows, instead of "Census subdivision (statistical)". One shared map (web/lib/csd-types.js) used by placeKindLabel for place headers, place lists and search. Census subdivisions outside New Brunswick are unchanged. Example: Richmond parish.
Tickets: #469
-
Place pages name the real source of a place's name, not just its address code
The "Source:" line under a place title now shows the name/type source (or the boundary source when that is all there is) and lists rows that only document Society's address code last, so Northern Cyprus shows Natural Earth instead of the x-cyn code note. The Sources list labels these rows "<place> (name, type and address code)". Checked /places/x-cyn, /places/ca-bc and /places/ca-csd-5915022.
Tickets: #468
-
Place search treats the two halves of a bilingual name ("A / B" and "B / A") as the same name when hiding a statistical copy of a listed place. Only New Brunswick case today: census area 1312019 Grand Falls / Grand-Sault vs municipality 1321004.
-
Searches that find nothing are saved only to app.search_miss
The web server no longer keeps miss counts in its own memory: every submitted search with no result goes to app.search_miss (visitor or agent), and if the table is ever missing it is checked again on the next miss instead of after 10 minutes. Suggestions while typing (log=0) are not counted. Research agents read app.search_miss_demand.
Tickets: #466
-
Labels for the 246 New Brunswick census subdivisions offered in search come from the Statistics Canada 2021 CSD type (lcsd000b21s_e, CSDTYPE): 142 parishes, and towns, villages, cities, rural communities and a regional municipality labelled with their 2021 census type; anything unmapped says "Census area". The backup search index (used if app.search_places fails) now keeps these New Brunswick places too, matching the database rule. Example: search "richmond" shows Richmond, Parish (census area), New Brunswick.
Tickets: #467
-
Sources for the six new place codes now explain them in plain words
Rewrote the source notes for x-sol, x-cyn, x-ioa, x-atc, x-kas and au-x-jbt; Indian Ocean Territories now says ISO codes exist only for Christmas Island (CX) and Cocos (Keeling) Islands (CC). Example page: Northern Cyprus. Filed ticket 468 for the Sources label.
-
Somaliland, Northern Cyprus and four other places without an ISO code now have their own address
Six foreign jurisdictions that had no code now use a reserved x- code that ISO can never issue: x-sol Somaliland, x-cyn Northern Cyprus, x-ioa Indian Ocean Territories, x-atc Ashmore and Cartier Islands, x-kas Siachen Glacier (x- + Natural Earth ADM0_A3), and au-x-jbt Jervis Bay Territory (parent code + -x- + short name). Convention documented in db/load/maintainer-data/nocode_codes.sql; source Natural Earth v5.1.2 1:50m. Every country and territory now has a code. Nothing Canadian changed. Link shows Somaliland.
Tickets: #456
-
Removed 44 source notes left behind by retired placeholder elections
Deleted 44 app.fact_source rows (table contest) pointing at contests that no longer exist: 37 from research:bc-municipal (ids 43984-44124, contests retired when the office was acclaimed) and 7 from research:school-boards-east (ids 427542, 427559, 427572, 427584, 427592, 427593, 427600, board-wide Ontario placeholders replaced by trustee areas). db/load/bc-municipal/10_councils.sql and db/load/school-boards-east/06_on_areas_2026.sql now delete a retired contest's own source rows in the same statement. Orphan check of every other fact_source table (term, person, office, seat, candidate, jurisdiction, authority and 15 more): 0 orphans; jurisdiction_member, power_topic and topic rows without a match are table-level bulk sources (row_id NULL). db/load/research-demand/prep_r2_legislators.py OR_API now percent-encoded (SessionKey%20eq%20'2026R1'), equal to the 360 stored Oregon source urls, so a re-run adds no duplicates. Loader files are untracked research-scope files, so not committed.
-
Migration 035: app.search_miss (place-like query or NULL, visitor/agent, no location or IP) and view app.search_miss_demand for research agents; app.search_places limits census_subdivision results to New Brunswick, so e.g. NS "Richmond, Subd. A" no longer appears for "richmond" while NB parishes and local service districts do.
Tickets: #462
-
Names in Indigenous languages now say which language they are in
Place pages labelled the Squamish Nation's own name with the raw code "squ"; it now reads "Squamish (Sḵwx̱wú7mesh sníchim)". Nunavut names tagged ikt read "Inuinnaqtun" (the name in Nunavut's Official Languages Act) instead of CLDR's "Western Canadian Inuktitut". Any language the browser cannot name now shows "Other language", never a bare code. Also applies to contact-point languages and source labels.
Tickets: #460
-
Place feeds now list only changes to the data, not website design changes
The Follow changes feed for a place had included change log entries about page layout and site features (e.g. "Calmer page rhythm" in the Canada feed). It now takes only data entries, plus office holders and elections as before.
Tickets: #352
-
Election calendar subscriptions now include advance voting and registration deadlines
The subscribable calendar for a place (/calendar.ics?lat&lon) adds an all-day event for advance voting and for the voter registration deadline wherever How to vote (voter_info) has their dates, with stable UIDs and a reminder (a day before advance voting, a week before the registration deadline). Hours stay in the text because no time zone is recorded. No date recorded, no event. Today this covers the BC provincial vote on 24 October (advance voting 16 to 21 October, e.g. in Vancouver); Toronto and Vancouver municipal dates are not recorded yet (ticket 353). Checked with ical.js and node-ical for Toronto and Vancouver. The one-off "Add this voting day" download is unchanged.
Tickets: #352
-
Each place now has a "Follow changes" feed for feed readers
New Atom feed at /places/<code>/feed.atom, linked from every place page ("Follow changes", plus <link rel=alternate> so feed readers find it). It lists the newest 50 changes: change-log entries about the place or its authorities, offices, office holders and elections; people taking or leaving office; votes added, held, decided by acclamation, with results or cancelled. Stable entry ids, absolute links. Checked with xmllint and feedparser for Ontario, Canada, BC, Toronto, Vancouver and a federal riding. Representative page: Ontario.
Tickets: #352
-
French office titles with d'... or a seat label pluralise correctly
Review fix to ad7819c: "Conseiller d'arrondissement" now reads "conseillers d'arrondissement" (was "d'arrondissements"), and titles like "Conseiller - district 2" or "Conseiller, siège 3" no longer get stray s's. No stored office name reads differently today (checked all 964); this guards future French-titled Québec data. Halifax card unchanged.
Tickets: #452
-
Old links to merged people now redirect to the person kept
/people/<id> for a person merged as a duplicate (app.person_merge) returns 301 to the kept person, following chains up to 10 steps without loops; unknown ids still 404. E.g. /people/41679 goes to Melinda Gillis (31107).
Tickets: #449
-
Deputy mayor in Vaughan and Markham reads "Held by one of the Regional Councillors"
When an ex officio office comes with an office that has several seats, the plain words say one of / N of / all of them (e.g. Montréal borough councils: "Held by 2 of the City councillors"); a seat-specific link keeps "Held automatically by". The exact method still says which one.
Tickets: #445
-
French office titles read correctly: "13 conseillers scolaires"
French titles (head noun first) now agree every word and lower-case the head noun mid-sentence (Conseiller scolaire -> conseillers scolaires, Conseiller régional -> conseillers régionaux). Recognised by the title's first word since offices record no language; all 964 English office names checked unchanged. Shown on the Halifax lookup for Conseil scolaire acadien provincial.
Tickets: #452
-
Treaty boundary note now quotes the federal description accurately
The note under "Treaty and territory" said treaty boundaries "are not surveyed"; CIRNAC's Historic and Modern treaties datasets say "usually not surveyed", and only historic boundaries are described as estimated from written descriptions. Modern-only spots (e.g. Dawson) now get the shorter note. Checked Regina, Halifax, Yellowknife, Dawson at 1280x800 and 390x844, page and /card.
Tickets: #443
-
Lookups and printed cards now show which treaty covers the spot
New "Treaty and territory" line on the Governs answer and /card lists every historic and modern treaty area covering the spot (e.g. Regina: Treaty 4 (1874) with a link to the treaty text; Yellowknife: Treaty 11 and the Tłı̨chǫ Agreement), with a note that the boundaries are approximate. Treaty areas no longer appear under "Places that cover this spot". No line where no treaty area is recorded (e.g. Vancouver).
Tickets: #443
-
Topic pages list dated changes to who holds the powers
New "Changes to who holds these powers" section, newest first: Ontario Bill 23 (2022) and BC Bill 44 (2023) on housing, each with who made it, whom it applies to, the official text and sources. For a place only the changes that apply there show (Toronto: Bill 23; Vancouver: Bill 44; Halifax: none). Also on Building permits, zoning and land use.
Tickets: #441
-
Elections in part of a council or board area say how many seats are up
Where the clerk's list gives the number to elect, a contest reads e.g. "3 trustee seats for Waterloo Region District School Board, City of Waterloo (2026)", or "Trustee for ..." for one seat, on the contest page, election lists, your ballot and calendar files. Where the number is not known it is named for the area only, never with the whole body's seats.
Tickets: #441
-
"Who handles what" now covers fire protection and business licences
Two new everyday tasks, answered by the local government where there is one (Ottawa: Ottawa City Council for both). Topic pages take their name from the topic list, so /topics/fire reads "Fire protection and emergencies", never the raw key.
Tickets: #440
-
Place search now reads a province at the end and finds unorganized areas
Search uses the database search (migrations 033/034) as intended: "Halifax Nova Scotia", "Inuvik NWT", "Moncton Nouveau-Brunswick", Beaver Creek YT and NB local service districts like Acadieville are found. Close spellings appear only when nothing matches exactly, statistical copies of a listed town are hidden, and a street address no longer suggests look-alike place names.
-
What you type is matched only against the names of places we hold (towns, First Nations, ridings, wards, school districts, provinces, including French and Indigenous names), ignoring accents and small typos; nothing typed goes to OpenStreetMap any more. Picking a result moves the map there and asks you to tap your spot or use your location; a village that gives one answer everywhere shows its card at once. Searches that find nothing are counted (short place-like names only, never addresses). Within about 100 m of a ward or riding line the answer says "You're near a boundary" and links the other side. About and Privacy updated.
Tickets: #448
-
Place search finds unorganized areas and understands "Halifax Nova Scotia"
Migration 034: a province or territory typed after the place without a comma (full name, code, NWT, PEI, French names) narrows results; 457 unorganized areas (e.g. Beaver Creek YT, linked), NB local service districts and HRM community council areas are now searchable. The search box itself is still waiting on the web package of ticket 448.
Tickets: #448
-
Migration 033: pg_trgm + unaccent; app.norm_name(); trigram and prefix indexes on jurisdiction names and their other-language and former names; app.search_places(q, lim) returns each match with kind, parent (municipality of a ward, nation of a reserve), province (e.g. Richmond, BC vs Richmond, QC), a point to fly to and a bbox, ranked exact > prefix > word > typo, Canada first, then council size and area. "Montreal" finds Montréal, "richmnd" finds Richmond BC/QC and Richmond Hill, "Richmond, BC" narrows to BC, "St Albert" and "Saint-Albert" both match, and the Squamish Nation is found as Skwxwu7mesh (its own name, Sḵwx̱wú7mesh Úxwumixw, added from squamish.net). 4-30 ms per query. The search box on the site comes next (web part of ticket 448).
Tickets: #448
-
Every source note now points at a record that exists, and Oregon source links open correctly
Removed a York—Simcoe by-election source that pointed at a deleted duplicate of Naomi Davison (the same official tabulation is already on her record) and logged that merge in the person-merge history. Replaced a Nova Scotia bulk note that pointed at no record with one source row on each of the 49 renamed powers. Percent-encoded the spaces in 360 Oregon Legislature source links (checked: the link returns the 90 current legislators). Still open, by ticket: 44 source rows for retired BC and Ontario placeholder contests (454), the Oregon loader constant (455), codes for 6 places with no ISO code (456), shapes for 6 Quebec boroughs (457) and 5 Cher cantons (458). SQL: db/load/maintainer-data/source_integrity.sql.
-
Cabinet and regional council pages list the head first again
The head-first office order (ticket 434) put the President of the Treasury Board above the Premier of Alberta and above the Prime Minister, and put ex officio member mayors above the Durham Regional Chair. Now Premier/Prime Minister lead cabinets, ex officio "Mayor of X" members sort as members, and "Regional Councillors for Whitby" no longer reads "Councillorses". Also: the 2029 federal election calendar file says "set by law but may still move" instead of calling the date an estimate.
-
Offices a body fills from among its members read "Chosen by the board/House/council from among its members" (935 offices, incl. Speakers that read "Elected"). The Leader of the Official Opposition reads "Held by convention: the leader of the largest party in the House of Commons that is not in government". Party leaders show "Leader of the New Democratic Party since March 29, 2026" on their person page, with sources. Offices on a body's page order head, deputy, then members (e.g. PEI Deputy Mayor now after Mayor).
Tickets: #434
-
The 2029 federal election date reads "set by law; may still move"
A vote with a date fixed by law but not confirmed now reads e.g. "Monday, October 15, 2029 (set by law; may still move)" instead of looking certain. Applies today to the 46th federal general election.
Tickets: #431
-
Lists show a vote more than about ten months off by month and year; the vote's own page keeps the full date. "in N days" appears only within 60 days. On an authority page "Next vote" lists each office's next voting day, with later scheduled votes under a collapsed "Later" (e.g. Bowen Island council's 2030 councillor election). The rail now shows labels under the icons on tablets (beside them from 1100 px wide), and the home subtitle runs the full width under the heading.
Tickets: #413
-
Calmer page rhythm: more space between sections, larger grey text, shorter reading lines
One spacing scale (4/8/16/24/40/64 px) as CSS custom properties: sections 40 px apart, 16 px between things inside a card, headings with more space above than below. Secondary text (sources, report links, meta lines, captions, countdowns) is at least 14 px; light-theme grey text darkened from 46.1% to 42% lightness so it passes 4.5:1 on raised surfaces too. Reading text capped at 680 px. Uppercase section labels and badges stay 12 px per the design system. axe-core contrast clean in dark and light on home, authority, office, person, elections and about pages.
Tickets: #407
-
The election banner no longer says "1 school trustee" where you elect several
Vancouver elects 9 school trustees at large, so "1 school trustee" was wrong there (and in Surrey, Bowen Island, Squamish, Ottawa). The banner now gives a number only when the data says it for every board you might vote for, otherwise "school trustees"; Details still says which board. Checked at Vancouver, Bowen Island, Surrey and Ottawa.
Tickets: #410
-
Québec council reloads now date departures and sources from the roster file actually downloaded
06_holders.sql takes read_date (date of MAMH ress.csv, kept from the server by curl -R) instead of a hard-coded 2026-10-09 for source notes and for ending terms of holders no longer listed. Dry runs: read_date 2026-10-09 changes nothing; a later date moves only the cited file date and the end date of a removed holder. Loader change only; no data changed today.
Tickets: #438
-
Merged duplicate person 41679 into 31107 with merge_person; evidence: NWT Hansard 27 Feb 2025 names her as Inuvik town councillor, Inuvik Community Corporation chair and IRC director; IRC Inuvik page (read 2026-10-12) still lists her as ICC chair. Jordan McLeod (Mayor of Aklavik 31114 vs IRC director 41678) left separate: no source ties the roles (ticket 450).
Tickets: #304
-
Example at Bowen Island: "5 days / Local election, Saturday, October 17 / On your ballot: 6 councillors, 2 Bowen Island municipal trustees, 1 school trustee". Which school board, acclaimed offices, advance voting and where to vote are under Details. By-elections are labelled from contest.kind (e.g. Provincial by-election). See ballot jumps to that day on the Elections page.
Tickets: #410
-
The right column is sticky: map, then representatives grouped by body (photo or initials, name, role, call/email/website). The separate representatives section further down is gone. On phones and narrow tablets: heading, map, election banner, cards, then representatives.
Tickets: #409