vigie.LA MÉTHODE

RAPPROCHEMENTS LITTÉRAUX

L'atlas des rues

Un nom de rue partagé entre un dossier et une entrave officielle — jamais une preuve géographique.

Vigie — Edge Atlas (street-level joins) v0.1

Date: 2026-09-19 Method id: edge-atlas-v1 Code: scripts/edge_atlas.py · Store: data/edges/latest_edges.json

What this is

A literal, compile-time join between two declared vocabularies:

When the same canonical street name appears on both sides, Vigie proposes a relation — nothing more. It is a reading aid: « this dossier talks about a street the official collection currently declares obstructed ».

It is not:

Formula (falsifiable)

  1. Normalization. Each declared name is folded (accents, case),

apostrophes become hyphens, periods are dropped (Boul. → boul → boulevard), descriptors canonicalize (boul./blvd/bd → boulevard, rte-/rt- → route-, aut- → autoroute-, av/ave → avenue, ch/chm → chemin), saint-/sainte- contract to st-/ste-. A trailing compass token — single letter (O/E/N/S) or full word (Ouest/Est/Nord/Sud), both folded to the letter — is part of the key: Rue St-Joseph E ≠ Rue St-Joseph O, and Boulevard Charest Est = Boulevard Charest E.

  1. Key. street_key = canonical tokens joined by "-", direction included.
  2. Phrases. Per street, the literal spaced phrases (full and

directionless, hyphenated and spaced variants of hyphenated tokens, ≥ 6 characters, ≤ 8 variants) that may match text.

  1. Text folding. Dossier text (question, label headline, member titles and

summaries — declared text only, capped at 6000 characters) passes through the same token canonicalizer. Compass words are never folded in text (« est » is a French word); the directionless phrase carries that match.

  1. Match. One literal alternation, longest phrase first, with boundaries

that reject hyphen-continuations and digit-prefixes: rue st-jean does not match « rue Saint-Jean-Baptiste »; 3e rue does not match « 13e rue ». A match is a shared name with its descriptor — bare proper names (« Chapelle », « Entente ») never match alone.

  1. Output. `streets[key] = {display, active_count, centroid, event_ids≤12,

matched_issue_ids≤5} and issues[issue_id] = {streets≤5}. Caps truncate evidence lists; counts stay exact. display = most frequent declared spelling, ties lexicographic. centroid = mean of the event geometries from the latest append-only raw snapshot, rounded to 5 decimals (~1 m); null` when no snapshot is available.

Determinism and fail-soft

the dossiers' clustered_at — both store facts. A render-only rebuild is byte-identical.

it can never inflate.

The pipeline and the edition never depend on it.

HTML, byte-identical to no atlas at all.

Rendering contract

literally names the same street — wording « Rapprochement proposé … une mention textuelle, pas une preuve géographique », link to #dossiers.

(anchor safety) and the matched street has ≥ 1 active declaration — link to #travaux.

Known limits (published, not hidden)

« 1e Avenue ». A miss is honest; a guess would not be.

« Sainte-Foy » the borough are different tokens; only the named street with its descriptor matches.

Kill list

Decision log

DateDecisionOwner
2026-09-19Ship v0.1 literal joins; publish this method; ranking untouchedBucky + le porteur