feat(glossaire): enrichit la cartographie archicratique et les archicrations
All checks were successful
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 42s
CI / build-and-anchors (pull_request) Successful in 38s

This commit is contained in:
2026-03-14 19:55:16 +01:00
parent 8e9f7314f5
commit 9d8d60d00f
55 changed files with 2535 additions and 403 deletions

View File

@@ -5,16 +5,56 @@ import { getCollection, render } from "astro:content";
export async function getStaticPaths() {
const entries = await getCollection("glossaire");
const paths = [];
const seen = new Set();
return entries.map((entry) => ({
params: { slug: String(entry.id).replace(/\.(md|mdx)$/i, "") },
props: { entry },
}));
for (const entry of entries) {
const canonicalSlug = String(entry.id || "")
.trim()
.replace(/^\/+|\/+$/g, "")
.replace(/\.(md|mdx)$/i, "")
.toLowerCase();
if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(canonicalSlug)) continue;
const addPath = (rawSlug) => {
const requestedSlug = String(rawSlug || "")
.trim()
.replace(/^\/+|\/+$/g, "")
.replace(/\.(md|mdx)$/i, "")
.toLowerCase();
if (!requestedSlug) return;
if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(requestedSlug)) return;
if (seen.has(requestedSlug)) return;
seen.add(requestedSlug);
paths.push({
params: { slug: requestedSlug },
props: {
entry,
requestedSlug,
canonicalSlug,
},
});
};
addPath(canonicalSlug);
for (const alias of entry.data.urlAliases ?? []) {
addPath(alias);
}
}
return paths;
}
const { entry } = Astro.props;
const { entry, requestedSlug, canonicalSlug } = Astro.props;
const allEntries = await getCollection("glossaire");
const { Content } = await render(entry);
const isAliasRoute = requestedSlug !== canonicalSlug;
const canonicalHref = `/glossaire/${canonicalSlug}/`;
---
<GlossaryLayout
@@ -25,8 +65,69 @@ const { Content } = await render(entry);
<GlossaryAside currentEntry={entry} allEntries={allEntries} />
</Fragment>
{isAliasRoute && (
<p class="glossary-legacy-note">
Cette entrée a été renommée. Lintitulé canonique est :
<a href={canonicalHref}>{entry.data.term}</a>.
</p>
)}
<h1>{entry.data.term}</h1>
<p><em>{entry.data.definitionShort}</em></p>
{(entry.data.authors?.length > 0 || entry.data.tradition) && (
<div class="glossary-entry-meta">
{entry.data.authors?.length > 0 && (
<p>
<strong>Auteurs liés :</strong> {entry.data.authors.join(", ")}
</p>
)}
{entry.data.tradition && (
<p>
<strong>Tradition :</strong> {entry.data.tradition}
</p>
)}
</div>
)}
<Content />
</GlossaryLayout>
</GlossaryLayout>
<style>
.glossary-legacy-note{
padding: 10px 12px;
border: 1px solid rgba(127,127,127,0.22);
border-radius: 12px;
background: rgba(127,127,127,0.05);
font-size: 14px;
line-height: 1.45;
}
.glossary-entry-meta{
margin: 0 0 16px;
padding: 10px 12px;
border: 1px solid rgba(127,127,127,0.18);
border-radius: 12px;
background: rgba(127,127,127,0.04);
}
.glossary-entry-meta p{
margin: 0;
font-size: 14px;
line-height: 1.5;
}
.glossary-entry-meta p + p{
margin-top: 6px;
}
@media (prefers-color-scheme: dark){
.glossary-entry-meta{
background: rgba(255,255,255,0.03);
}
}
@media (prefers-color-scheme: dark){
.glossary-legacy-note{
background: rgba(255,255,255,0.04);
}
}
</style>

View File

@@ -0,0 +1,338 @@
---
import GlossaryLayout from "../../layouts/GlossaryLayout.astro";
import { getCollection } from "astro:content";
const entries = await getCollection("glossaire");
const slugOf = (entry) => String(entry.id).replace(/\.(md|mdx)$/i, "");
const hrefOf = (entry) => `/glossaire/${slugOf(entry)}/`;
const collator = new Intl.Collator("fr", { sensitivity: "base", numeric: true });
const bySlug = new Map(entries.map((entry) => [slugOf(entry), entry]));
function resolve(slugs = []) {
return slugs
.map((slug) => bySlug.get(slug))
.filter(Boolean)
.sort((a, b) => collator.compare(a.data.term, b.data.term));
}
const sections = [
{
id: "symboliques-sacrales",
title: "Archicrations symboliques et sacrales",
intro:
"Formes de co-viabilité où lordre collectif se stabilise à partir dancrages symboliques premiers, de médiations rituelles, de sacralités diffuses ou dinfrastructures de soutien à la tenue du groupe.",
items: resolve([
"archicrations-proto-symboliques",
"archicrations-sacrales-non-etatiques",
"archicrations-techno-logistiques",
]),
},
{
id: "scripturales-theologiques",
title: "Archicrations scripturales et théologiques",
intro:
"Formes où la régulation repose sur linscription, lautorité du texte, la mise en ordre cosmologique du monde ou la médiation théologique.",
items: resolve([
"archicrations-scripturo-normatives",
"archicrations-scripturo-cosmologiques",
"archicrations-theologiques",
]),
},
{
id: "memorielles-epistemiques-symboliques",
title: "Archicrations mémorielles, épistémiques et symboliques",
intro:
"Formes dans lesquelles la tenue du collectif dépend du récit du passé, de linstitution du vrai ou de la circulation de formes symboliques partageables.",
items: resolve([
"archicrations-historiographiques",
"archicrations-epistemiques",
"archicrations-esthetico-symboliques",
]),
},
{
id: "politico-cratiales",
title: "Archicrations politico-cratiales",
intro:
"Formes de régulation dans lesquelles lordre collectif se structure principalement autour de la norme, de léchange ou de la puissance organisée.",
items: resolve([
"archicrations-normativo-politiques",
"archicrations-marchandes",
"archicrations-guerrieres",
]),
},
{
id: "differentielles-hybrides",
title: "Configurations différentielles et hybrides",
intro:
"Formes mixtes, modulées ou composites dans lesquelles plusieurs régimes se superposent, sinhibent ou sentrelacent sans se réduire à une forme unifiée.",
items: resolve([
"archicrations-differentielles-et-formes-hybrides",
]),
},
];
const totalCount = sections.reduce((sum, section) => sum + section.items.length, 0);
---
<GlossaryLayout
title="Archicrations"
version="1.0"
>
<Fragment slot="aside">
<nav class="archi-aside" aria-label="Navigation des archicrations">
<div class="archi-aside__block">
<a class="archi-aside__back" href="/glossaire/">← Retour au glossaire</a>
<div class="archi-aside__title">Archicrations</div>
<div class="archi-aside__meta">{totalCount} types cartographiés</div>
</div>
<div class="archi-aside__block">
<h2 class="archi-aside__heading">Dans cette page</h2>
<ul class="archi-aside__list">
{sections.map((section) => (
<li><a href={`#${section.id}`}>{section.title}</a></li>
))}
</ul>
</div>
<div class="archi-aside__block">
<h2 class="archi-aside__heading">Renvois utiles</h2>
<ul class="archi-aside__list">
<li><a href="/glossaire/archicration/">Archicration</a></li>
<li><a href="/glossaire/archicratie/">Archicratie</a></li>
<li><a href="/glossaire/arcalite/">Arcalité</a></li>
<li><a href="/glossaire/cratialite/">Cratialité</a></li>
<li><a href="/glossaire/co-viabilite/">Co-viabilité</a></li>
</ul>
</div>
</nav>
</Fragment>
<section class="archi-page">
<div class="archi-hero">
<p class="archi-kicker">Topologie archicratique</p>
<h1>Archicrations</h1>
<p class="archi-intro">
Cette page rassemble les principales formes darchicration distinguées
dans le glossaire. Elle propose une vue densemble des grands régimes de
co-viabilité à partir desquels un collectif se stabilise, se transmet,
se transforme ou se recompose.
</p>
<p class="archi-intro">
Les catégories proposées ci-dessous ne valent pas comme cases closes,
mais comme repères de lecture permettant de situer les différentes
topologies de régulation et leurs articulations.
</p>
</div>
{sections.map((section) => (
<section class="archi-section">
<div class="archi-section__head">
<h2 id={section.id}>{section.title}</h2>
<span class="archi-section__count">
{section.items.length} fiche{section.items.length > 1 ? "s" : ""}
</span>
</div>
<p class="archi-section__intro">{section.intro}</p>
<div class="archi-cards">
{section.items.map((entry) => (
<a class="archi-card" href={hrefOf(entry)}>
<strong>{entry.data.term}</strong>
<span>{entry.data.definitionShort}</span>
{entry.data.tradition && (
<small>Tradition : {entry.data.tradition}</small>
)}
{entry.data.authors?.length > 0 && (
<small>Auteurs liés : {entry.data.authors.join(", ")}</small>
)}
</a>
))}
</div>
</section>
))}
<section class="archi-section archi-section--final">
<h2>Portée densemble</h2>
<p>
Cette cartographie permet de lire les archicrations non comme des formes
isolées, mais comme des topologies de régulation susceptibles de se
renforcer, de se concurrencer ou de shybrider. Elle éclaire ainsi la
manière dont l
<a href="/glossaire/archicratie/">archicratie</a> peut être pensée comme
intelligibilité densemble des formes de co-viabilité.
</p>
</section>
</section>
</GlossaryLayout>
<style>
.archi-page{
padding: 8px 0 24px;
}
.archi-hero{
margin-bottom: 24px;
}
.archi-kicker{
font-size: 12px;
letter-spacing: .08em;
text-transform: uppercase;
opacity: .72;
margin-bottom: 8px;
}
.archi-intro{
max-width: 76ch;
opacity: .92;
}
.archi-section{
margin-top: 34px;
scroll-margin-top: calc(var(--sticky-offset) + 75px);
}
.archi-section h2{
scroll-margin-top: calc(var(--sticky-offset) + 75px);
}
.archi-section__head{
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 12px;
flex-wrap: wrap;
}
.archi-section__count{
font-size: 13px;
opacity: .72;
white-space: nowrap;
}
.archi-section__intro{
max-width: 78ch;
opacity: .92;
}
.archi-cards{
display: grid;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
gap: 12px;
margin-top: 14px;
}
.archi-card{
display: flex;
flex-direction: column;
gap: 8px;
padding: 14px 16px;
border: 1px solid rgba(127,127,127,0.22);
border-radius: 16px;
background: rgba(127,127,127,0.05);
text-decoration: none;
transition: transform 120ms ease, background 120ms ease;
}
.archi-card:hover{
transform: translateY(-1px);
background: rgba(127,127,127,0.08);
text-decoration: none;
}
.archi-card strong{
font-size: 15px;
line-height: 1.3;
}
.archi-card span{
font-size: 14px;
line-height: 1.45;
opacity: .92;
}
.archi-card small{
font-size: 12px;
line-height: 1.4;
opacity: .72;
}
.archi-section--final{
margin-top: 42px;
}
.archi-aside{
display: flex;
flex-direction: column;
gap: 14px;
}
.archi-aside__block{
border: 1px solid rgba(127,127,127,0.22);
border-radius: 16px;
padding: 12px;
background: rgba(127,127,127,0.05);
}
.archi-aside__back{
display: inline-block;
margin-bottom: 8px;
font-size: 13px;
font-weight: 700;
text-decoration: none;
}
.archi-aside__title{
font-size: 14px;
font-weight: 800;
letter-spacing: .2px;
line-height: 1.25;
}
.archi-aside__meta{
margin-top: 8px;
font-size: 12px;
line-height: 1.35;
opacity: .78;
}
.archi-aside__heading{
margin: 0 0 10px;
font-size: 13px;
font-weight: 800;
opacity: .9;
}
.archi-aside__list{
list-style: none;
margin: 0;
padding: 0;
}
.archi-aside__list li{
margin: 6px 0;
}
.archi-aside__list a{
text-decoration: none;
font-size: 13px;
line-height: 1.3;
}
@media (prefers-color-scheme: dark){
.archi-card,
.archi-aside__block{
background: rgba(255,255,255,0.04);
}
.archi-card:hover{
background: rgba(255,255,255,0.07);
}
}
</style>

View File

@@ -45,7 +45,7 @@ const verbes = byPredicate((e) => e.data.kind === "verbe");
const paradigmes = byPredicate((e) => e.data.kind === "paradigme");
const doctrines = byPredicate((e) => e.data.kind === "doctrine");
const paradigmesPreview = paradigmes.slice(0, 6);
const paradigmesPreview = paradigmes.slice(0, 8);
const doctrinesPreview = doctrines.slice(0, 4);
---
@@ -56,17 +56,19 @@ const doctrinesPreview = doctrines.slice(0, 4);
<h1>Glossaire archicratique</h1>
<p class="glossary-intro">
Ce glossaire rassemble les concepts, diagnostics, topologies, doctrines
et paradigmes utiles à la lecture du paradigme archicratique. Son
organisation repose sur les métadonnées de chaque entrée afin de
maintenir une structure cohérente, extensible et lisible.
et paradigmes utiles à la lecture du paradigme archicratique. Il ne se
contente pas daligner des définitions : il organise une cartographie
des prises théoriques, des régimes de régulation et des fondations
doctrinales mobilisés dans lessai-thèse.
</p>
</header>
<nav class="glossary-toc" aria-label="Sommaire du glossaire">
<a href="#reperes">Repères</a>
<a href="#paradigmes">Paradigmes mobilisés</a>
<a href="/glossaire/archicrations/">Page archicrations</a>
<a href="#cartographie">Cartographie théorique</a>
<a href="/glossaire/paradigmes/">Page paradigmes et doctrines</a>
<a href="#alphabetique">Index alphabétique</a>
<a href="/glossaire/paradigmes/">Page paradigmes</a>
</nav>
<section id="reperes" class="glossary-section">
@@ -157,14 +159,29 @@ const doctrinesPreview = doctrines.slice(0, 4);
)}
</section>
<section id="paradigmes" class="glossary-section">
<section class="glossary-block">
<h3>Archicrations du chapitre 2</h3>
<div class="glossary-cards">
<a class="glossary-card" href="/glossaire/archicrations/">
<strong>Cartographie des archicrations</strong>
<span>
Vue densemble des 13 types darchicrations élaborés dans le chapitre 2,
regroupés par blocs conceptuels.
</span>
</a>
</div>
</section>
<section id="cartographie" class="glossary-section">
<div class="glossary-section__head">
<div>
<h2>Paradigmes mobilisés</h2>
<h2>Cartographie théorique</h2>
<p class="glossary-intro">
Cette section rassemble les grands cadres théoriques, régimes
dintelligibilité et paradigmes de régulation avec lesquels
larchicratie dialogue, se distingue ou entre en tension.
Larchicratie dialogue avec deux grands ensembles : dune part des
<strong> doctrines fondatrices</strong>, qui posent un principe premier
de légitimité ou dordre ; dautre part des <strong>paradigmes de
régulation</strong>, qui décrivent des modes de tenue, de conflictualité,
dadministration ou de transformation des collectifs.
</p>
</div>
@@ -173,39 +190,32 @@ const doctrinesPreview = doctrines.slice(0, 4);
</a>
</div>
{paradigmes.length > 0 ? (
<>
<section class="glossary-block">
<h3>Paradigmes théoriques</h3>
<div class="glossary-cards">
{paradigmesPreview.map((e) => (
<a class="glossary-card" href={hrefOf(e)}>
<strong>{e.data.term}</strong>
<span>{e.data.definitionShort}</span>
</a>
))}
</div>
</section>
{doctrines.length > 0 && (
<section class="glossary-block">
<h3>Doctrines fondatrices</h3>
<div class="glossary-cards">
{doctrinesPreview.map((e) => (
<a class="glossary-card" href={hrefOf(e)}>
<strong>{e.data.term}</strong>
<span>{e.data.definitionShort}</span>
</a>
))}
</div>
</section>
)}
{doctrines.length > 0 && (
<section class="glossary-block">
<h3>Doctrines structurantes</h3>
<div class="glossary-cards">
{doctrinesPreview.map((e) => (
<a class="glossary-card" href={hrefOf(e)}>
<strong>{e.data.term}</strong>
<span>{e.data.definitionShort}</span>
</a>
))}
</div>
</section>
)}
</>
) : (
<p class="glossary-empty">
Les paradigmes externes seront ajoutés progressivement pour
cartographier le paysage théorique mobilisé par lessai-thèse.
</p>
{paradigmes.length > 0 && (
<section class="glossary-block">
<h3>Paradigmes régulateurs</h3>
<div class="glossary-cards">
{paradigmesPreview.map((e) => (
<a class="glossary-card" href={hrefOf(e)}>
<strong>{e.data.term}</strong>
<span>{e.data.definitionShort}</span>
</a>
))}
</div>
</section>
)}
</section>

View File

@@ -17,65 +17,48 @@ const doctrines = entries
---
<GlossaryLayout
title="Paradigmes théoriques"
title="Paradigmes et doctrines"
version="1.0"
>
<Fragment slot="aside">
<nav class="glossary-portal-aside" aria-label="Navigation des paradigmes">
<div class="glossary-portal-aside__block">
<a class="glossary-portal-aside__back" href="/glossaire/">← Retour au glossaire</a>
<div class="glossary-portal-aside__title">Paysage paradigmatique</div>
<div class="glossary-portal-aside__title">Cartographie théorique</div>
<div class="glossary-portal-aside__meta">
Paradigmes théoriques · doctrines structurantes
doctrines fondatrices · paradigmes régulateurs
</div>
</div>
<div class="glossary-portal-aside__block">
<h2 class="glossary-portal-aside__heading">Dans cette page</h2>
<ul class="glossary-portal-aside__list">
<li><a href="#paradigmes">Paradigmes théoriques</a></li>
<li><a href="#doctrines">Doctrines structurantes</a></li>
<li><a href="#doctrines">Doctrines fondatrices</a></li>
<li><a href="#paradigmes">Paradigmes régulateurs</a></li>
</ul>
</div>
</nav>
</Fragment>
<h1>Paysage paradigmatique</h1>
<h1>Cartographie théorique</h1>
<p>
Le paradigme archicratique sinscrit dans un paysage théorique plus large
mobilisant différents cadres danalyse du pouvoir, de la régulation et des
systèmes sociaux.
Larchicratie ne se déploie pas dans le vide. Elle sinscrit dans un paysage
intellectuel plus large où se croisent des doctrines fondatrices de lordre
et des paradigmes de régulation des collectifs.
</p>
<p>
Cette page rassemble les grands paradigmes externes mobilisés dans
lessai-thèse, ainsi que les doctrines structurantes qui permettent den
préciser certaines formulations. Elle constitue une porte dentrée vers la
cartographie intellectuelle au sein de laquelle larchicratie se situe, se
distingue ou entre en tension.
On appellera ici <strong>doctrines fondatrices</strong> les formulations qui
posent un principe premier de légitimité, de souveraineté ou dordre
politique. On appellera <strong>paradigmes régulateurs</strong> les cadres
théoriques qui décrivent des modes de tenue, de conflictualité,
dadministration, de reproduction ou de transformation des sociétés.
</p>
<section id="paradigmes" class="glossary-portal-section">
<h2>Paradigmes théoriques</h2>
<ul class="glossary-portal-list">
{paradigmes.map((entry) => {
const slug = slugOf(entry);
return (
<li>
<a href={`/glossaire/${slug}/`}>
{entry.data.term}
</a>
<span> — {entry.data.definitionShort}</span>
</li>
);
})}
</ul>
</section>
{doctrines.length > 0 && (
<section id="doctrines" class="glossary-portal-section">
<h2>Doctrines structurantes</h2>
<h2>Doctrines fondatrices</h2>
<ul class="glossary-portal-list">
{doctrines.map((entry) => {
const slug = slugOf(entry);
@@ -85,6 +68,20 @@ const doctrines = entries
{entry.data.term}
</a>
<span> — {entry.data.definitionShort}</span>
{(entry.data.authors?.length > 0 || entry.data.tradition) && (
<div class="glossary-portal-meta">
{entry.data.authors?.length > 0 && (
<div>
<strong>Auteurs liés :</strong> {entry.data.authors.join(", ")}
</div>
)}
{entry.data.tradition && (
<div>
<strong>Tradition :</strong> {entry.data.tradition}
</div>
)}
</div>
)}
</li>
);
})}
@@ -92,6 +89,37 @@ const doctrines = entries
</section>
)}
<section id="paradigmes" class="glossary-portal-section">
<h2>Paradigmes régulateurs</h2>
<ul class="glossary-portal-list">
{paradigmes.map((entry) => {
const slug = slugOf(entry);
return (
<li>
<a href={`/glossaire/${slug}/`}>
{entry.data.term}
</a>
<span> — {entry.data.definitionShort}</span>
{(entry.data.authors?.length > 0 || entry.data.tradition) && (
<div class="glossary-portal-meta">
{entry.data.authors?.length > 0 && (
<div>
<strong>Auteurs liés :</strong> {entry.data.authors.join(", ")}
</div>
)}
{entry.data.tradition && (
<div>
<strong>Tradition :</strong> {entry.data.tradition}
</div>
)}
</div>
)}
</li>
);
})}
</ul>
</section>
<style>
.glossary-portal-section{
margin-top: 30px;
@@ -104,10 +132,21 @@ const doctrines = entries
}
.glossary-portal-list li{
margin-bottom: 10px;
margin-bottom: 14px;
line-height: 1.5;
}
.glossary-portal-meta{
margin-top: 6px;
padding-left: 2px;
font-size: 14px;
opacity: .9;
}
.glossary-portal-meta div + div{
margin-top: 2px;
}
.glossary-portal-aside{
display: flex;
flex-direction: column;