Files
archicratie-edition/src/content.config.ts
Archicratia 9e01821278
All checks were successful
SMOKE / smoke (push) Successful in 10s
CI / build-and-anchors (push) Successful in 41s
CI / build-and-anchors (pull_request) Successful in 40s
feat(glossaire): ajouter la topologie des régimes de régulation
2026-04-28 19:27:35 +02:00

145 lines
4.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { defineCollection, z } from "astro:content";
const linkSchema = z.object({
type: z.enum(["definition", "appui", "transposition"]),
target: z.string().min(1),
note: z.string().optional()
});
const baseTextSchema = z.object({
title: z.string().min(1),
level: z.union([z.literal(1), z.literal(2), z.literal(3)]).default(1),
version: z.string().min(1),
concepts: z.array(z.string().min(1)).default([]),
links: z.array(linkSchema).default([]),
order: z.number().int().nonnegative().optional(),
summary: z.string().optional()
});
// Éditions (séparation stricte : edition + status verrouillés par collection)
const casIa = defineCollection({
type: "content",
schema: baseTextSchema.extend({
edition: z.literal("cas-ia"),
status: z.literal("application")
})
});
const commencer = defineCollection({
type: "content",
schema: baseTextSchema.extend({
edition: z.literal("commencer"),
status: z.union([z.literal("presentation"), z.literal("draft")])
})
});
// ✅ NOUVELLE collection : archicrat-ia (Essai-thèse)
// NOTE : on accepte temporairement edition/status "archicratie/modele_sociopolitique"
// si tes MDX nont pas encore été normalisés.
// Quand tu voudras "strict", on passera à edition="archicrat-ia" status="essai_these"
// + update frontmatter des 7 fichiers.
const archicratIa = defineCollection({
type: "content",
schema: baseTextSchema.extend({
edition: z.union([z.literal("archicrat-ia"), z.literal("archicratie")]),
status: z.union([z.literal("essai_these"), z.literal("modele_sociopolitique")])
})
});
const glossaryNavigationFlowSchema = z.object({
label: z.string().min(1),
primaryNext: z.string().min(1).optional(),
primaryReason: z.string().min(1).optional(),
});
const glossaryNavigationSchema = z.object({
primaryNext: z.string().min(1).optional(),
primaryReason: z.string().min(1).optional(),
paths: z
.object({
understand: z.array(z.string().min(1)).default([]),
deepen: z.array(z.string().min(1)).default([]),
compare: z.array(z.string().min(1)).default([]),
apply: z.array(z.string().min(1)).default([]),
})
.default({
understand: [],
deepen: [],
compare: [],
apply: [],
}),
flows: z
.record(z.string(), glossaryNavigationFlowSchema)
.default({}),
relationWeights: z
.record(z.string(), z.number().int().nonnegative())
.default({}),
});
// Glossaire (référentiel terminologique)
const glossaire = defineCollection({
type: "content",
schema: z.object({
title: z.string().min(1),
term: z.string().min(1),
aliases: z.array(z.string().min(1)).default([]),
urlAliases: z
.array(z.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/))
.default([]),
mobilizedAuthors: z.array(z.string().min(1)).default([]),
comparisonTraditions: z.array(z.string().min(1)).default([]),
edition: z.literal("glossaire"),
status: z.literal("referentiel"),
version: z.string().min(1),
definitionShort: z.string().min(1),
concepts: z.array(z.string().min(1)).default([]),
links: z.array(linkSchema).default([]),
kind: z.enum([
"concept",
"topologie",
"diagnostic",
"verbe",
"paradigme",
"doctrine",
"dispositif",
"figure",
"qualification",
"epistemologie",
]),
family: z.enum([
"concept-fondamental",
"scene",
"dynamique",
"pathologie",
"topologie",
"meta-regime",
"paradigme",
"doctrine",
"verbe",
"dispositif-ia",
"dispositif-methodologique",
"dispositif-documentaire",
"tension-irreductible",
"figure",
"qualification",
"epistemologie"
]
)
.optional(),
domain: z.enum(["transversal", "theorie", "cas-ia"]),
level: z.enum(["fondamental", "intermediaire", "avance"]),
related: z.array(z.string().min(1)).default([]),
opposedTo: z.array(z.string().min(1)).default([]),
seeAlso: z.array(z.string().min(1)).default([]),
navigation: glossaryNavigationSchema.optional()
})
});
export const collections = {
commencer,
"archicrat-ia": archicratIa,
"cas-ia": casIa,
glossaire,
};