1\section{Institutional context: Quebec grocery retail and the Food-Ka source}\label{sec:inst}23\paragraph{Market structure.} Grocery retail in Quebec is dominated by three vertically integrated companies operating several banners each: Metro Inc.\ (Metro, Super~C, Marché Adonis, the affiliated Richelieu, Marché Ami and Axep banners, and the Jean Coutu and Brunet pharmacies), Loblaw Companies (Maxi, Provigo, Club Entrepôt, Pharmaprix, T\&T Supermarket, and affiliated Inter-Marché stores) and Sobeys/Empire (IGA, Les Marchés Tradition, Marché Bonichoix, Rachelle-Béry). Walmart Canada and Costco add mass-merchant and warehouse-club formats; Giant Tiger is a discount general merchandiser with a large food assortment; a long tail of independent, ethnic, health-food and online-only grocers completes the market. The Société des alcools du Québec (SAQ) is a provincial monopoly with uniform posted prices and is excluded from all grocery analyses. Company affiliations used in the paper are recorded feed by feed in the \texttt{retailers} table with the basis for each attribution (public corporate information or the Food-Ka registry); they are descriptive and do not affect any estimate except the same-company/cross-company split.45\paragraph{Channels.} Each large banner is present in Food-Ka through two \emph{feeds}: an online storefront (the e-commerce catalogue, read every $\approx$7 hours) and a weekly circular (read from the Flipp platform for the Montréal postal code H2X 1Y4, with validity dates, regular price and fine print). Smaller independents are present only through circulars; online-only grocers only through storefronts. Treating the 54 feeds as 54 retailers would therefore double count the large chains and conflate two very different price-setting objects: a catalogue price that applies to whatever store the site assigned to the session, and an advertised weekly promotion with an explicit regular price. We keep the two channels apart throughout.67\paragraph{The Food-Ka source.} Food-Ka (\url{https://www.food-ka.com}) is an independent, non-commercial aggregator operated by the author. It maintains one connector per feed, normalises each listing to a common schema (name, brand, category, package label, price, regular price, unit price), computes a content hash and, at every pass, classifies each listing as new, modified or missing. Every change of the displayed price is appended to a log; a listing missing for two consecutive passes is deactivated. The public home page on 1 November 2026 reported 50{,}760 products, 54 banners and 8{,}631 products on promotion; we verified that these equal the number of \emph{active listings}, feeds with active listings and listings flagged on sale in the snapshot, and we stress that they are counts of source-feed listings, not of unique products: the same Coca-Cola 12-pack appears once per feed that carries it.89\paragraph{What the source does and does not record.} Food-Ka was built to compare current prices, not to study price dynamics. Three consequences shape everything below. (i) It logs \emph{changes}, not observations: between two logged events a listing kept its price and was re-observed at every pass, but the pass-level presence of each listing is not stored. (ii) It historises the \emph{current} price only: regular prices, promotion flags and stock status are overwritten at each pass, so the promotion state of a storefront listing in the past must be inferred from its price path, while circular items carry an explicit regular price for their validity week. (iii) It has no store dimension: storefront connectors browse without selecting a store, and circulars are pulled for one postal code. These are the facts; the research design (Section~\ref{sec:methods}) is built around them rather than against them.10