fix(content): declare commencer collection and remove implicit ia collection #211

Merged
Archicratia merged 2 commits from fix/content-collections-stability into main 2026-03-11 10:09:40 +00:00
16 changed files with 1274 additions and 341 deletions

View File

@@ -1,42 +0,0 @@
---
title: "Démarrage — Essai-thèse"
edition: "archicratie"
status: "modele_sociopolitique"
level: 1
version: "0.0.1"
concepts: ["archicratie"]
links:
- type: "definition"
target: "/glossaire/archicratie/"
note: "Terme canonique."
order: 0
summary: "Page de test (structure)."
---
import Callout from "../../components/Callout.astro";
import Term from "../../components/Term.astro";
Ceci est une page de test pour valider la structure de l**Essai-thèse**.
<Callout kind="definition" title="Entrée minimale">
<p>
<Term term="Archicratie" slug="archicratie" /> : régime où linstance régulatrice est tenue dexposer ses prises,
ses critères et ses scènes dépreuve.
</p>
</Callout>
<Callout kind="these" title="Ce que lédition web doit rendre possible">
<p>Une lecture à plusieurs niveaux, sans confusion entre les productions, et une citabilité stable.</p>
</Callout>
<div class="level-2">
<Callout kind="objection" title="Objection (niveau 2)">
<p>Que gagne-t-on par rapport à une simple doctrine ? Réponse : la scène, la contrainte dexposition, la pluralisation des prises.</p>
</Callout>
</div>
<div class="level-3">
<Callout kind="limite" title="Limite (niveau 3)">
<p>Tout schéma darticulation doit préciser ses non-déductions (transpositions), sinon confusion Traité ↔ Archicratie.</p>
</Callout>
</div>

View File

@@ -1,13 +0,0 @@
---
title: "Démarrage — Atlas"
edition: "atlas"
status: "cartographie"
level: 1
version: "0.0.1"
concepts: ["archicrates"]
links: []
order: 0
summary: "Page de test (structure)."
---
Ceci est une page de test pour valider la structure de l**Atlas**.

View File

@@ -17,21 +17,6 @@ const baseTextSchema = z.object({
});
// Éditions (séparation stricte : edition + status verrouillés par collection)
const traite = defineCollection({
type: "content",
schema: baseTextSchema.extend({
edition: z.literal("traite"),
status: z.literal("theorie_fondamentale")
})
});
const archicratie = defineCollection({
type: "content",
schema: baseTextSchema.extend({
edition: z.literal("archicratie"),
status: z.literal("modele_sociopolitique")
})
});
const casIa = defineCollection({
type: "content",
@@ -41,11 +26,11 @@ const casIa = defineCollection({
})
});
const atlas = defineCollection({
const commencer = defineCollection({
type: "content",
schema: baseTextSchema.extend({
edition: z.literal("atlas"),
status: z.literal("cartographie")
edition: z.literal("commencer"),
status: z.union([z.literal("presentation"), z.literal("draft")])
})
});
@@ -79,12 +64,8 @@ const glossaire = defineCollection({
});
export const collections = {
traite,
archicratie,
commencer,
"archicrat-ia": archicratIa,
"cas-ia": casIa,
glossaire,
atlas,
// ⚠️ clé avec tiret => doit être quotée
"archicrat-ia": archicratIa
};

View File

@@ -1,13 +0,0 @@
---
title: "Démarrage — Cas pratique IA"
edition: "ia"
status: "application"
level: 1
version: "0.0.1"
concepts: ["gouvernance-ia"]
links: []
order: 0
summary: "Page de test (structure)."
---
Ceci est une page de test pour valider la structure du **Cas pratique IA**.

View File

@@ -1,13 +0,0 @@
---
title: "Démarrage — Traité"
edition: "traite"
status: "theorie_fondamentale"
level: 1
version: "0.0.1"
concepts: ["ontodynamique-generative"]
links: []
order: 0
summary: "Page de test (structure)."
---
Ceci est une page de test pour valider la structure du **Traité**.

View File

@@ -1,36 +0,0 @@
---
import EditionLayout from "../../layouts/EditionLayout.astro";
import { getCollection } from "astro:content";
import EditionToc from "../../components/EditionToc.astro";
import LocalToc from "../../components/LocalToc.astro";
export async function getStaticPaths() {
const entries = (await getCollection("archicratie"))
.filter((e) => !e.slug.startsWith("archicrat-ia/"));
return entries.map((entry) => ({
params: { slug: entry.slug },
props: { entry },
}));
}
const { entry } = Astro.props;
const { Content, headings } = await entry.render();
---
<EditionLayout
title={entry.data.title}
editionLabel="Archicratie"
editionKey="archicratie"
statusLabel="modèle sociopolitique"
statusKey="modele_sociopolitique"
level={entry.data.level}
version={entry.data.version}
>
<Fragment slot="aside">
<EditionToc currentSlug={entry.slug} />
<LocalToc headings={headings} />
</Fragment>
<h1>{entry.data.title}</h1>
<Content />
</EditionLayout>

View File

@@ -1,16 +0,0 @@
---
import SiteLayout from "../../layouts/SiteLayout.astro";
import { getCollection } from "astro:content";
const entries = (await getCollection('archicratie'))
.filter((e) => e.slug !== "prologue");
entries.sort((a, b) => (a.data.order ?? 9999) - (b.data.order ?? 9999));
---
<SiteLayout title="Essai-thèse — Archicratie">
<h1>Essai-thèse — Archicratie</h1>
<ul>
{entries.map((e) => (
<li><a href={`/archicratie/${e.slug}/`}>{e.data.title}</a></li>
))}
</ul>
</SiteLayout>

View File

@@ -1,28 +0,0 @@
---
import EditionLayout from "../../layouts/EditionLayout.astro";
import { getCollection } from "astro:content";
export async function getStaticPaths() {
const entries = await getCollection("atlas");
return entries.map((entry) => ({
params: { slug: entry.slug },
props: { entry },
}));
}
const { entry } = Astro.props;
const { Content } = await entry.render();
---
<EditionLayout
title={entry.data.title}
editionLabel="Atlas"
editionKey="atlas"
statusLabel="cartographie"
statusKey="cartographie"
level={entry.data.level}
version={entry.data.version}
>
<h1>{entry.data.title}</h1>
<Content />
</EditionLayout>

View File

@@ -1,15 +0,0 @@
---
import SiteLayout from "../../layouts/SiteLayout.astro";
import { getCollection } from "astro:content";
const entries = await getCollection("atlas");
entries.sort((a, b) => (a.data.order ?? 9999) - (b.data.order ?? 9999));
---
<SiteLayout title="Atlas archicratique">
<h1>Atlas archicratique</h1>
<ul>
{entries.map((e) => (
<li><a href={`/atlas/${e.slug}/`}>{e.data.title}</a></li>
))}
</ul>
</SiteLayout>

View File

@@ -1,7 +0,0 @@
---
import SiteLayout from "../../layouts/SiteLayout.astro";
---
<SiteLayout title="Carte des œuvres">
<h1>Carte des œuvres</h1>
<p>Cette page explicite la séparation stricte et larticulation entre les éditions.</p>
</SiteLayout>

View File

@@ -1,28 +0,0 @@
---
import EditionLayout from "../../layouts/EditionLayout.astro";
import { getCollection } from "astro:content";
export async function getStaticPaths() {
const entries = await getCollection("ia");
return entries.map((entry) => ({
params: { slug: entry.slug },
props: { entry },
}));
}
const { entry } = Astro.props;
const { Content } = await entry.render();
---
<EditionLayout
title={entry.data.title}
editionLabel="Cas IA"
editionKey="ia"
statusLabel="application"
statusKey="application"
level={entry.data.level}
version={entry.data.version}
>
<h1>{entry.data.title}</h1>
<Content />
</EditionLayout>

View File

@@ -1,15 +0,0 @@
---
import SiteLayout from "../../layouts/SiteLayout.astro";
import { getCollection } from "astro:content";
const entries = await getCollection("ia");
entries.sort((a, b) => (a.data.order ?? 9999) - (b.data.order ?? 9999));
---
<SiteLayout title="Cas pratique — Gouvernance des systèmes IA">
<h1>Cas pratique — Gouvernance des systèmes IA</h1>
<ul>
{entries.map((e) => (
<li><a href={`/ia/${e.slug}/`}>{e.data.title}</a></li>
))}
</ul>
</SiteLayout>

View File

@@ -1,38 +0,0 @@
---
import SiteLayout from "../../layouts/SiteLayout.astro";
---
<SiteLayout title="Méthode & statut des textes">
<h1>Méthode & statut des textes</h1>
<h2>1) Séparation stricte des productions</h2>
<ul>
<li><strong>Traité</strong> : ontodynamique générative (théorie fondamentale).</li>
<li><strong>Essai-thèse</strong> : archicratie (modèle sociopolitique).</li>
<li><strong>Cas pratique</strong> : gouvernance des systèmes IA (application).</li>
<li><strong>Glossaire</strong> : référentiel terminologique (définitions et renvois).</li>
<li><strong>Atlas</strong> : cartographie des archicrates (à venir).</li>
</ul>
<h2>2) Règle dor : liens typés</h2>
<p>Tout lien important est explicitement typé :</p>
<ul>
<li><strong>definition</strong> : renvoi vers le glossaire (sens canonique).</li>
<li><strong>appui</strong> : renvoi argumentatif (support).</li>
<li><strong>transposition</strong> : analogie / déplacement non-déductif (anti-confusion Traité ↔ Archicratie).</li>
</ul>
<h2>3) Niveaux de lecture</h2>
<p>Le même texte peut contenir trois niveaux :</p>
<ul>
<li><strong>Niveau 1</strong> : lecture citoyenne (accès principal).</li>
<li><strong>Niveau 2</strong> : approfondissement.</li>
<li><strong>Niveau 3</strong> : niveau recherche.</li>
</ul>
<p>Techniquement : les blocs <code>.level-2</code> et <code>.level-3</code> sont masqués/affichés par le toggle, sans casser la lisibilité si JS est absent.</p>
<h2>4) Citabilité</h2>
<p>Chaque paragraphe reçoit un identifiant stable et peut être cité par ancre (bouton “Citer”).</p>
<h2>5) Statut éditorial</h2>
<p>Chaque page indique : Édition / Statut / Niveau / Version. Les versions servent à garantir la citabilité et lhistorique.</p>
</SiteLayout>

View File

@@ -1,28 +0,0 @@
---
import EditionLayout from "../../layouts/EditionLayout.astro";
import { getCollection } from "astro:content";
export async function getStaticPaths() {
const entries = await getCollection("traite");
return entries.map((entry) => ({
params: { slug: entry.slug },
props: { entry },
}));
}
const { entry } = Astro.props;
const { Content } = await entry.render();
---
<EditionLayout
title={entry.data.title}
editionLabel="Traité"
editionKey="traite"
statusLabel="théorie fondamentale"
statusKey="theorie_fondamentale"
level={entry.data.level}
version={entry.data.version}
>
<h1>{entry.data.title}</h1>
<Content />
</EditionLayout>

View File

@@ -1,15 +0,0 @@
---
import SiteLayout from "../../layouts/SiteLayout.astro";
import { getCollection } from "astro:content";
const entries = await getCollection("traite");
entries.sort((a, b) => (a.data.order ?? 9999) - (b.data.order ?? 9999));
---
<SiteLayout title="Traité — Ontodynamique générative">
<h1>Traité — Ontodynamique générative</h1>
<ul>
{entries.map((e) => (
<li><a href={`/traite/${e.slug}/`}>{e.data.title}</a></li>
))}
</ul>
</SiteLayout>

File diff suppressed because it is too large Load Diff