SPB Git forge

spb/wp18_uqo

Public
6commits 1branches 0releases
5.4 MBsize
maindefault branch
yesterdaylast push
TeX 53.2% Python 46.6%
25.9 KB

# Progress — WP18

# 2026-10-20 — Phase 0 (setup)

# 2026-10-20 — Phase 0 (audit de style) : FAIT

  • Les 17 WP locaux (immobilier/*, finance/*) et le gabarit _modele-working-paper/ inspectés (préambule, métadonnées \WP…, sections, flottants, bibliographie, annexes, latexmk ; lecture détaillée WP2, WP5, WP8, WP10, WP16). Aucun fichier manquant.
  • Livrable : research/wp_style_audit.md — couverture/numéro, typographie, résumé/mots-clés/JEL, structure des sections adaptée à un papier théorique, figures/tables (fragments générés + macros numbers.tex comme WP16), citations natbib/aer, annexes, compilation ; convention amsthm proposée (Assumption/Definition en style definition, Proposition/Lemma/Corollary/Theorem en plain, Remark, proof dans appendix_proofs.tex, numérotation globale comme WP8) ; dérogations à consigner dans le README.
  • Preuve : grep des 17 main.tex (15/17 \bibliographystyle{aer} ; WP8 seul avec \newtheorem), pages PDF 39–82.

# 2026-10-20 — Phase 1 (revue de littérature vérifiée + nouveauté) : FAIT

  • Méthode : 131 requêtes Crossref (query.bibliographic, rows 3–4, JSON brut par entrée dans research/verification/*.crossref*.json), résolution doi.org testée sur 12 DOI (302 vers l'éditeur), pages Banque du Canada / Statistique Canada / SCHL / NBER / AEA / IDEAS lues pour 38 résumés. Outil OpenAlex indisponible (MCP fermé) ; SSRN/ScienceDirect 403.
  • Livrables : research/literature_matrix.csv (72 références vérifiées, 66 avec DOI, 6 avec URL officielle), paper/references.bib (72 entrées, mêmes données ; compilation test natbib+aer : 0 avertissement BibTeX), research/literature_review.md (≈4 300 mots, 9 sections par mécanismes + lacunes), research/novelty_matrix.csv (4 contributions × 5 papiers les plus proches, verdicts), research/inaccessible_sources.md (2 sources du brief non identifiées — Uzeda, Alexander & Bazel ; 3 BoC/WP non vérifiables écartés ; 26 références vérifiées mais périphériques, réintégrables).
  • Verdicts de nouveauté : (i) seuil d'accession — incrémental (Ortalo-Magné & Rady 2006, KMV 2020, FLVN 2017 ; nouveau = héritage + secteur locatif + caractérisation analytique conditionnelle à la segmentation/offre) ; (ii) persistance — nouveau en théorie, établi empiriquement (Daysal et al. 2023, Charles & Hurst 2002 ; multiplicité à ne pas promettre) ; (iii) inflation surprise — incrémental sur la revalorisation directe (Doepke-Schneider, GKS 2017, Meh et al. 2010), potentiellement nouveau sur la marge d'entrée et le terme de 5 ans canadien ; (iv) offre × contrat → mobilité — incrémental (KMN 2011, Grossmann et al. 2021, Chambers et al. 2009), nouveau seulement comme statique comparative d'une mesure de mobilité.
  • Blocages : aucune source vérifiée d'élasticité de l'offre canadienne (paramètre illustratif à prévoir) ; « Uzeda » et « Alexander & Bazel » à préciser par l'auteur ; Muellbauer et al. 2015 (BoC) à revérifier pour la calibration.
  • Prochaines étapes : Phase 2 (spécification du modèle, agent parallèle) doit (1) rendre explicite le paramètre de segmentation propriétaire/locatif et l'élasticité de l'offre, (2) tenir le processus de revenus fixe entre quantiles d'héritage dans la base, (3) prévoir trois contrats (FRM long, FRM renouvelable 5 ans, ARM) et deux régimes d'indexation des loyers pour toute expérience d'inflation, (4) formuler (ii) comme distribution stationnaire à deux classes de tenure avec demi-vie, sans promettre la multiplicité.

# 2026-10-20 — Phase 2 (modèle, propositions, preuves, benchmark 2-3 périodes) : FAIT

  • Modèle : research/model_specification.md (≈7 300 mots). Partie A = benchmark à trois étapes de vie (acheteur / payeur / vendeur-donateur) et générations de deux périodes, transfert inter vivos reçu au moment de l'achat, demande unitaire de logement, hypothèque nominale (principal B_nom = P(1-θ)p, amortissement a à l'étape 2, FRM vs ARM/terme renouvelé), dépôts nominaux, prêteur risque-neutre (résidu des réévaluations), marchés propriétaire et locatif segmentés avec élasticités ε, ε_r, indexation salaires/loyers η_w, η_ρ. Partie B = modèle OLG complet directement implémentable (J = 12 périodes de 5 ans, revenu de Markov Rouwenhorst, tailles de logement avec minimum, hypothèques nominales à paiement constant sur N périodes, FRM/ARM/terme-k, refinancement, LTV + DSTI nominal, don à j_g = 7 et succession à J, bailleurs avec arbitrage et paramètre de segmentation σ, construction stock-flux, prêteur avec bilan, ERC stationnaire + transition MIT, états/grilles/EGM/Young/Broyden, statistiques de mobilité et bien-être).
  • Propositions et preuves : paper/appendix_proofs.tex (amsthm : 6 hypothèses, 2 lemmes, 9 propositions, 1 corollaire, 3 remarques de lacunes ; compilable seul via cd paper && latexmk -pdf appendix_proofs_standalone.tex, 12 p., 0 référence non définie ; artefacts nettoyés, PDF non commité conformément à HARMONISATION §2). Résumé des statuts : research/propositions.md. Hypothèses abandonnées/affaiblies : research/failed_hypotheses.md.
  • Résultats analytiques : (1) seuil d'accession fermé b̂ = (dp − Λρ)/(1−Λ) − y_1 = borne de faisabilité + composante de préférence (consommation du marginal) ; (2) signes : ↑ en p, θ, κ_b, κ_s, m, π̄ anticipée (effet de « tilt »), ↓ en ρ, χ, y_1 — tous des effets de liquidité (neutres pour un ménage non contraint, Prop. 3) ; (4) multiplicateur de levier (1−κ_s)/d, seuil de croissance d'équilibre g* indépendant du LTV, seuil de dette négative x* ; (5) persistance intergénérationnelle fermée λ = G(ŷ_R) − G(ŷ_R − e_3 p) = corrélation de tenure parent-enfant, demi-vie, nulle si la maison n'est pas une richesse nette en fin de vie ; (6) existence de l'équilibre stationnaire (TVI) et unicité sous la condition de dominance (C) ; corollaire offre fixe (taux de propriété figé, prix et composition absorbent tout) ; (7) neutralité des prix sans segmentation ; (8) comptabilité de l'inflation surprise : FRM = ARM pour une surprise de niveau, FRM > ARM pour une surprise persistante, l'ARM perd à l'étape 3 ssi φ_r > R, identité à somme nulle avec le prêteur, condition exacte de gain ; (9) impact GE d'une surprise : dp ≥ 0, dρ ≤ 0, dμ ≥ 0 (= 0 à stock fixe : effet de composition pur), seuil ↑, mobilité ascendante q_RO ↓, persistance λ ↑, vendeurs gagnants, nouveaux acheteurs perdants possibles.
  • Benchmark numérique : src/toy_model.py (formules fermées HTM, optimiseur général pour vérifier A4 et non la supposer, chaîne dynastique, équilibre stationnaire, comptabilité, impact GE, simulation myope diagnostique) ; tests/test_toy_model.py : 44 tests passent (.venv/bin/python -m pytest tests/ ; venv .venv avec numpy 2.5.4, scipy 1.18.1, pytest 9.1.1 épinglés dans requirements.txt) : identités budgétaires état par état (2 tenures × 2 contrats × 3 surprises × 2 expériences), trajectoire dette nominale/réelle, identité de Fisher, seuil fermé = seuil optimisé (1e-14), inégalités d'Euler strictes sur le support des transferts, croisement unique, signes des 9 statiques comparatives, chaîne de Markov (valeur propre, distribution stationnaire), apurement des deux marchés, condition (C), offre fixe, non-segmentation, somme nulle, ordre FRM/ARM, signes d'impact, impact croissant quand l'offre est moins élastique, transition myope = impact puis retour.
  • Résultats surprenants ou négatifs : le seuil de croissance d'équilibre ne dépend pas du levier ; la persistance par classes absorbantes est un cas limite sans risque (remplacée par une demi-vie) ; sans segmentation, ni crédit, ni héritage, ni inflation ne bougent les prix ; les effets GE d'une surprise de 10 % sont minuscules dans le benchmark (dp = +0,03 %) parce que le prix absorbe le déplacement de demande ; une version à deux périodes a été abandonnée (hypothèque-ballon ⇒ richesse immobilière nette négative) ; la simulation myope montre une oscillation d'éviction entre cohortes (unités détenues deux périodes, valeur propre ≈ −1) à surveiller en Phase 3.
  • Hypothèses fortes : A4 (ménages contraints à la marge, vérifiée numériquement dans le benchmark mais à vérifier dans le modèle complet), A6 (anticipations statiques pour l'impact), demande unitaire de logement, prêteur extérieur au système dynastique, offre « par période » en Partie A.
  • Prochaines étapes (Phase 3) : implémenter la Partie B selon §B.9–B.12 ; vérifier A4 au seuil, le croisement unique pour les épargnants, la condition (C) le long de la courbe d'apurement et chercher des équilibres multiples sous offre quasi fixe ; transition à anticipations parfaites avec stock durable ; expériences 1–10 du CLAUDE.md ; ne jamais étiqueter GE un résultat à prix fixes.

# 2026-10-20 — Phase 3 (implémentation numérique) : EN COURS

# Jalon 3.0 — conception (écrit avant le code)

  • Modèle implémenté = Partie B de model_specification.md avec les réductions suivantes, toutes documentées dans configs/baseline.yaml et research/results_audit.md :
    1. État (j, z, h, b^m, n_m, a) ; le taux contractuel FRM n'est pas un état : en transition, n_m et la date t identifient la date d'origination et donc le taux (refinancement = nouvelle origination).
    2. Branches : stay / refinance / move / sell-and-rent / rent / buy. Toutes les branches sauf stay ne dépendent de l'état que par le cash-on-hand → fonctions de valeur W^B_j(z,x), W^R_j(z,x), W^F_j(z,h,x) sur une grille de cash ; stay sur la grille d'état complète. VFI rétrograde par âge avec recherche sur grille de a' (EGM non retenu : choix discrets × contraintes LTV/DSTI × hypothèque sur grille rendent l'enveloppe supérieure plus fragile que la recherche exhaustive, et le coût numba de la recherche est faible).
    3. Distribution : panel Monte-Carlo de dynasties (paires parent–enfant, phases équiréparties, graine fixe, nombres aléatoires communs) plutôt qu'un histogramme de Young : le lien dynastique (don à l'âge 1 ET succession à l'âge 7, corrélés par l'état du parent) exige la loi jointe parent–enfant, que l'histogramme ne porte pas. Sensibilité à la taille du panel rapportée (exp. 10).
    4. Anticipation de la succession : loterie à K = 5 points (moyennes conditionnelles par quintile de la distribution simulée des successions), objet d'équilibre (inconnue du Broyden) ; approximation : l'anticipation est inconditionnelle à l'état propre (le lien réalisé est exact dans le panel).
    5. Contrats : FRM (taux d'origination à vie), TERM5 (k = 1 : réinitialisation à chaque frontière de période = ARM à la fréquence quinquennale, cf. §B.5), ARM (variante stylisée : repricing intra-période, aucune érosion). En ERC stationnaire les trois sont identiques ; ils ne diffèrent qu'en transition.
    6. Normalisation : p* = p^{r*} = 1 dans la base par choix des échelles d'offre H̄, H̄_r (calibration = demande simulée à prix unitaire), comme chez KMV.
  • Algorithme ERC : Broyden amorti sur (p, p^r, loterie K) avec Jacobien initial par différences finies ; transition MIT : tir en espace des séquences sur (p_t, p^r_t)_{t<T}, Jacobien par différences finies parallélisé (multiprocessing), T = 16 périodes (80 ans), stock durable H_t = (1-δ_H)H_{t-1} + δ_H H̄ p_t^ε.
  • Étiquetage : tout résultat à prix fixes est marqué partial equilibrium (prices fixed) dans les fichiers de résultats (equilibrium = "GE" | "PE").

# Jalon 3.1 — code écrit et validé unitairement (2026-10-20, ~3 h après le début)

  • configs/baseline.yaml (tous les paramètres, unités, provenance ; ν = 2, x̲ = 1 retenus après balayage pour des dons ≈ 2 années de revenu), configs/scenarios.yaml (≈ 60 scénarios en 8 groupes).
  • src/model.py (conversion annuel → 5 ans, Rouwenhorst, annuité à paiement de début de période — un premier essai avec paiement de fin de période rendait l'emprunt artificiellement plus coûteux que les dépôts (~20 % du paiement) et faisait disparaître l'hypothèque chez les ménages non contraints ; corrigé), src/household_solver.py (noyaux numba, VFI par âge, 4 branches sur grille de cash + stay sur l'état complet, raffinement par section dorée de a', transformée « don », loterie successorale, résidus de Bellman hors grille), src/distributions.py (panel de dynasties par paires, nombres aléatoires communs, loterie, Gini, rang–rang, cohortes pour le bien-être), src/equilibrium.py (ERC : d'abord Broyden sur 7 inconnues — abandonné car la demande est lisse mais très non linéaire en p/p̃_r (la tenure bascule de 15–20 pp pour 5 % de prix relatif) et le bruit MC ~1e-4 corrompait les mises à jour ; remplacé par un apurement emboîté Illinois (locatif dans propriétaire) + point fixe amorti sur loterie et rebate ; transition MIT par tir en espace des séquences, Jacobien FD parallèle, Broyden avec rafraîchissement), src/calibration.py, src/simulation.py (10 expériences), src/robustness.py, src/figures.py (14 figures), src/tables.py (9 tables + numbers.tex), Makefile, requirements.txt épinglé.
  • Tests : tests/test_model.py, test_solver.py, test_simulation.py (+ conftest.py) — 22 tests rapides verts (identités budgétaires branche par branche à 1e-8, loi de la dette, faisabilité LTV/DSTI, condition terminale, lien dynastique, loterie, nombres aléatoires communs, monotonie des valeurs, croisement unique, seuil ↑ en p et θ, résidus de Bellman) ; 2 tests lents (ERC petit + comptabilité de la surprise) marqués slow.
  • Diagnostics à ce stade (base, p = 1) : résidus de Bellman moyens 7e-4 (propriétaires) / 2e-4 (locataires), aucune vente forcée, 0,003 % de politiques tronquées ; une évaluation du bloc ménages + distribution ≈ 1 s ; ERC ≈ 1–2 min ; transition GE : Jacobien 32 colonnes ≈ 90 s sur 8 processus.
  • Résultat contraire déjà visible : après une surprise d'inflation de 10 %, la demande de logement baisse à l'impact (p₀ ≈ −0,5 %) parce que les dépôts nominaux des ménages (3,9) dépassent la dette hypothécaire (2,4) dans la base : les jeunes locataires qui épargnent pour la mise de fonds perdent ; la demande remonte ensuite via les transferts. À documenter dans results_audit.md (ne pas forcer).

# Jalon 3.2 — pipeline validé de bout en bout (quick runs, 09:00–09:14) ; lancement du run complet à 09:14

  • make simulate-quick (panel 24 000 dynasties, T = 8, 3 itérations Broyden) : base, scénarios ERC (ex. bequests_off → p = 0,934, convergé en 126 s), transitions FRM/terme 5 ans, tables d'impact et de bien-être, diagnostics.json : EXIT 0.
  • Corrections issues des quick runs : (i) Broyden sur (p, p̃_r) abandonné dans les tours ≥ 2 au profit de la régula falsi emboîtée avec départ à chaud (le bruit MC des différences d'excès de demande, ~1e-3 pour 0,5 % de prix, faisait échouer la recherche linéaire) ; (ii) tolérance ERC 5e-4 (prix d'équilibre déterminé à ±0,05 %), tolérance de transition 1,5e-3 (coupes transversales à une seule période) avec arrêt au plancher de bruit après un rafraîchissement du Jacobien ; (iii) choix de taille de logement interpolé en cash (valeurs par taille stockées) ; (iv) bien-être : la décomposition U + Φ simulée s'écartait de 1–5 % de la fonction de valeur (politiques simulées au plus proche point de grille) et gonflait le CEV (5,5 % au lieu de ~0,6 %) → U := V − Φ (identité exacte à la base ; U simulé conservé comme contrôle) ; (v) pkill ne tuait pas les processus spawn orphelins (journaux pollués) → tuer multiprocessing.spawn avant toute relance.
  • Premiers signes (quick, à confirmer sur le run complet) : surprise de 10 % FRM : p₀ ≈ −0,6 %, ρ₀ ≈ −0,6 %, propriété +0,1 pp en ERC contre −0,15 pp à prix fixes ; le prêteur gagne (dépôts 3,9 > dette 2,4) ; terme 5 ans persistant : p₀ ≈ −1,6 %.

# Jalon 3.3 — run complet (lancé 09:26 après deux faux départs : glob zsh et processus spawn orphelins)

  • Découverte pendant le premier run complet : discontinuité réelle de l'excès de demande (saut de 1,5 % de la demande locative entre p̃_r = 0,9730 et 0,9735 dans eps_200_theta005) causée par des atomes de la distribution de cash (entrants sans don et locataires contraints à a = 0 partagent le même cash à z donné et basculent de tenure simultanément). Remède : composante de revenu transitoire i.i.d. non anticipée (σ = 0,03 par période, income.sigma_transitory), réalisée avant les décisions, qui étale les atomes ; la fonction redevient continue (racine encadrée) ; identités budgétaires vérifiées avec le revenu réalisé (test dédié). Documenté dans results_audit.md §0.
  • Étape stationnaire : 48/48 scénarios convergés en ERC (résidus relatifs < 5e-4, sauf sample_small arrêté au plancher de bruit 7,8e-4, étiqueté) en 17 min (9 processus) ; base en 8 s (p* = 1,0000, loterie en 5 tours).
  • Balayage de multiplicité : excès de demande propriétaire strictement décroissant en p sur [0,80 ; 1,25] avec une seule racine, pour la base, ε = 0,05 et ε = 0,05 × θ = 0,05 ; dμ/dp < 0 partout (analogue de la condition (C)) → aucun équilibre multiple.
  • Transitions (16, 2 en parallèle, Jacobien FD sur 8 processus chacune) lancées à t = 21,7 min.
  • research/results_audit.md : §0 (algorithme), §1–3, §5a, §6–8, §10 rédigés avec les chiffres du run complet ; §4, §5b, §9 en attente des transitions.

# Jalon 3.4 — run complet terminé (all_done à 59,8 min ; 09:26 → 10:26)

  • Étapes : base 8 s ; 48 scénarios stationnaires 17 min (9 processus) ; balayage de multiplicité 5 min ; 16 transitions 50 min (2 en parallèle) ; bien-être 1 min ; robustness.py OK.
  • Convergence : 48/48 ERC stationnaires (dont sample_small au plancher de bruit 7,8e-4) ; transitions : 12/16 convergées (résidu ≤ 1,5e-3), 3 arrêtées au plancher de bruit juste au-dessus (frm_level 2,2e-3, unindexed_wages 2,0e-3, fixed_supply 3,1e-3 — étiquetées GE NOT CONVERGED), 1 échec du tir à froid (rate_shock_theta005, choc de taux réel sous θ = 0,05 : résidu initial 0,17, pas de Broyden rejetés) → pré-phase de tâtonnement amorti ajoutée à solve_transition (gros chocs) + option --rerun-transition … --warm-from … ; relance en cours.
  • Résultats contraires aux propositions (détaillés dans results_audit.md) : (i) le prix réel baisse après une surprise d'inflation (p₀ ≈ −0,5 %) parce que les ménages sont créanciers nominaux nets (dépôts 4,1 > dette 2,5) — Prop. 9 suppose l'inverse ; (ii) la neutralité sans segmentation (Prop. 7) ne tient pas avec marge intensive (p₀ = −0,39 % vs −0,45 %) ; (iii) le seuil d'accession n'est pas monotone en θ pour le z médian en EP (valeur d'option d'attendre), dans la sensibilité de grille ; (iv) aucun équilibre multiple (balayages monotones) ; (v) l'élasticité d'offre de long terme ne compte presque pas à l'impact (élasticité d'impact εδ_H).
  • Résultats conformes : ordre des contrats FRM = terme 5 ans > ARM (niveau), FRM > terme > ARM (persistant), terme pénalisé par une réponse de taux réel (Prop. 8) ; identité à somme nulle ; absorption de 80–90 % de la réponse de propriété par les prix ; persistance intergénérationnelle nulle sans transferts (Prop. 5) ; tilt de l'inflation anticipée par la contrainte DSTI nominale (Prop. 3) ; q_RO ↓ et λ ↑ à l'impact (Prop. 9.3, effets de composition < 0,1 pp).

# Jalon 3.5 — Phase 3 livrée (10:40)

  • rate_shock_theta005 relancé deux fois (départ à chaud puis tâtonnement 80 pas + Jacobien) : le tir s'arrête au résidu 8,8e-3 (étiqueté GE NOT CONVERGED), p₀ = −16,2 % cohérent avec θ = 0,20 (−15,5 %) et θ = 0,40 (−14,6 %). Bilan transitions : 12/16 convergées à 1,5e-3, 3 à 2–3e-3, 1 à 8,8e-3 — toutes étiquetées avec leur résidu dans diagnostics.csv et la Table 6.
  • Livrables finaux : 14 figures (PDF + PNG), 9 tables LaTeX + numbers.tex (164 macros), results/data/ (358 fichiers CSV/JSON commités, 5,6 Mo ; .npz/.pkl/journaux exclus), research/results_audit.md (brouillon par expérience avec étiquettes identité / théorie / simulation GE / PE), 69 tests verts, make simulate reproductible (60 min).
  • Temps de calcul (18 cœurs) : base 8 s ; ERC stationnaire 45–300 s ; transition 2,5–8 min ; run complet 59,8 min + relances 13 min.

# 2026-10-20 — Phase 4 (audit final, réconciliation théorie–simulation, manuscrit v1.0) : FAIT

# A. Audit final — research/results_audit.md (version finale)

  • Par expérience (1–10) : hypothèse, paramètres, algorithme, convergence (résidus réels ; non convergés nommés : frm_level 2,2e-3, frm_level_unindexed_wages 2,0e-3, frm_level_fixed_supply 3,1e-3, rate_shock_theta005 8,8e-3 ; sample_small 7,8e-4), résultats, limites, robustesse, et étiquette de ce qui est réellement soutenu : identité / théorie / simulation GE / simulation PE (prix fixes) / A6 / conjecture. Décompte exact : 45 ERC stationnaires (44 dans la tolérance), 5 relances PE, 3 balayages de multiplicité, 16 transitions (12 dans la tolérance).
  • Les trois désaccords théorie–simulation classés et réconciliés (tableau dédié) : (1) Prop. 9 — la prémisse « hypothèque = seule position nominale » n'était pas énoncée (impliquée par A4) ; rendue explicite (Assumption 7), Prop. 9 restreinte, Corollary 2 prouvé : signe de $dp$ = signe de $\Xi = \mu^* g(\hat y_O)(\delta_3 p^* - Rn^O) - (1-\mu^*) g(\hat y_R) Rn^R$ ; la baisse simulée est le cas $\Xi<0$ ; les deux écarts résiduels (loyer qui baisse au lieu de monter : marge intensive ; seuil qui monte : dépôts des entrants) nommés dans Remark 3 et rapportés comme résultats. (2) Prop. 7 — « demande unitaire » mise dans l'énoncé (Remark 2) ; résultat Part B rapporté (−0,39 % vs −0,45 %, effet de richesse sur la demande totale). (3) Prop. 2 — restriction exacte nommée : contrainte LTV serrée + décision de tenure une fois pour toutes ($V^R$ indépendant de $\theta$) (Remark 1) ; non-monotonie au $z$ médian rapportée avec sa sensibilité de grille ±0,07. Ni la théorie ni les simulations n'ont été forcées.
  • research/propositions.md réécrit (statuts P / P-scoped / C / N + colonne « Sim ») ; research/failed_hypotheses.md complété (§10–15 : signe de $dp$, neutralité, monotonie en $\theta$, multiplicité non trouvée, élasticité de l'offre sans effet mesurable sur la mobilité, moments non soutenus).
  • Preuves : paper/appendix_proofs.tex réorganisé (énoncés dans sections/equilibrium.tex, lemmes + preuves + remarques de lacune en annexe A ; preuve commune Prop. 9 / Cor. 2) ; appendix_proofs_standalone.tex = modèle + énoncés + preuves, compile (22 p., 0 erreur).

# B. Porte d'intégrité

  • make test : 69 tests verts (21 s). Figures/tables référencées : toutes présentes (make paper copie results/figures/*.pdf → paper/figures/, results/tables/*.tex → paper/tables/). Chaque chiffre du texte est une macro de numbers.tex (≈ 2 500 macros, dont les jumeaux …Abs pour les valeurs négatives et le signe moins \ensuremath{-}) ; vérification par script : 0 macro utilisée non définie. Bibliographie : 72 entrées, 0 avertissement BibTeX.

# C. Manuscrit — paper/main.tex v1.0

  • Métadonnées : WP 18, titre + sous-titre, October 2026, Version 1.0, résumé 217 mots avec résultats réels (dont négatifs), 7 mots-clés, JEL R21, R31, D31, D91, E31, G51 (E44 écarté : pas de friction de marché financier au-delà des contraintes des ménages). \hypersetup{pdftitle,pdfauthor} ; amsthm selon wp_style_audit.md §6.
  • Sections (paper/sections/) : introduction, literature (critique, par mécanismes, 72 réf. seulement), model (Part A + Part B), equilibrium (A1–A7, Prop. 1–9, Cor. 1–2, Remarks 1–3, concepts d'équilibre Part B), computation, baseline, inflation, supply_policy_welfare, sensitivity_conclusion ; annexes A (preuves), B (algorithme, paramètres, diagnostics, robustesse), C (notation). Sections du gabarit inutilisées supprimées.
  • Figures : 13 dans le texte + 1 en annexe (titres dans l'image retirés, légendes LaTeX) ; tables : 5 dans le texte + 4 en annexe (tables larges en \resizebox + note en minipage ; colonne « p peak » redondante retirée de la table d'inflation).

# D. QA

  • cd paper && make : 0 !, 0 référence/citation indéfinie, 0 avertissement BibTeX, overfull max 3,7 pt (< 10 pt). PDF : 65 pages = 2 (titre, résumé) + 45 pages de texte principal (p. 3–47) + références (6) + annexes (12). Page 1 et page 2 vérifiées avec python3 -I + fitz (Working Paper No. 18, titre, auteur, October 2026, Version 1.0 ; Abstract / Keywords / JEL). Relecture intégrale du texte extrait : cohérence chiffres/tables, formulation des nombres négatifs corrigée (macros …Abs), légende Fig. 7 alignée sur la figure, libellés des lignes de la table de bien-être.
  • make all : test → simulate (sauté, résultats présents) → figures → tables → paper, EXIT 0. make clean garde main.pdf.
  • README.md final (gabarit UQO : Status v1.0 not yet submitted, Quick start, Data = calibration illustrative, Notes = dérogations).

# Verdict de maturité

Papier théorique complet et reproductible, résultats honnêtement étiquetés ; calibration illustrative et deux moments non soutenus (profil de propriété après 65 ans, part des dons) ; cible réaliste : Journal of Housing Economics ou Regional Science and Urban Economics (ou Canadian Journal of Economics après une calibration des positions nominales nettes par âge et tenure à la Meh–Terajima et un motif de legs sur le logement — prochaines étapes nommées dans la conclusion).