From a46f05891703aed911762bd351631c0d992ff7a9 Mon Sep 17 00:00:00 2001 From: Archicratia Date: Tue, 3 Mar 2026 14:27:35 +0100 Subject: [PATCH 1/2] edit: apply ticket #174 (/archicrat-ia/chapitre-3/#p-1-60c7ea48) --- src/anchors/anchor-aliases.json | 7 +++++-- src/content/{archicratie => }/archicrat-ia/chapitre-1.mdx | 0 src/content/{archicratie => }/archicrat-ia/chapitre-2.mdx | 0 src/content/{archicratie => }/archicrat-ia/chapitre-3.mdx | 2 +- src/content/{archicratie => }/archicrat-ia/chapitre-4.mdx | 0 src/content/{archicratie => }/archicrat-ia/chapitre-5.mdx | 0 src/content/{archicratie => }/archicrat-ia/conclusion.mdx | 0 src/content/{archicratie => }/archicrat-ia/prologue.mdx | 0 8 files changed, 6 insertions(+), 3 deletions(-) rename src/content/{archicratie => }/archicrat-ia/chapitre-1.mdx (100%) rename src/content/{archicratie => }/archicrat-ia/chapitre-2.mdx (100%) rename src/content/{archicratie => }/archicrat-ia/chapitre-3.mdx (99%) rename src/content/{archicratie => }/archicrat-ia/chapitre-4.mdx (100%) rename src/content/{archicratie => }/archicrat-ia/chapitre-5.mdx (100%) rename src/content/{archicratie => }/archicrat-ia/conclusion.mdx (100%) rename src/content/{archicratie => }/archicrat-ia/prologue.mdx (100%) diff --git a/src/anchors/anchor-aliases.json b/src/anchors/anchor-aliases.json index 6885828..f6db80e 100644 --- a/src/anchors/anchor-aliases.json +++ b/src/anchors/anchor-aliases.json @@ -1,2 +1,5 @@ -{} - \ No newline at end of file +{ + "/archicrat-ia/chapitre-3/": { + "p-1-60c7ea48": "p-1-a21087b0" + } +} diff --git a/src/content/archicratie/archicrat-ia/chapitre-1.mdx b/src/content/archicrat-ia/chapitre-1.mdx similarity index 100% rename from src/content/archicratie/archicrat-ia/chapitre-1.mdx rename to src/content/archicrat-ia/chapitre-1.mdx diff --git a/src/content/archicratie/archicrat-ia/chapitre-2.mdx b/src/content/archicrat-ia/chapitre-2.mdx similarity index 100% rename from src/content/archicratie/archicrat-ia/chapitre-2.mdx rename to src/content/archicrat-ia/chapitre-2.mdx diff --git a/src/content/archicratie/archicrat-ia/chapitre-3.mdx b/src/content/archicrat-ia/chapitre-3.mdx similarity index 99% rename from src/content/archicratie/archicrat-ia/chapitre-3.mdx rename to src/content/archicrat-ia/chapitre-3.mdx index fad4be6..7d67a58 100644 --- a/src/content/archicratie/archicrat-ia/chapitre-3.mdx +++ b/src/content/archicrat-ia/chapitre-3.mdx @@ -14,7 +14,7 @@ source: --- Ce chapitre se tient à un point nodal de notre essai-thèse : il ouvre un espace d’exploration systématique des formes conceptuelles et philosophiques à travers lesquelles le pouvoir se configure comme régime de régulation. Il ne s’agit pas ici de revenir une nouvelle fois sur les fondements de l’autorité, ni d’interroger la légitimité politique au sens classique du terme, ni même d’enquêter sur la genèse des institutions. L’ambition est autre, structurelle, transversale, morphologique, elle tentera d’arpenter, à même les dispositifs, les pensées, les théorisations et les expériences, les modalités différentiées par lesquelles s’instaurent, s’éprouvent et se disputent les formes de régulation du vivre-ensemble. -Dès lors, ce chapitre ne postule aucun fondement, ne cherche aucun point d’origine, ne prétend restituer aucune ontologie stable du politique. Ce qu’il donne à lire, c’est une cartographie dynamique des régimes de régulation, traversée par des formes irréductibles, non homogènes, souvent conflictuelles, parfois incompatibles, mais toutes pensées comme des configurations singulières. +Dès lors, ce chapitre ne postule aucun fondement, ne cherche aucun point d’origine, ne prétend restituer aucune ontologie stable du politique. Ce qu’il donne à lire, c’est une cartographie dynamique des régimes de régulation, traversée par des formes irréductibles, non homogènes, souvent conflictuelles, parfois incompatibles, mais toutes pensées comme des configurations singulières, et souvent complémentaires. Ainsi, loin d’être une galerie illustrative de théories politiques juxtaposées, le chapitre s’agence comme une topologie critique, une plongée stratigraphique dans les scènes où s’articule la régulation — entendue ici non comme stabilisation externe ou ajustement technico-fonctionnel, mais comme dispositif instituant, tension structurante, scène traversée de conflictualité et d’exigence normative. Car à nos yeux, la régulation n’est pas ce qui vient après le pouvoir, elle en est la forme même constitutive — son architecture, son rythme, son épaisseur. Elle est ce par quoi le pouvoir ne se contente pas d’être exercé, mais s’institue, se justifie, se dispute, se recompose. diff --git a/src/content/archicratie/archicrat-ia/chapitre-4.mdx b/src/content/archicrat-ia/chapitre-4.mdx similarity index 100% rename from src/content/archicratie/archicrat-ia/chapitre-4.mdx rename to src/content/archicrat-ia/chapitre-4.mdx diff --git a/src/content/archicratie/archicrat-ia/chapitre-5.mdx b/src/content/archicrat-ia/chapitre-5.mdx similarity index 100% rename from src/content/archicratie/archicrat-ia/chapitre-5.mdx rename to src/content/archicrat-ia/chapitre-5.mdx diff --git a/src/content/archicratie/archicrat-ia/conclusion.mdx b/src/content/archicrat-ia/conclusion.mdx similarity index 100% rename from src/content/archicratie/archicrat-ia/conclusion.mdx rename to src/content/archicrat-ia/conclusion.mdx diff --git a/src/content/archicratie/archicrat-ia/prologue.mdx b/src/content/archicrat-ia/prologue.mdx similarity index 100% rename from src/content/archicratie/archicrat-ia/prologue.mdx rename to src/content/archicrat-ia/prologue.mdx From 9cb0d5e416fcabbcfb4fb8987337491bb2219ba0 Mon Sep 17 00:00:00 2001 From: Archicratia Date: Tue, 3 Mar 2026 15:02:50 +0100 Subject: [PATCH 2/2] content: wire archicrat-ia as first-class collection (routes + toc + schema) --- scripts/import-docx.mjs | 47 +++++++++++++++++++------- src/components/EditionToc.astro | 11 +++--- src/content/config.ts | 29 +++++++++++----- src/pages/archicrat-ia/[...slug].astro | 9 +++-- src/pages/archicrat-ia/index.astro | 9 +++-- 5 files changed, 68 insertions(+), 37 deletions(-) diff --git a/scripts/import-docx.mjs b/scripts/import-docx.mjs index ebc19f2..eb138f7 100644 --- a/scripts/import-docx.mjs +++ b/scripts/import-docx.mjs @@ -114,7 +114,6 @@ async function runMammoth(docxPath, assetsOutDirWebRoot) { ); let html = result.value || ""; - // Mammoth gives relative src="image-xx.png" ; we will prefix later return html; } @@ -182,6 +181,25 @@ async function exists(p) { try { await fs.access(p); return true; } catch { return false; } } +/** + * ✅ compat: + * - ancien : collection="archicratie" + slug="archicrat-ia/chapitre-3" + * - nouveau : collection="archicrat-ia" + slug="chapitre-3" + * + * But : toujours écrire dans src/content/archicrat-ia/.mdx + */ +function normalizeDest(collection, slug) { + let outCollection = String(collection || "").trim(); + let outSlug = String(slug || "").trim().replace(/^\/+|\/+$/g, ""); + + if (outCollection === "archicratie" && outSlug.startsWith("archicrat-ia/")) { + outCollection = "archicrat-ia"; + outSlug = outSlug.replace(/^archicrat-ia\//, ""); + } + + return { outCollection, outSlug }; +} + async function main() { const args = parseArgs(process.argv); const manifestPath = path.resolve(args.manifest); @@ -203,11 +221,14 @@ async function main() { for (const it of selected) { const docxPath = path.resolve(it.source); - const outFile = path.resolve("src/content", it.collection, `${it.slug}.mdx`); + + const { outCollection, outSlug } = normalizeDest(it.collection, it.slug); + + const outFile = path.resolve("src/content", outCollection, `${outSlug}.mdx`); const outDir = path.dirname(outFile); - const assetsPublicDir = path.posix.join("/imported", it.collection, it.slug); - const assetsDiskDir = path.resolve("public", "imported", it.collection, it.slug); + const assetsPublicDir = path.posix.join("/imported", outCollection, outSlug); + const assetsDiskDir = path.resolve("public", "imported", outCollection, outSlug); if (!(await exists(docxPath))) { throw new Error(`Missing source docx: ${docxPath}`); @@ -241,18 +262,20 @@ async function main() { html = rewriteLocalImageLinks(html, assetsPublicDir); body = html.trim() ? html : "

(Import vide)

"; } - + const defaultVersion = process.env.PUBLIC_RELEASE || "0.1.0"; + // ✅ IMPORTANT: archicrat-ia partage edition/status avec archicratie (pas de migration frontmatter) const schemaDefaultsByCollection = { - archicratie: { edition: "archicratie", status: "modele_sociopolitique", level: 1 }, - ia: { edition: "ia", status: "cas_pratique", level: 1 }, - traite: { edition: "traite", status: "ontodynamique", level: 1 }, - glossaire: { edition: "glossaire", status: "lexique", level: 1 }, - atlas: { edition: "atlas", status: "atlas", level: 1 }, + archicratie: { edition: "archicratie", status: "modele_sociopolitique", level: 1 }, + "archicrat-ia": { edition: "archicrat-ia", status: "essai_these", level: 1 }, + ia: { edition: "ia", status: "cas_pratique", level: 1 }, + traite: { edition: "traite", status: "ontodynamique", level: 1 }, + glossaire: { edition: "glossaire", status: "lexique", level: 1 }, + atlas: { edition: "atlas", status: "atlas", level: 1 }, }; - const defaults = schemaDefaultsByCollection[it.collection] || { edition: it.collection, status: "draft", level: 1 }; + const defaults = schemaDefaultsByCollection[outCollection] || { edition: outCollection, status: "draft", level: 1 }; const fm = [ "---", @@ -282,4 +305,4 @@ async function main() { main().catch((e) => { console.error("\nERROR:", e?.message || e); process.exit(1); -}); +}); \ No newline at end of file diff --git a/src/components/EditionToc.astro b/src/components/EditionToc.astro index 7f6a5ff..54c3f54 100644 --- a/src/components/EditionToc.astro +++ b/src/components/EditionToc.astro @@ -3,14 +3,11 @@ import { getCollection } from "astro:content"; const { currentSlug } = Astro.props; -const entries = (await getCollection("archicratie")) - .filter((e) => e.slug.startsWith("archicrat-ia/")) +// ✅ Après migration : TOC = collection "archicrat-ia" +const entries = (await getCollection("archicrat-ia")) .sort((a, b) => (a.data.order ?? 0) - (b.data.order ?? 0)); -// ✅ On route l’Essai-thèse sur /archicrat-ia// -// (Astro trailingSlash = always → on garde le "/" final) -const strip = (s) => String(s || "").replace(/^archicrat-ia\//, ""); -const href = (slug) => `/archicrat-ia/${strip(slug)}/`; +const href = (slug) => `/archicrat-ia/${slug}/`; ---