// Build auteurs-pensees.json v3.0 — Phase 8.A // Sync corpus JSON unifié : Bonpote authors + LightRAG ingestion flags import fs from 'node:fs'; import path from 'node:path'; const JSON_PATH = 'C:\\Users\\jules\\Dropbox\\ATIS - IPCJRA\\1 PROJETS\\TECH - infra VPS, website pro, RAG\\nav-carte\\public\\data\\auteurs-pensees.json'; // === LightRAG slug prefixes (from /documents endpoint 2026-05-12) === const LIGHTRAG_PREFIX_TO_AUTHOR_SLUG = { bookchin: 'murray-bookchin', brand: 'steward-brand', carson: 'rachel-carson', charbonneau: 'bernard-charbonneau', descola: 'philippe-descola', despret: 'vinciane-despret', eaubonne: 'francoise-deaubonne', ellul: 'jacques-ellul', federici: 'silvia-federici', ferdinand: 'malcolm-ferdinand', figueres: 'christiana-figueres', georgescu: 'nicholas-georgescu-roegen', gorz: 'andre-gorz', graeber: 'david-graeber', keith: 'david-keith', klein: 'naomi-klein', kropotkine: 'pierre-kropotkine', latouche: 'serge-latouche', latour: 'bruno-latour', lowy: 'michael-lowy', malm: 'andreas-malm', marx: 'karl-marx', meadows: 'donella-meadows', morizot: 'baptiste-morizot', naess: 'arne-naess', ouassak: 'fatima-ouassak', reclus: 'elisee-reclus', saito: 'kohei-saito', servigne: 'pablo-servigne', shiva: 'vandana-shiva', stengers: 'isabelle-stengers', vettese: 'troy-vettese', }; const INGESTED_AUTHOR_SLUGS = new Set(Object.values(LIGHTRAG_PREFIX_TO_AUTHOR_SLUG)); // === Bonpote authors (nom, dates, ecole_principale, ecoles_secondaires[]) === const BONPOTE_AUTHORS = [ // Éco-anarchisme ['Pierre Kropotkine', '1842-1921', 'eco-anarchisme', []], ['Élisée Reclus', '1830-1905', 'eco-anarchisme', []], ['Murray Bookchin', '1921-2006', 'eco-anarchisme', []], ['David Graeber', '1961-2020', 'eco-anarchisme', []], ['James C. Scott', '1936-2024', 'eco-anarchisme', []], ['Marshall Sahlins', '1930-2021', 'eco-anarchisme', []], ['Pierre Clastres', '1934-1977', 'eco-anarchisme', []], ['Cornélius Castoriadis', '1922-1997', 'eco-anarchisme', []], ['David Harvey', '1935-', 'eco-anarchisme', ['ecosocialisme']], ['Henri Lefebvre', '1901-1991', 'eco-anarchisme', ['ecosocialisme']], ['Émile Gravelle', '1855-1920', 'eco-anarchisme', []], ['Henri Zisly', '1872-1945', 'eco-anarchisme', []], ['Edward Carpenter', '1844-1929', 'eco-anarchisme', []], ['William Morris', '1834-1896', 'eco-anarchisme', []], ['John Ruskin', '1819-1900', 'eco-anarchisme', []], ['Kirkpatrick Sale', '1937-', 'eco-anarchisme', []], ['Wendell Berry', '1934-', 'eco-anarchisme', []], ['Kristin Ross', '1953-', 'eco-anarchisme', []], ['Theodore Kaczynski', '1942-2023', 'eco-anarchisme', ['technocritique']], ['Saint-Simon', '1760-1825', 'eco-anarchisme', []], ['Auguste Comte', '1798-1857', 'eco-anarchisme', []], ['Alberto Magnaghi', '1941-2023', 'eco-anarchisme', []], ['Peter Berg', '1937-2011', 'eco-anarchisme', []], ['Andreas Malm', '1977-', 'ecosocialisme', ['eco-anarchisme']], // Écosocialisme ['Karl Marx', '1818-1883', 'ecosocialisme', []], ['Friedrich Engels', '1820-1895', 'ecosocialisme', []], ['Rosa Luxemburg', '1871-1919', 'ecosocialisme', []], ['Walter Benjamin', '1892-1940', 'ecosocialisme', []], ['John Maynard Keynes', '1883-1946', 'ecosocialisme', []], ['Pascal Lamy', '1947-', 'ecosocialisme', []], ['Ann Pettifor', '1947-', 'ecosocialisme', []], ['Holly Jean Buck', '', 'ecosocialisme', []], ['Cédric Durand', '1975-', 'ecosocialisme', []], ['Kim Stanley Robinson', '1952-', 'ecosocialisme', []], ['André Gorz', '1923-2007', 'ecosocialisme', ['decroissance', 'technocritique']], ['Kohei Saito', '1987-', 'ecosocialisme', ['decroissance']], ['Razmig Keucheyan', '1975-', 'ecosocialisme', []], ['Dominique Méda', '1962-', 'ecosocialisme', []], ['Dominique Bourg', '1953-', 'ecosocialisme', []], ['Troy Vettese', '', 'ecosocialisme', []], ['Loïc Blondiaux', '1962-', 'ecosocialisme', []], ['Drew Pendergrass', '', 'ecosocialisme', []], ['Jason W. Moore', '', 'ecosocialisme', []], ["James O'Connor", '1930-2017', 'ecosocialisme', []], ['Herman Daly', '1938-2022', 'ecosocialisme', ['capitalisme-vert']], ['John Bellamy Foster', '1953-', 'ecosocialisme', []], ['Michael Löwy', '1938-', 'ecosocialisme', []], ['Joel Kovel', '1936-2018', 'ecosocialisme', []], ['Naomi Klein', '1970-', 'ecosocialisme', []], // Technocritique ['Jacques Ellul', '1912-1994', 'technocritique', []], ['Bernard Charbonneau', '1910-1996', 'technocritique', []], ['Lewis Mumford', '1895-1990', 'technocritique', []], ['Alain Caillé', '1944-', 'technocritique', []], ['Hans Jonas', '1903-1993', 'technocritique', ['ethiques-environnementales']], ['Herbert Marcuse', '1898-1979', 'technocritique', []], ['Günther Anders', '1902-1992', 'technocritique', []], ['Pierre Fournier', '1937-1973', 'technocritique', []], ['Alexandre Grothendieck', '1928-2014', 'technocritique', []], ['Patrick Viveret', '1948-', 'technocritique', []], ['Philippe Bihouix', '1971-', 'technocritique', []], ['Jean Baudrillard', '1929-2007', 'technocritique', []], ['Serge Latouche', '1940-', 'decroissance', ['technocritique']], ['Ivan Illich', '1926-2002', 'technocritique', ['decroissance']], ['Leopold Kohr', '1909-1994', 'technocritique', ['decroissance']], ['Ernst Schumacher', '1911-1977', 'technocritique', ['decroissance']], ['Nicholas Georgescu-Roegen', '1906-1994', 'decroissance', ['technocritique']], // Écoféminismes ["Françoise d'Eaubonne", '1920-2005', 'ecofeminismes', []], ['Vandana Shiva', '1952-', 'ecofeminismes', ['ecologies-decoloniales']], ['Starhawk', '1951-', 'ecofeminismes', []], ['Ariel Salleh', '1944-', 'ecofeminismes', []], ['Maria Mies', '1931-2023', 'ecofeminismes', []], ['Carolyn Merchant', '1936-', 'ecofeminismes', []], ['Silvia Federici', '1942-', 'ecofeminismes', []], ['Val Plumwood', '1939-2008', 'ecofeminismes', []], ['Susan Griffin', '1943-', 'ecofeminismes', []], ['Veronika Bennholdt-Thomsen', '1944-', 'ecofeminismes', []], ['Geneviève Pruvost', '1973-', 'ecofeminismes', []], ['Donna Haraway', '1944-', 'ecofeminismes', ['pensees-vivant']], ['Émilie Hache', '', 'ecofeminismes', []], ['Joanna Macy', '1929-', 'ecofeminismes', ['ethiques-environnementales']], // Capitalisme vert ['Bill Gates', '1955-', 'capitalisme-vert', []], ['Christiana Figueres', '1956-', 'capitalisme-vert', []], ['Nicholas Stern', '1946-', 'capitalisme-vert', []], ['Jeffrey Sachs', '1954-', 'capitalisme-vert', []], ['Jared Diamond', '1937-', 'capitalisme-vert', ['decroissance']], ['Jørgen Randers', '1945-', 'capitalisme-vert', ['decroissance']], ['Donella Meadows', '1941-2001', 'decroissance', ['capitalisme-vert']], ['Dennis Meadows', '1942-', 'decroissance', ['capitalisme-vert']], ['Kate Raworth', '1970-', 'capitalisme-vert', []], ['Al Gore', '1948-', 'capitalisme-vert', []], ['Hal Harvey', '1960-', 'capitalisme-vert', []], ['Laurence Tubiana', '1951-', 'capitalisme-vert', []], ['Amory Lovins', '1947-', 'capitalisme-vert', []], ['David Pearce', '1959-', 'capitalisme-vert', []], ['Kerry Turner', '1948-', 'capitalisme-vert', []], ['David Keith', '1963-', 'capitalisme-vert', []], ['Ted Nordhaus', '1965-', 'capitalisme-vert', []], ['Michael Shellenberger', '1971-', 'capitalisme-vert', []], ['Pavan Sukhdev', '1960-', 'capitalisme-vert', []], ['Janine Benyus', '1958-', 'capitalisme-vert', []], ['Robert Costanza', '1950-', 'capitalisme-vert', []], ['Peter Kareiva', '1951-', 'capitalisme-vert', []], ['Michelle Marvier', '', 'capitalisme-vert', []], ['Robert Lalasz', '1915-2003', 'capitalisme-vert', []], ['Steward Brand', '1938-', 'capitalisme-vert', []], ['Paul Crutzen', '1933-2021', 'capitalisme-vert', []], ['Kenneth Boulding', '1910-1993', 'capitalisme-vert', []], ['Eugene Odum', '1913-2002', 'capitalisme-vert', []], ['Howard Odum', '1924-2002', 'capitalisme-vert', []], ['Jean-Marc Jancovici', '1962-', 'capitalisme-vert', []], ['Yves Cochet', '1946-', 'capitalisme-vert', ['decroissance']], ['Pablo Servigne', '1978-', 'decroissance', ['capitalisme-vert']], ['Gauthier Chapelle', '1968-', 'decroissance', ['capitalisme-vert']], // Écologies décoloniales ['Malcom Ferdinand', '1985-', 'ecologies-decoloniales', []], ['Frantz Fanon', '1925-1961', 'ecologies-decoloniales', []], ['Édouard Glissant', '1928-2011', 'ecologies-decoloniales', []], ['Aimé Césaire', '1913-2008', 'ecologies-decoloniales', []], ['Mohamad Amer Meziane', '', 'ecologies-decoloniales', []], ['Chico Mendes', '1944-1988', 'ecologies-decoloniales', []], ['Joan Martínez Alier', '1939-', 'ecologies-decoloniales', []], ['Arturo Escobar', '1951-', 'ecologies-decoloniales', []], ['Sous-commandant Marcos', '1957-', 'ecologies-decoloniales', []], ['Alberto Acosta', '1948-', 'ecologies-decoloniales', []], ['Jérôme Baschet', '1960-', 'ecologies-decoloniales', []], ['Fatima Ouassak', '1976-', 'ecofeminismes', ['ecologies-decoloniales']], ['William Acker', '1991-', 'ecologies-decoloniales', []], ['Giorgos Kallis', '1972-', 'ecologies-decoloniales', ['decroissance']], ['Bernard Lambert', '1931-1984', 'ecologies-decoloniales', []], // Écofascismes ['Alain de Benoist', '1943-', 'ecofascismes', []], ['Paul Ralph Ehrlich', '1932-', 'ecofascismes', []], ['Garrett Hardin', '1915-2003', 'ecofascismes', []], ['Edward Osborne Wilson', '1929-2021', 'ecofascismes', []], ['Thomas Malthus', '1803-1882', 'ecofascismes', []], ['David Foreman', '1946-2022', 'ecofascismes', []], ['Piero San Giorgio', '1971-', 'ecofascismes', []], // Éthique environnementale ['Arne Næss', '1912-2009', 'ethiques-environnementales', []], ['Rachel Carson', '1907-1964', 'ethiques-environnementales', []], ['Aldo Leopold', '1887-1948', 'ethiques-environnementales', []], ['Imanishi Kinji', '1902-1992', 'ethiques-environnementales', []], ['Paul Watson', '1950-', 'ethiques-environnementales', []], ['John Muir', '1838-1914', 'ethiques-environnementales', []], ['Edward Abbey', '1927-1989', 'ethiques-environnementales', []], ['John Baird Callicott', '1941-', 'ethiques-environnementales', []], ['Bill Mollison', '1928-2016', 'ethiques-environnementales', []], ['David Holmgren', '1955-', 'ethiques-environnementales', []], ['Peter Singer', '1946-', 'ethiques-environnementales', []], ['Pierre Rabhi', '1938-2021', 'ethiques-environnementales', []], ['Rob Hopkins', '1968-', 'ethiques-environnementales', []], ['Cyril Dion', '1978-', 'ethiques-environnementales', []], ['Gandhi', '1869-1948', 'ethiques-environnementales', []], ['Gifford Pinchot', '1865-1946', 'ethiques-environnementales', []], ['Lanza del Vasto', '1901-1981', 'ethiques-environnementales', []], ['Jorge Mario Bergoglio', '1936-', 'ethiques-environnementales', []], ['Gary Snyder', '1930-', 'ethiques-environnementales', []], ['Henry David Thoreau', '1817-1862', 'ethiques-environnementales', []], ['Ralph Waldo Emerson', '1803-1882', 'ethiques-environnementales', []], ['José Bové', '1953-', 'ethiques-environnementales', []], ['Glenn Albrecht', '1953-', 'ethiques-environnementales', []], // Pensées du vivant ['Bruno Latour', '1947-2022', 'pensees-vivant', []], ['Isabelle Stengers', '1949-', 'pensees-vivant', []], ['Vinciane Despret', '1959-', 'pensees-vivant', []], ['Baptiste Morizot', '1983-', 'pensees-vivant', []], ['Philippe Descola', '1949-', 'pensees-vivant', []], ['Eduardo Viveiros de Castro', '1951-', 'pensees-vivant', []], ['Anna Tsing', '1952-', 'pensees-vivant', []], ['Deborah Bird Rose', '1946-2018', 'pensees-vivant', []], ['Lynn Margulis', '1938-2011', 'pensees-vivant', []], ['James Lovelock', '1919-2022', 'pensees-vivant', []], ['Serge Moscovici', '1925-2014', 'pensees-vivant', []], ['Theodore Roszak', '1933-2011', 'pensees-vivant', []], ['Baruch Spinoza', '1632-1677', 'pensees-vivant', []], ]; // Special slug overrides (match v2.1 IDs + ligatures) const NAME_TO_SLUG_OVERRIDES = { 'Malcom Ferdinand': 'malcolm-ferdinand', "Françoise d'Eaubonne": 'francoise-deaubonne', 'Donella Meadows': 'donella-meadows', 'Dennis Meadows': 'dennis-meadows', 'Arne Næss': 'arne-naess', 'Jørgen Randers': 'jorgen-randers', }; function slugify(name) { // Pre-process special ligatures and chars not handled by NFKD let pre = name .replace(/[æÆ]/g, 'ae') .replace(/[øØ]/g, 'o') .replace(/[œŒ]/g, 'oe') .replace(/ß/g, 'ss'); // Remove diacritical marks const noAccent = pre.normalize('NFKD').replace(/[̀-ͯ]/g, ''); return noAccent .toLowerCase() .replace(/[^a-z0-9]+/g, '-') .replace(/^-+|-+$/g, ''); } function getAuthorSlug(name) { if (NAME_TO_SLUG_OVERRIDES[name]) return NAME_TO_SLUG_OVERRIDES[name]; return slugify(name); } function main() { const raw = fs.readFileSync(JSON_PATH, 'utf-8'); const data = JSON.parse(raw); const existingBySlug = {}; for (const a of data.auteurs) existingBySlug[a.id] = a; const newAuthors = []; const seenSlugs = new Set(); for (const [nom, dates, ecolePrincipale, ecolesSecondaires] of BONPOTE_AUTHORS) { const slug = getAuthorSlug(nom); if (seenSlugs.has(slug)) { console.error(`DUPLICATE SKIP: ${nom} -> ${slug}`); continue; } seenSlugs.add(slug); const ingere = INGESTED_AUTHOR_SLUGS.has(slug); const ecoles = [ecolePrincipale, ...ecolesSecondaires]; if (existingBySlug[slug]) { // Preserve enriched entry const entry = { ...existingBySlug[slug], ingere }; newAuthors.push(entry); } else { // New minimal entry const bioProvisoire = ingere ? `Auteur·ice ingéré·e dans le RAG ATIS, bio à enrichir lors de PRG-5.` : `Théoricien·ne présent·e sur le poster Bonpote (${ecolePrincipale}), non ingéré·e dans le RAG ATIS.`; newAuthors.push({ id: slug, nom, dates, ecoles, ecole_principale: ecolePrincipale, livres_rag: [], theses_cles_attendues: [], bio_courte_provisoire: bioProvisoire, ingere, }); } } // Preserve any v2.1 author not in Bonpote list for (const [slug, entry] of Object.entries(existingBySlug)) { if (!seenSlugs.has(slug)) { const copy = { ...entry }; if (!('ingere' in copy)) copy.ingere = INGESTED_AUTHOR_SLUGS.has(slug); newAuthors.push(copy); seenSlugs.add(slug); console.error(`NOTE: preserved v2.1 author not in Bonpote canonical: ${slug}`); } } const auteursCount = newAuthors.length; const auteursIngeresCount = newAuthors.filter(a => a.ingere).length; data.meta.version = '3.0'; data.meta.updated = '2026-05-12'; data.meta.auteurs_count = auteursCount; data.meta.auteurs_ingeres_count = auteursIngeresCount; data.meta.source = 'FRACAS Bonpote V2 oct 2024 + LightRAG corpus 12/05/2026 (v3.0 sync)'; data.meta.note_v3_0 = 'Phase 8.A sync corpus unifie : ~140 auteurs Bonpote integres, flag ingere:true/false selon LightRAG VPS. Auteurs non-ingeres = entrees minimales (bio provisoire, livres_rag vide), a enrichir lors de PRG-4/PRG-5.'; data.auteurs = newAuthors; fs.writeFileSync(JSON_PATH, JSON.stringify(data, null, 2), 'utf-8'); // Validate parse-back const parsedBack = JSON.parse(fs.readFileSync(JSON_PATH, 'utf-8')); if (parsedBack.auteurs.length !== auteursCount) { console.error('PARSE-BACK MISMATCH'); process.exit(1); } // Stats const schoolsStats = {}; for (const a of newAuthors) { const ep = a.ecole_principale || '?'; if (!schoolsStats[ep]) schoolsStats[ep] = { total: 0, ingere: 0 }; schoolsStats[ep].total++; if (a.ingere) schoolsStats[ep].ingere++; } console.log('\n=== JSON v3.0 written ==='); console.log(`Total auteurs : ${auteursCount}`); console.log(`Ingeres : ${auteursIngeresCount}`); console.log(`Non-ingeres : ${auteursCount - auteursIngeresCount}`); console.log(`Parse-back : OK (${parsedBack.auteurs.length} auteurs)`); console.log('\nPer school (ecole_principale):'); const sortedSchools = Object.entries(schoolsStats).sort((a, b) => b[1].total - a[1].total); for (const [school, st] of sortedSchools) { console.log(` ${school.padEnd(30)} total=${String(st.total).padStart(3)} ingere=${String(st.ingere).padStart(3)} non-ing=${String(st.total - st.ingere).padStart(3)}`); } // Top 5 schools with most non-ingested const nonIngStats = sortedSchools .map(([k, v]) => [k, v.total - v.ingere]) .sort((a, b) => b[1] - a[1]) .slice(0, 5); console.log('\nTop 5 ecoles avec le plus de non-ingeres (PRG-4 priorities):'); for (const [school, count] of nonIngStats) { console.log(` ${school.padEnd(30)} non-ing=${count}`); } } main();