Compare commits

...

253 Commits

Author SHA1 Message Date
2180fcc27b content(home): aligner les accès sur Archicratie
All checks were successful
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 36s
CI / build-and-anchors (pull_request) Successful in 39s
2026-05-14 19:58:30 +02:00
bb868aa0b0 Merge pull request 'content(essai-these): intégrer Archicratie — La tenue des mondes' (#361) from content/tenue-des-mondes-resync-20260514 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 24s
CI / build-and-anchors (push) Successful in 37s
SMOKE / smoke (push) Successful in 10s
Deploy staging+live (annotations) / deploy (push) Successful in 9m58s
Reviewed-on: #361
2026-05-14 17:16:09 +00:00
769c1589c4 content(essai-these): intégrer Archicratie — La tenue des mondes
All checks were successful
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 43s
CI / build-and-anchors (pull_request) Successful in 37s
2026-05-14 19:12:15 +02:00
95a22ac3d1 Merge pull request 'Polish glossary portal compact sticky follow behavior' (#360) from polish/glossary-portals-compact-sticky into main
All checks were successful
CI / build-and-anchors (push) Successful in 41s
Proposer Apply (Queue) / apply-proposer (push) Successful in 22s
SMOKE / smoke (push) Successful in 7s
Deploy staging+live (annotations) / deploy (push) Successful in 8m28s
Reviewed-on: #360
2026-05-07 20:58:17 +00:00
622963e8e9 Polish glossary portal compact sticky follow behavior
All checks were successful
SMOKE / smoke (push) Successful in 3s
CI / build-and-anchors (push) Successful in 38s
CI / build-and-anchors (pull_request) Successful in 37s
2026-05-07 22:56:53 +02:00
a2e5fd5bae Merge pull request 'Polish glossary complete index compact sticky behavior' (#359) from polish/index-complet-portal-sticky-mobile into main
All checks were successful
CI / build-and-anchors (push) Successful in 41s
Proposer Apply (Queue) / apply-proposer (push) Successful in 41s
SMOKE / smoke (push) Successful in 11s
Deploy staging+live (annotations) / deploy (push) Successful in 10m9s
Reviewed-on: #359
2026-05-07 17:20:51 +00:00
c9ed43c9e0 Polish glossary complete index compact sticky behavior
All checks were successful
SMOKE / smoke (push) Successful in 9s
CI / build-and-anchors (push) Successful in 49s
CI / build-and-anchors (pull_request) Successful in 42s
2026-05-07 19:18:25 +02:00
3439e2aaf9 Merge pull request 'Polish glossary home sticky hero on mobile and tablet' (#358) from polish/glossary-home-hero-sticky-mobile into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 21s
CI / build-and-anchors (push) Successful in 36s
SMOKE / smoke (push) Successful in 5s
Deploy staging+live (annotations) / deploy (push) Successful in 10m53s
Reviewed-on: #358
2026-05-07 12:56:01 +00:00
75fd6de293 Polish glossary home sticky hero on mobile and tablet
All checks were successful
SMOKE / smoke (push) Successful in 11s
CI / build-and-anchors (push) Successful in 42s
CI / build-and-anchors (pull_request) Successful in 40s
2026-05-07 14:52:12 +02:00
7551c91f37 Merge pull request 'Polish glossary home responsive aside and map density' (#357) from polish/glossary-home-mobile-and-map-density into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 26s
CI / build-and-anchors (push) Successful in 48s
SMOKE / smoke (push) Successful in 5s
Deploy staging+live (annotations) / deploy (push) Successful in 10m59s
Reviewed-on: #357
2026-05-07 12:04:59 +00:00
40ab10b8e8 Polish glossary home responsive aside and map density
All checks were successful
SMOKE / smoke (push) Successful in 15s
CI / build-and-anchors (push) Successful in 43s
CI / build-and-anchors (pull_request) Successful in 48s
2026-05-07 13:59:05 +02:00
4bab188df7 Merge pull request 'Fix glossary home hero follow truncation' (#356) from fix/glossary-home-hero-follow-no-truncation into main
All checks were successful
CI / build-and-anchors (push) Successful in 44s
Proposer Apply (Queue) / apply-proposer (push) Successful in 26s
SMOKE / smoke (push) Successful in 11s
Deploy staging+live (annotations) / deploy (push) Successful in 9m16s
Reviewed-on: #356
2026-05-06 11:50:48 +00:00
aaed642cec Fix glossary home hero follow truncation
All checks were successful
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 38s
CI / build-and-anchors (pull_request) Successful in 40s
2026-05-06 13:48:23 +02:00
b4f2de438e Merge pull request 'Stabilize commencer editorial reveal spacing' (#355) from fix/commencer-reveal-css-stabilization into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 24s
CI / build-and-anchors (push) Successful in 42s
SMOKE / smoke (push) Successful in 8s
Deploy staging+live (annotations) / deploy (push) Successful in 9m26s
Reviewed-on: #355
2026-05-06 08:26:22 +00:00
b6f9f76f8b Stabilize commencer editorial reveal spacing
All checks were successful
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 43s
CI / build-and-anchors (pull_request) Successful in 46s
2026-05-06 10:24:02 +02:00
5367de4e99 Merge pull request 'Add manifest page and refine editorial landing pages' (#354) from polish/editorial-reveal-and-manifest-docx into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 21s
CI / build-and-anchors (push) Successful in 43s
SMOKE / smoke (push) Successful in 6s
Deploy staging+live (annotations) / deploy (push) Successful in 9m16s
Reviewed-on: #354
2026-05-05 21:32:31 +00:00
c07028c052 Add manifest page and refine editorial landing pages
All checks were successful
SMOKE / smoke (push) Successful in 11s
CI / build-and-anchors (push) Successful in 46s
CI / build-and-anchors (pull_request) Successful in 45s
2026-05-05 23:30:18 +02:00
af0e6694e5 Merge pull request 'chore(glossaire): affiner les trajectoires longues' (#353) from chore/glossaire-trajectoires-longues-finales into main
All checks were successful
CI / build-and-anchors (push) Successful in 41s
Proposer Apply (Queue) / apply-proposer (push) Successful in 26s
SMOKE / smoke (push) Successful in 8s
Deploy staging+live (annotations) / deploy (push) Successful in 9m5s
Reviewed-on: #353
2026-04-30 13:17:06 +00:00
c9b02a07da chore(glossaire): affiner les trajectoires longues
All checks were successful
SMOKE / smoke (push) Successful in 12s
CI / build-and-anchors (push) Successful in 40s
CI / build-and-anchors (pull_request) Successful in 43s
2026-04-30 15:14:39 +02:00
652d50a2d3 Merge pull request 'chore(glossaire): désaturer les parcours effectifs' (#352) from chore/desaturation-parcours-glossaire-v2 into main
All checks were successful
CI / build-and-anchors (push) Successful in 37s
Proposer Apply (Queue) / apply-proposer (push) Successful in 37s
SMOKE / smoke (push) Successful in 12s
Deploy staging+live (annotations) / deploy (push) Successful in 8m49s
Reviewed-on: #352
2026-04-30 10:27:01 +00:00
e6c6678344 chore(glossaire): désaturer les parcours effectifs
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 41s
CI / build-and-anchors (pull_request) Successful in 35s
2026-04-30 12:24:38 +02:00
ada2c61586 Merge pull request 'Désature les parcours effectifs du glossaire' (#351) from chore/desaturation-parcours-glossaire-v2 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 29s
CI / build-and-anchors (push) Successful in 42s
SMOKE / smoke (push) Successful in 13s
Deploy staging+live (annotations) / deploy (push) Successful in 9m16s
Reviewed-on: #351
2026-04-30 09:56:15 +00:00
f73ae7bd3b Désature les parcours effectifs du glossaire
All checks were successful
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 42s
CI / build-and-anchors (pull_request) Successful in 43s
2026-04-30 11:53:44 +02:00
6a2bcf2a94 Merge pull request 'chore(repo): remove obsolete graph files from root' (#350) from chore/docs-graph-files into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 24s
Deploy staging+live (annotations) / deploy (push) Successful in 38s
CI / build-and-anchors (push) Successful in 39s
SMOKE / smoke (push) Successful in 5s
Reviewed-on: #350
2026-04-30 09:24:41 +00:00
2467b334db chore(repo): remove obsolete graph files from root
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 39s
CI / build-and-anchors (pull_request) Successful in 31s
2026-04-30 11:21:27 +02:00
0015b384ce Merge pull request 'chore(glossaire): désaturer les defaults de navigation' (#349) from chore/desaturer-defaults-glossaire into main
All checks were successful
CI / build-and-anchors (push) Successful in 36s
Proposer Apply (Queue) / apply-proposer (push) Successful in 29s
SMOKE / smoke (push) Successful in 9s
Deploy staging+live (annotations) / deploy (push) Successful in 9m11s
Reviewed-on: #349
2026-04-30 09:07:32 +00:00
25ce0409aa chore(glossaire): désaturer les defaults de navigation
All checks were successful
SMOKE / smoke (push) Successful in 7s
CI / build-and-anchors (push) Successful in 38s
CI / build-and-anchors (pull_request) Successful in 34s
2026-04-30 11:05:20 +02:00
eb358fb7f8 Merge pull request 'chore(glossaire): auditer la convergence effective du graphe' (#348) from chore/audit-convergence-effective-glossaire into main
All checks were successful
CI / build-and-anchors (push) Successful in 41s
Proposer Apply (Queue) / apply-proposer (push) Successful in 43s
SMOKE / smoke (push) Successful in 12s
Deploy staging+live (annotations) / deploy (push) Successful in 8m32s
Reviewed-on: #348
2026-04-30 08:39:36 +00:00
afa4d84997 chore(glossaire): auditer la convergence effective du graphe
All checks were successful
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 38s
CI / build-and-anchors (pull_request) Successful in 40s
2026-04-30 10:37:07 +02:00
bf0683bbb2 Merge pull request 'docs(glossaire): formaliser la gouvernance du graphe' (#347) from docs/gouvernance-graphe-glossaire into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 15s
CI / build-and-anchors (push) Successful in 36s
SMOKE / smoke (push) Successful in 9s
Deploy staging+live (annotations) / deploy (push) Successful in 47s
Reviewed-on: #347
2026-04-30 07:53:17 +00:00
c486a5c5eb docs(glossaire): formaliser la gouvernance du graphe
All checks were successful
SMOKE / smoke (push) Successful in 8s
CI / build-and-anchors (push) Successful in 38s
CI / build-and-anchors (pull_request) Successful in 41s
2026-04-30 09:51:13 +02:00
82e0d5ba78 Merge pull request 'chore(glossaire): aligner l'audit des paths sur les defaults' (#346) from chore/audit-gouvernance-graphe-paths-defaults into main
All checks were successful
CI / build-and-anchors (push) Successful in 36s
Proposer Apply (Queue) / apply-proposer (push) Successful in 27s
SMOKE / smoke (push) Successful in 10s
Deploy staging+live (annotations) / deploy (push) Successful in 9m50s
Reviewed-on: #346
2026-04-30 07:27:28 +00:00
7910a3964a chore(glossaire): aligner l'audit des paths sur les defaults
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 46s
CI / build-and-anchors (pull_request) Successful in 38s
2026-04-30 09:24:39 +02:00
d4df080f1d Merge pull request 'chore(glossaire): renforcer l'audit de gouvernance du graphe' (#345) from chore/audit-gouvernance-graphe-v2 into main
All checks were successful
CI / build-and-anchors (push) Successful in 35s
Proposer Apply (Queue) / apply-proposer (push) Successful in 23s
SMOKE / smoke (push) Successful in 9s
Deploy staging+live (annotations) / deploy (push) Successful in 8m52s
Reviewed-on: #345
2026-04-28 19:35:33 +00:00
d0d5e03afb chore(glossaire): renforcer l'audit de gouvernance du graphe
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 38s
CI / build-and-anchors (pull_request) Successful in 38s
2026-04-28 21:33:24 +02:00
c3065e7116 Merge pull request 'chore(glossaire): ajouter une gouvernance minimale du graphe' (#344) from chore/gouvernance-graphe-v1 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 22s
CI / build-and-anchors (push) Successful in 40s
SMOKE / smoke (push) Successful in 12s
Deploy staging+live (annotations) / deploy (push) Successful in 9m58s
Reviewed-on: #344
2026-04-28 19:02:48 +00:00
bfe8b3b45a chore(glossaire): ajouter une gouvernance minimale du graphe
All checks were successful
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 44s
CI / build-and-anchors (pull_request) Successful in 41s
2026-04-28 21:00:53 +02:00
a5263d65ec Merge pull request 'feat(glossaire): ajouter la topologie des régimes de régulation' (#343) from feat/topologie-regimes-regulation-glossaire-20260428 into main
All checks were successful
CI / build-and-anchors (push) Successful in 38s
Proposer Apply (Queue) / apply-proposer (push) Successful in 19s
SMOKE / smoke (push) Successful in 4s
Deploy staging+live (annotations) / deploy (push) Successful in 9m11s
Reviewed-on: #343
2026-04-28 17:30:25 +00:00
9e01821278 feat(glossaire): ajouter la topologie des régimes de régulation
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
2026-04-28 19:27:35 +02:00
51677811ab Merge pull request 'glossaire-doctrines-paradigmes-revision' (#342) from glossaire-doctrines-paradigmes-revision into main
All checks were successful
CI / build-and-anchors (push) Successful in 35s
Proposer Apply (Queue) / apply-proposer (push) Successful in 21s
SMOKE / smoke (push) Successful in 10s
Deploy staging+live (annotations) / deploy (push) Successful in 7m58s
Reviewed-on: #342
2026-04-27 21:36:07 +00:00
dde3fc9a32 Accepte les resets d'ancres du glossaire par préfixe
All checks were successful
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 34s
CI / build-and-anchors (pull_request) Successful in 37s
2026-04-27 23:33:44 +02:00
c3bdde8f58 Reset baseline des ancres après refonte glossaire paradigmes + doctrines 2026-04-27 23:11:08 +02:00
5858638134 Révise les fiches paradigmes et doctrines du glossaire 2026-04-27 23:11:08 +02:00
1bec8ae9ce Merge pull request 'Supporte les resets d'ancres par préfixe' (#341) from fix/anchors-allow-glossaire-reset into main
All checks were successful
CI / build-and-anchors (push) Successful in 39s
Proposer Apply (Queue) / apply-proposer (push) Successful in 36s
SMOKE / smoke (push) Successful in 8s
Deploy staging+live (annotations) / deploy (push) Successful in 8m29s
Reviewed-on: #341
2026-04-27 21:00:27 +00:00
abcba413f5 Supporte les resets d'ancres par préfixe
All checks were successful
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 39s
CI / build-and-anchors (pull_request) Successful in 42s
2026-04-27 22:58:27 +02:00
6ed2cd4284 Merge pull request 'fix(glossaire): polir les raisons de navigation critiques' (#339) from feat/glossary-navigation-semantic-balance-step25 into main
All checks were successful
CI / build-and-anchors (push) Successful in 34s
Proposer Apply (Queue) / apply-proposer (push) Successful in 20s
SMOKE / smoke (push) Successful in 11s
Deploy staging+live (annotations) / deploy (push) Successful in 8m6s
Reviewed-on: #339
2026-04-27 10:07:00 +00:00
404a45caa1 fix(glossaire): polir les raisons de navigation critiques
All checks were successful
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 35s
CI / build-and-anchors (pull_request) Successful in 33s
2026-04-27 12:01:13 +02:00
c5ff82f58d Merge pull request 'feat(glossaire): équilibrer sémantiquement les parcours' (#338) from feat/glossary-navigation-semantic-balance-step25 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 17s
CI / build-and-anchors (push) Successful in 36s
SMOKE / smoke (push) Successful in 8s
Deploy staging+live (annotations) / deploy (push) Successful in 8m30s
Reviewed-on: #338
2026-04-27 09:14:15 +00:00
894156c540 feat(glossaire): équilibrer sémantiquement les parcours
All checks were successful
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 37s
CI / build-and-anchors (pull_request) Successful in 39s
2026-04-27 11:10:38 +02:00
63e24020c7 Merge pull request 'feat(glossaire): réinsérer les fiches orphelines dans les parcours' (#337) from feat/glossary-reinsert-orphans-step24f into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 14s
CI / build-and-anchors (push) Successful in 38s
SMOKE / smoke (push) Successful in 10s
Deploy staging+live (annotations) / deploy (push) Successful in 8m14s
Reviewed-on: #337
2026-04-27 08:46:12 +00:00
ec248e9f72 feat(glossaire): réinsérer les fiches orphelines dans les parcours
All checks were successful
SMOKE / smoke (push) Successful in 3s
CI / build-and-anchors (push) Successful in 34s
CI / build-and-anchors (pull_request) Successful in 33s
2026-04-27 10:34:47 +02:00
47836c8de2 Merge pull request 'fix(glossaire): raccourcir les chaînes primaires' (#335) from feat/glossary-navigation-shorten-primary-step24e into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 18s
Deploy staging+live (annotations) / deploy (push) Successful in 6m47s
SMOKE / smoke (push) Successful in 3s
CI / build-and-anchors (push) Successful in 34s
CI / build-and-anchors (pull_request) Successful in 33s
Reviewed-on: #335
2026-04-27 07:57:12 +00:00
a66aa24b53 fix(glossaire): raccourcir les chaînes primaires
All checks were successful
CI / build-and-anchors (push) Successful in 37s
CI / build-and-anchors (pull_request) Successful in 36s
SMOKE / smoke (push) Successful in 2s
2026-04-27 09:54:25 +02:00
84164d0f2a Merge pull request 'fix(glossaire): rendre les parcours primaires acycliques' (#334) from feat/glossary-navigation-primary-acyclic-step24d into main
All checks were successful
CI / build-and-anchors (push) Successful in 37s
Proposer Apply (Queue) / apply-proposer (push) Successful in 33s
SMOKE / smoke (push) Successful in 10s
Deploy staging+live (annotations) / deploy (push) Successful in 9m22s
Reviewed-on: #334
2026-04-27 07:32:25 +00:00
242aeac07a fix(glossaire): rendre les parcours primaires acycliques
All checks were successful
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 37s
CI / build-and-anchors (pull_request) Successful in 35s
2026-04-27 09:29:34 +02:00
1bdaf3e986 Merge pull request 'feat/glossary-navigation-loop-fix-step24d' (#333) from feat/glossary-navigation-loop-fix-step24d into main
All checks were successful
CI / build-and-anchors (push) Successful in 38s
Proposer Apply (Queue) / apply-proposer (push) Successful in 23s
SMOKE / smoke (push) Successful in 13s
Deploy staging+live (annotations) / deploy (push) Successful in 10m17s
Reviewed-on: #333
2026-04-27 07:17:58 +00:00
7583f89384 fix(glossaire): supprimer les boucles directes de navigation
All checks were successful
SMOKE / smoke (push) Successful in 9s
CI / build-and-anchors (push) Successful in 35s
CI / build-and-anchors (pull_request) Successful in 33s
2026-04-27 09:15:07 +02:00
03742db4e1 Merge pull request 'feat(glossaire): intégrer doctrines et tensions aux parcours intelligents' (#332) from feat/glossary-navigation-doctrines-tensions-step24c into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 30s
CI / build-and-anchors (push) Successful in 42s
SMOKE / smoke (push) Successful in 10s
Deploy staging+live (annotations) / deploy (push) Successful in 9m3s
Reviewed-on: #332
2026-04-26 20:22:16 +00:00
9a922ffed3 feat(glossaire): intégrer doctrines et tensions aux parcours intelligents
All checks were successful
SMOKE / smoke (push) Successful in 8s
CI / build-and-anchors (push) Successful in 50s
CI / build-and-anchors (pull_request) Successful in 36s
2026-04-26 22:19:50 +02:00
02a7ea403d feat(glossaire): intégrer doctrines et tensions aux parcours intelligents 2026-04-26 22:11:56 +02:00
63feddb01c Merge pull request 'fix(glossaire): préserver les parcours intelligents explicites' (#331) from feat/glossary-navigation-step24b into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 33s
Deploy staging+live (annotations) / deploy (push) Successful in 8m48s
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 1m36s
CI / build-and-anchors (pull_request) Successful in 1m23s
Reviewed-on: #331
2026-04-26 19:53:59 +00:00
36bb47f9c6 fix(glossaire): préserver les parcours intelligents explicites
All checks were successful
SMOKE / smoke (push) Successful in 8s
CI / build-and-anchors (push) Successful in 40s
CI / build-and-anchors (pull_request) Successful in 42s
2026-04-26 21:50:08 +02:00
b2ca1f17a4 Merge pull request 'refactor(glossaire): stabiliser le moteur de navigation intelligente' (#330) from feat/glossary-navigation-engine-step24 into main
All checks were successful
CI / build-and-anchors (push) Successful in 38s
Proposer Apply (Queue) / apply-proposer (push) Successful in 35s
SMOKE / smoke (push) Successful in 15s
Deploy staging+live (annotations) / deploy (push) Successful in 8m55s
Reviewed-on: #330
2026-04-26 19:34:28 +00:00
ad545b52af refactor(glossaire): stabiliser le moteur de navigation intelligente
All checks were successful
SMOKE / smoke (push) Successful in 11s
CI / build-and-anchors (push) Successful in 35s
CI / build-and-anchors (pull_request) Successful in 41s
2026-04-26 21:32:07 +02:00
467c07232e Merge pull request 'feat(glossaire): enrichir navigation typologique des archicrations' (#329) from feat/glossary-navigation-typology-step23 into main
All checks were successful
CI / build-and-anchors (push) Successful in 36s
Proposer Apply (Queue) / apply-proposer (push) Successful in 25s
SMOKE / smoke (push) Successful in 7s
Deploy staging+live (annotations) / deploy (push) Successful in 9m1s
Reviewed-on: #329
2026-04-26 18:55:41 +00:00
531576452d feat(glossaire): enrichir navigation typologique des archicrations
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 36s
CI / build-and-anchors (pull_request) Successful in 36s
2026-04-26 20:52:55 +02:00
4235ad85b0 Merge pull request 'feat(glossaire): enrichir navigation intelligente des paradigmes' (#328) from feat/glossary-navigation-step22 into main
All checks were successful
CI / build-and-anchors (push) Successful in 36s
Proposer Apply (Queue) / apply-proposer (push) Successful in 25s
SMOKE / smoke (push) Successful in 10s
Deploy staging+live (annotations) / deploy (push) Successful in 8m26s
Reviewed-on: #328
2026-04-26 18:14:30 +00:00
fd5c979339 feat(glossaire): enrichir navigation intelligente des paradigmes
All checks were successful
SMOKE / smoke (push) Successful in 3s
CI / build-and-anchors (push) Successful in 36s
CI / build-and-anchors (pull_request) Successful in 35s
2026-04-26 20:06:47 +02:00
7e8c94df6e Merge pull request 'fix: stabilise reading follow on long editions' (#327) from fix/reading-follow-editions-longues into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 27s
CI / build-and-anchors (push) Successful in 36s
SMOKE / smoke (push) Successful in 10s
Deploy staging+live (annotations) / deploy (push) Successful in 9m45s
Reviewed-on: #327
2026-04-26 16:52:26 +00:00
6b2fd25d23 fix: stabilise reading follow on long editions
All checks were successful
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 37s
CI / build-and-anchors (pull_request) Successful in 38s
2026-04-26 18:22:11 +02:00
f1c5bb0d26 Merge pull request 'fix: keep glossary entry details open on compact viewports' (#325) from fix/glossary-entry-mobile-details into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 25s
CI / build-and-anchors (push) Successful in 35s
SMOKE / smoke (push) Successful in 8s
Deploy staging+live (annotations) / deploy (push) Successful in 9m4s
Reviewed-on: #325
2026-04-26 12:10:17 +00:00
2e4bc8f583 fix: keep glossary entry details open on compact viewports
All checks were successful
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 38s
CI / build-and-anchors (pull_request) Successful in 34s
2026-04-26 14:04:30 +02:00
8a14ea1d7a Merge pull request 'feat(glossary): add step 21 smart navigation' (#324) from feat/glossary-navigation-step21 into main
All checks were successful
CI / build-and-anchors (push) Successful in 37s
Proposer Apply (Queue) / apply-proposer (push) Successful in 31s
SMOKE / smoke (push) Successful in 18s
Deploy staging+live (annotations) / deploy (push) Successful in 10m22s
Reviewed-on: #324
2026-04-26 11:09:09 +00:00
9f88112aca feat(glossary): add step 21 smart navigation
All checks were successful
SMOKE / smoke (push) Successful in 13s
CI / build-and-anchors (push) Successful in 1m4s
CI / build-and-anchors (pull_request) Successful in 35s
2026-04-26 13:03:45 +02:00
689619d14d Merge pull request 'feat(ui): harmoniser navigation pages d’entrée et recherche' (#323) from feat/harmonisation-ui-recherche-navigation into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 24s
CI / build-and-anchors (push) Successful in 34s
SMOKE / smoke (push) Successful in 12s
Deploy staging+live (annotations) / deploy (push) Successful in 10m53s
Reviewed-on: #323
2026-04-24 23:34:27 +00:00
64e56e8abc feat(ui): harmoniser navigation pages d’entrée et recherche
All checks were successful
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 44s
CI / build-and-anchors (pull_request) Successful in 36s
2026-04-25 01:31:14 +02:00
8605b7198f Merge pull request 'reset(archicrat-ia): resynchronise les sources DOCX/MDX canoniques' (#322) from chore/archicrat-ia-canonical-docx-mdx-resync-20260423 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 19s
CI / build-and-anchors (push) Successful in 36s
SMOKE / smoke (push) Successful in 8s
Deploy staging+live (annotations) / deploy (push) Successful in 8m5s
Reviewed-on: #322
2026-04-23 11:53:07 +00:00
d41aed040f reset(archicrat-ia): resynchronise les sources DOCX/MDX canoniques
All checks were successful
SMOKE / smoke (push) Successful in 3s
CI / build-and-anchors (push) Successful in 33s
CI / build-and-anchors (pull_request) Successful in 37s
2026-04-23 13:51:27 +02:00
bf01a83268 Merge pull request 'Synchronise les contenus glossaire et ajoute les scripts de conversion DOCX/MDX' (#321) from chore/reinject-docx-mdx-and-glossaire-sync-20260423 into main
All checks were successful
CI / build-and-anchors (push) Successful in 35s
Proposer Apply (Queue) / apply-proposer (push) Successful in 28s
SMOKE / smoke (push) Successful in 7s
Deploy staging+live (annotations) / deploy (push) Successful in 9m56s
Reviewed-on: #321
2026-04-23 10:25:49 +00:00
5b427d5602 Synchronise les contenus glossaire et ajoute les scripts de conversion DOCX/MDX
All checks were successful
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 37s
CI / build-and-anchors (pull_request) Successful in 34s
2026-04-23 12:04:31 +02:00
fa46971e76 Merge pull request 'reset(archicrat-ia): canonical docx import and anchors baseline' (#320) from reset/archicrat-ia-canonical-import-anchors into main
All checks were successful
CI / build-and-anchors (push) Successful in 54s
SMOKE / smoke (push) Successful in 12s
Deploy staging+live (annotations) / deploy (push) Successful in 8m25s
Proposer Apply (Queue) / apply-proposer (push) Successful in 8s
Reviewed-on: #320
2026-04-19 17:50:59 +02:00
c313587b26 reset(archicrat-ia): canonical docx import and anchors baseline
All checks were successful
SMOKE / smoke (push) Successful in 7s
CI / build-and-anchors (push) Successful in 54s
CI / build-and-anchors (pull_request) Successful in 54s
2026-04-19 16:25:42 +02:00
4976ddcc16 Merge pull request 'fix/ch4-docx-sync-20260330' (#319) from fix/ch4-docx-sync-20260330 into main
All checks were successful
CI / build-and-anchors (push) Successful in 50s
Proposer Apply (Queue) / apply-proposer (push) Successful in 44s
SMOKE / smoke (push) Successful in 22s
Deploy staging+live (annotations) / deploy (push) Successful in 12m42s
Reviewed-on: #319
2026-03-30 16:08:47 +02:00
17e11f0322 fix(archicrat-ia): remove duplicated chapitre 4 heading
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 47s
CI / build-and-anchors (pull_request) Successful in 48s
2026-03-30 16:06:22 +02:00
7df18adfa8 fix(archicrat-ia): sync chapitre 4 from official docx and accept anchor reset
All checks were successful
SMOKE / smoke (push) Successful in 9s
CI / build-and-anchors (push) Successful in 58s
2026-03-30 15:57:43 +02:00
535c5108e2 Merge pull request 'fix(archicrat-ia): drop duplicate chapter 3 heading' (#318) from fix/ch3-docx-sync-20260329 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 28s
CI / build-and-anchors (push) Successful in 47s
SMOKE / smoke (push) Successful in 12s
Deploy staging+live (annotations) / deploy (push) Successful in 11m38s
Reviewed-on: #318
2026-03-30 10:30:19 +02:00
20705f6c90 fix(archicrat-ia): drop duplicate chapter 3 heading
All checks were successful
SMOKE / smoke (push) Successful in 2s
CI / build-and-anchors (push) Successful in 47s
CI / build-and-anchors (pull_request) Successful in 43s
2026-03-30 10:26:22 +02:00
eabd2f5f29 Merge pull request 'fix(archicrat-ia): sync chapitre 3 from official docx and accept anchor reset' (#317) from fix/ch3-docx-sync-20260329 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 23s
CI / build-and-anchors (push) Successful in 47s
SMOKE / smoke (push) Successful in 9s
Deploy staging+live (annotations) / deploy (push) Successful in 9m38s
Reviewed-on: #317
2026-03-29 21:57:44 +02:00
482151c31c fix(archicrat-ia): sync chapitre 3 from official docx and accept anchor reset
All checks were successful
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 46s
CI / build-and-anchors (pull_request) Successful in 43s
2026-03-29 21:51:25 +02:00
6d9d5a460e Merge pull request 'fix(archicrat-ia): restore chapitre 1 doctrinal opening' (#315) from fix/ch1-restore-opening-20260329-144234 into main
All checks were successful
CI / build-and-anchors (push) Successful in 46s
Proposer Apply (Queue) / apply-proposer (push) Successful in 27s
SMOKE / smoke (push) Successful in 12s
Deploy staging+live (annotations) / deploy (push) Successful in 10m31s
Reviewed-on: #315
2026-03-29 14:53:31 +02:00
89d06ade16 fix(archicrat-ia): restore chapitre 1 doctrinal opening
All checks were successful
SMOKE / smoke (push) Successful in 7s
CI / build-and-anchors (push) Successful in 1m25s
CI / build-and-anchors (pull_request) Successful in 43s
2026-03-29 14:46:51 +02:00
69b35df10c Merge pull request 'fix(archicrat-ia): restore advanced chapitre 1/2 sources and accept chapter 2 anchor reset' (#314) from fix/restore-ch1-ch2-sources-and-churn-20260329 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 43s
Deploy staging+live (annotations) / deploy (push) Successful in 12m16s
SMOKE / smoke (push) Successful in 10s
CI / build-and-anchors (push) Successful in 58s
Reviewed-on: #314
2026-03-29 11:31:33 +02:00
b5475e9be1 fix(archicrat-ia): restore advanced chapitre 1/2 sources and accept chapter 2 anchor reset
All checks were successful
SMOKE / smoke (push) Successful in 15s
CI / build-and-anchors (push) Successful in 49s
CI / build-and-anchors (pull_request) Successful in 1m4s
2026-03-29 11:28:19 +02:00
fdd3aace5a Merge pull request 'chore(tooling): add docx source audit and repair helpers' (#313) from chore/docx-tooling-source-audit-and-fix-v3-20260328 into main
All checks were successful
CI / build-and-anchors (push) Successful in 47s
Proposer Apply (Queue) / apply-proposer (push) Successful in 28s
SMOKE / smoke (push) Successful in 6s
Deploy staging+live (annotations) / deploy (push) Successful in 16m22s
Reviewed-on: #313
2026-03-28 23:55:55 +01:00
f86704d67e chore(tooling): add docx source audit and repair helpers
All checks were successful
SMOKE / smoke (push) Successful in 7s
CI / build-and-anchors (push) Successful in 48s
CI / build-and-anchors (pull_request) Successful in 47s
2026-03-28 23:34:42 +01:00
ec8e29a313 Merge pull request 'content(archicrat-ia): drop duplicate chapter H1 in chapitres 1 and 2' (#311) from fix/archicrat-ia-drop-duplicate-h1-ch1-ch2-20260328 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 25s
Deploy staging+live (annotations) / deploy (push) Successful in 8m10s
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 45s
CI / build-and-anchors (pull_request) Successful in 51s
Reviewed-on: #311
2026-03-28 23:21:55 +01:00
1dc9a60580 content(archicrat-ia): drop duplicate chapter H1 in chapitres 1 and 2
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 48s
CI / build-and-anchors (pull_request) Successful in 48s
2026-03-28 23:20:01 +01:00
ee18b26d03 Merge pull request 'content(archicrat-ia): refresh official chapitre 2 docx' (#309) from chore/chapitre-2-docx-refresh-20260328 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 22s
Deploy staging+live (annotations) / deploy (push) Successful in 9m29s
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 46s
CI / build-and-anchors (pull_request) Successful in 43s
Reviewed-on: #309
2026-03-28 22:46:24 +01:00
5f4a0f74db content(archicrat-ia): refresh official chapitre 2 docx
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 46s
CI / build-and-anchors (pull_request) Successful in 49s
2026-03-28 22:42:26 +01:00
6b17df7320 Merge pull request 'content(archicrat-ia): refresh official chapitre 1 docx and anchors baseline' (#308) from chore/chapitre-1-docx-refresh-20260328 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 18s
CI / build-and-anchors (push) Successful in 44s
SMOKE / smoke (push) Successful in 7s
Deploy staging+live (annotations) / deploy (push) Successful in 9m26s
Reviewed-on: #308
2026-03-28 19:14:50 +01:00
0c33495342 content(archicrat-ia): refresh official chapitre 1 docx and anchors baseline
All checks were successful
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 46s
CI / build-and-anchors (pull_request) Successful in 44s
2026-03-28 19:12:21 +01:00
d8a09b1def Merge pull request 'chore/prologue-docx-corrections-20260328' (#307) from chore/prologue-docx-corrections-20260328 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 27s
CI / build-and-anchors (push) Successful in 49s
SMOKE / smoke (push) Successful in 7s
Deploy staging+live (annotations) / deploy (push) Successful in 9m15s
Reviewed-on: #307
2026-03-28 14:49:48 +01:00
39af501ea0 test(anchors): refresh prologue baseline after intentional text cleanup
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 51s
CI / build-and-anchors (pull_request) Successful in 47s
2026-03-28 14:44:16 +01:00
4c821d9e83 content(archicrat-ia): refresh official prologue docx corrections 2026-03-28 14:44:16 +01:00
deb4a91348 Merge pull request 'chore/prologue-reimport-final-20260327' (#306) from chore/prologue-reimport-final-20260327 into main
All checks were successful
CI / build-and-anchors (push) Successful in 46s
Proposer Apply (Queue) / apply-proposer (push) Successful in 31s
SMOKE / smoke (push) Successful in 12s
Deploy staging+live (annotations) / deploy (push) Successful in 9m18s
Reviewed-on: #306
2026-03-27 23:20:58 +01:00
5b36b8e54e test(anchors): refresh baseline after prologue reimport
All checks were successful
SMOKE / smoke (push) Successful in 14s
CI / build-and-anchors (push) Successful in 50s
CI / build-and-anchors (pull_request) Successful in 54s
2026-03-27 23:11:01 +01:00
eda5a877ef content(archicrat-ia): reimport official prologue and align importer defaults 2026-03-27 23:11:01 +01:00
5b615a6999 Merge pull request 'fix(glossaire): align reading follow top actions with glossary navigation' (#305) from fix/glossaire-reading-follow-relations-h2 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 20s
CI / build-and-anchors (push) Successful in 42s
SMOKE / smoke (push) Successful in 9s
Deploy staging+live (annotations) / deploy (push) Successful in 8m16s
Reviewed-on: #305
2026-03-26 22:33:10 +01:00
99cf0947da fix(glossaire): align reading follow top actions with glossary navigation
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 47s
CI / build-and-anchors (pull_request) Successful in 43s
2026-03-26 22:30:05 +01:00
dbd1e14e4e Merge pull request 'fix(glossaire): include standalone relation headings in reading follow' (#304) from fix/glossaire-reading-follow-relations-h2 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 21s
CI / build-and-anchors (push) Successful in 42s
SMOKE / smoke (push) Successful in 9s
Deploy staging+live (annotations) / deploy (push) Successful in 7m55s
Reviewed-on: #304
2026-03-26 21:35:00 +01:00
7033354011 fix(glossaire): include standalone relation headings in reading follow
All checks were successful
SMOKE / smoke (push) Successful in 3s
CI / build-and-anchors (push) Successful in 42s
CI / build-and-anchors (pull_request) Successful in 44s
2026-03-26 21:29:26 +01:00
7345730e3c Merge pull request 'fix(glossaire): expose relations heading to reading follow' (#303) from fix/glossaire-relations-follow-heading into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 24s
CI / build-and-anchors (push) Successful in 50s
SMOKE / smoke (push) Successful in 8s
Deploy staging+live (annotations) / deploy (push) Successful in 9m19s
Reviewed-on: #303
2026-03-26 20:47:02 +01:00
cea94c56db fix(glossaire): expose relations heading to reading follow
All checks were successful
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 41s
CI / build-and-anchors (pull_request) Successful in 43s
2026-03-26 20:42:01 +01:00
c1e24736e3 Merge pull request 'feat(glossaire): deduplicate entry aside relation groups' (#302) from feat/glossaire-entry-aside-dedup into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 21s
CI / build-and-anchors (push) Successful in 49s
SMOKE / smoke (push) Successful in 4s
Deploy staging+live (annotations) / deploy (push) Successful in 9m41s
Reviewed-on: #302
2026-03-26 20:27:31 +01:00
24bbfbc17f feat(glossaire): deduplicate entry aside relation groups
All checks were successful
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 47s
CI / build-and-anchors (pull_request) Successful in 46s
2026-03-26 20:24:49 +01:00
a11e2f1d18 Merge pull request 'fix(glossaire): compact sticky entry hero on glossary pages' (#301) from fix/glossaire-entry-sticky-hero-collapse into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 32s
CI / build-and-anchors (push) Successful in 45s
SMOKE / smoke (push) Successful in 8s
Deploy staging+live (annotations) / deploy (push) Successful in 9m18s
Reviewed-on: #301
2026-03-26 18:32:19 +01:00
630b146d02 fix(glossaire): compact sticky entry hero on glossary pages
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 50s
CI / build-and-anchors (pull_request) Successful in 46s
2026-03-26 18:30:34 +01:00
551360db83 Merge pull request 'fix(ci): use local pagefind binary instead of npx wrapper' (#300) from fix/ci-pagefind-local-bin into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 26s
CI / build-and-anchors (push) Successful in 44s
SMOKE / smoke (push) Successful in 8s
Deploy staging+live (annotations) / deploy (push) Successful in 9m45s
Reviewed-on: #300
2026-03-26 14:45:29 +01:00
a96c282780 fix(ci): use local pagefind binary instead of npx wrapper
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 45s
CI / build-and-anchors (pull_request) Successful in 46s
2026-03-26 14:41:02 +01:00
d2e0f147c2 Merge pull request 'audit(glossaire): tighten portal exposure and cross-page coherence' (#299) from audit/glossaire-transverse-coherence-fix into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 33s
SMOKE / smoke (push) Successful in 10s
Deploy staging+live (annotations) / deploy (push) Successful in 10m22s
CI / build-and-anchors (push) Successful in 45s
Reviewed-on: #299
2026-03-26 14:20:37 +01:00
ad95364021 audit(glossaire): tighten portal exposure and cross-page coherence
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 1m11s
CI / build-and-anchors (pull_request) Successful in 1m17s
2026-03-26 14:16:05 +01:00
e48e322363 Merge pull request 'feat(glossaire): harmonize portal pages and sticky reading ux' (#298) from feat/glossaire-portal-polish-final into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 27s
Deploy staging+live (annotations) / deploy (push) Successful in 10m51s
SMOKE / smoke (push) Successful in 7s
CI / build-and-anchors (push) Successful in 43s
Reviewed-on: #298
2026-03-26 13:01:46 +01:00
a9f2a5bbd4 feat(glossaire): harmonize portal pages and sticky reading ux
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 54s
CI / build-and-anchors (pull_request) Successful in 43s
2026-03-26 12:58:17 +01:00
0cba8f868e Merge pull request 'feat(glossaire): harmonize portal pages with shared components' (#297) from feat/glossaire-portals-harmonization into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 28s
CI / build-and-anchors (push) Successful in 43s
SMOKE / smoke (push) Successful in 7s
Deploy staging+live (annotations) / deploy (push) Successful in 10m36s
Reviewed-on: #297
2026-03-25 23:52:36 +01:00
f8e3ee4cca feat(glossaire): harmonize portal pages with shared components
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 47s
CI / build-and-anchors (pull_request) Successful in 46s
2026-03-25 23:49:00 +01:00
92e0ad01c6 Merge pull request 'refactor(glossaire): componentize glossary entry page' (#296) from refactor/glossaire-entry-componentization into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 22s
CI / build-and-anchors (push) Successful in 48s
SMOKE / smoke (push) Successful in 6s
Deploy staging+live (annotations) / deploy (push) Successful in 9m57s
Reviewed-on: #296
2026-03-25 19:28:10 +01:00
e6c18d6b16 refactor(glossaire): componentize glossary entry page
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 45s
CI / build-and-anchors (pull_request) Successful in 44s
2026-03-25 19:18:58 +01:00
a3092f5d5b Merge pull request 'refactor(glossaire): componentize glossary home sections' (#295) from refactor/glossaire-home-componentization into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 32s
Deploy staging+live (annotations) / deploy (push) Successful in 11m41s
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 46s
Reviewed-on: #295
2026-03-25 18:30:14 +01:00
7187b69935 refactor(glossaire): componentize glossary home sections
All checks were successful
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 45s
CI / build-and-anchors (pull_request) Successful in 48s
2026-03-25 18:26:43 +01:00
4ba4453661 Merge pull request 'refactor(glossaire): centralize aside and home data' (#294) from feat/glossaire-relational-asides-and-home into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 21s
CI / build-and-anchors (push) Successful in 42s
SMOKE / smoke (push) Successful in 7s
Deploy staging+live (annotations) / deploy (push) Successful in 9m5s
Reviewed-on: #294
2026-03-25 16:50:31 +01:00
ee42e391e3 refactor(glossaire): centralize aside and home data
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 48s
CI / build-and-anchors (pull_request) Successful in 43s
2026-03-25 16:48:43 +01:00
f7756be59e Merge pull request 'feat/glossaire-entry-relations-rendering' (#293) from feat/glossaire-entry-relations-rendering into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 27s
CI / build-and-anchors (push) Successful in 42s
SMOKE / smoke (push) Successful in 6s
Deploy staging+live (annotations) / deploy (push) Successful in 9m40s
Reviewed-on: #293
2026-03-25 15:39:41 +01:00
4abe70e10e refactor(glossaire): extract entry relations rendering
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 41s
2026-03-25 15:30:51 +01:00
b2b4ec35c0 refactor(glossaire): preserve editorial order for entry relations 2026-03-25 15:20:39 +01:00
b255436958 Merge pull request 'refactor(glossaire): centralize glossary relation helpers' (#292) from feat/glossaire-ui-relations-foundation into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 24s
Deploy staging+live (annotations) / deploy (push) Successful in 9m2s
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 43s
Reviewed-on: #292
2026-03-25 14:17:11 +01:00
ad06b34a85 refactor(glossaire): centralize glossary relation helpers
All checks were successful
CI / build-and-anchors (pull_request) Successful in 42s
SMOKE / smoke (push) Successful in 3s
CI / build-and-anchors (push) Successful in 41s
2026-03-25 14:15:39 +01:00
a38f585f3d Merge pull request 'feat(glossaire): strengthen paradigms and support theories cross-links' (#291) from chore/glossaire-paradigmes-and-support-theories-mesh into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 14s
Deploy staging+live (annotations) / deploy (push) Successful in 9m54s
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 47s
CI / build-and-anchors (pull_request) Successful in 48s
Reviewed-on: #291
2026-03-25 10:30:37 +01:00
bf0dc125d1 feat(glossaire): strengthen paradigms and support theories cross-links
All checks were successful
SMOKE / smoke (push) Successful in 3s
CI / build-and-anchors (push) Successful in 44s
CI / build-and-anchors (pull_request) Successful in 1m19s
2026-03-25 10:28:42 +01:00
f61dc15b47 Merge pull request 'feat(glossaire): strengthen meta-regimes and archicrations cross-links' (#290) from chore/glossaire-meta-regimes-and-archicrations-mesh into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 16s
Deploy staging+live (annotations) / deploy (push) Successful in 8m31s
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 42s
CI / build-and-anchors (pull_request) Successful in 45s
Reviewed-on: #290
2026-03-24 20:41:52 +01:00
1ac3d91a19 fix(glossaire): repair malformed normativo-politiques frontmatter
All checks were successful
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 44s
CI / build-and-anchors (pull_request) Successful in 43s
2026-03-24 20:40:10 +01:00
100ba10409 feat(glossaire): strengthen meta-regimes and archicrations cross-links
Some checks failed
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Failing after 27s
2026-03-24 20:33:39 +01:00
5f14785abb Merge pull request 'chore/glossaire-pathologies-figures-and-reinstitution-mesh' (#289) from chore/glossaire-pathologies-figures-and-reinstitution-mesh into main
All checks were successful
CI / build-and-anchors (push) Successful in 47s
Proposer Apply (Queue) / apply-proposer (push) Successful in 32s
SMOKE / smoke (push) Successful in 8s
Deploy staging+live (annotations) / deploy (push) Successful in 11m12s
Reviewed-on: #289
2026-03-24 18:35:06 +01:00
c7043ae9d5 fix(glossaire): repair malformed seeAlso frontmatter
All checks were successful
SMOKE / smoke (push) Successful in 7s
CI / build-and-anchors (push) Successful in 48s
CI / build-and-anchors (pull_request) Successful in 51s
2026-03-24 18:32:55 +01:00
bd1235f8c3 feat(glossaire): strengthen pathologies, figures, and reinstitution cross-links 2026-03-24 18:32:12 +01:00
7ae7b4dca3 Merge pull request 'chore/glossaire-scenes-topologies-audit-and-mesh2' (#288) from chore/glossaire-scenes-topologies-audit-and-mesh into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 18s
Deploy staging+live (annotations) / deploy (push) Successful in 8m20s
SMOKE / smoke (push) Successful in 7s
CI / build-and-anchors (push) Successful in 43s
Reviewed-on: #288
2026-03-24 17:57:50 +01:00
f088db57d4 feat(glossaire): strengthen scenes, topologies, and IA audit cross-links
All checks were successful
SMOKE / smoke (push) Successful in 3s
CI / build-and-anchors (push) Successful in 43s
CI / build-and-anchors (pull_request) Successful in 42s
2026-03-24 17:56:13 +01:00
311e94ed91 Merge pull request 'feat(glossaire): strengthen tensions cross-links' (#287) from chore/glossaire-tensions-audit-and-mesh into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 18s
Deploy staging+live (annotations) / deploy (push) Successful in 9m53s
SMOKE / smoke (push) Successful in 3s
CI / build-and-anchors (push) Successful in 42s
CI / build-and-anchors (pull_request) Successful in 41s
Reviewed-on: #287
2026-03-24 14:37:57 +01:00
e078f3f9ab feat(glossaire): strengthen tensions cross-links
All checks were successful
CI / build-and-anchors (push) Successful in 45s
CI / build-and-anchors (pull_request) Successful in 45s
SMOKE / smoke (push) Successful in 5s
2026-03-24 14:32:44 +01:00
7c4bb5a2cf Merge pull request 'fix(glossaire): sanitize imported artefacts and relation metadata' (#286) from chore/glossaire-sanitize-corpus into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 30s
Deploy staging+live (annotations) / deploy (push) Successful in 11m10s
SMOKE / smoke (push) Successful in 3s
CI / build-and-anchors (push) Successful in 41s
CI / build-and-anchors (pull_request) Successful in 41s
Reviewed-on: #286
2026-03-24 13:37:47 +01:00
214e174635 fix(glossaire): sanitize imported artefacts and relation metadata
All checks were successful
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 45s
CI / build-and-anchors (pull_request) Successful in 47s
2026-03-24 13:34:03 +01:00
f1b2f4605f Merge pull request 'feat/glossaire-sticky-entry-and-aside-polish-20260324' (#285) from feat/glossaire-sticky-entry-and-aside-polish-20260324 into main
All checks were successful
CI / build-and-anchors (push) Successful in 48s
Proposer Apply (Queue) / apply-proposer (push) Successful in 34s
SMOKE / smoke (push) Successful in 16s
Deploy staging+live (annotations) / deploy (push) Successful in 10m2s
Reviewed-on: #285
2026-03-24 00:32:36 +01:00
87955adf5d feat(glossaire): polish sticky entry flow and aside navigation
All checks were successful
SMOKE / smoke (push) Successful in 18s
CI / build-and-anchors (push) Successful in 48s
CI / build-and-anchors (pull_request) Successful in 48s
2026-03-24 00:29:39 +01:00
e39a0c547d feat(glossaire): compress paradigme hero when reading follow is active 2026-03-23 10:27:28 +01:00
c89ddf7237 chore(glossaire): checkpoint before portal hero compression 2026-03-23 00:33:19 +01:00
615effe8bf Merge pull request 'fix(glossaire): description précise du correctif' (#284) from fix/nom-court-et-clair into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 15s
SMOKE / smoke (push) Successful in 7s
CI / build-and-anchors (push) Successful in 44s
Deploy staging+live (annotations) / deploy (push) Successful in 8m29s
Reviewed-on: #284
2026-03-21 21:41:19 +01:00
e952b344a0 fix(glossaire): description précise du correctif
All checks were successful
SMOKE / smoke (push) Successful in 2s
CI / build-and-anchors (push) Successful in 44s
CI / build-and-anchors (pull_request) Successful in 39s
2026-03-21 21:39:02 +01:00
bb0572cc1a Merge pull request 'fix(glossaire): harmonize portal sticky hero and follow behavior' (#283) from fix/glossaire-portails-sticky-follow-20260321 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 20s
CI / build-and-anchors (push) Successful in 44s
SMOKE / smoke (push) Successful in 9s
Deploy staging+live (annotations) / deploy (push) Successful in 9m19s
Reviewed-on: #283
2026-03-21 20:22:43 +01:00
f6a2347278 fix(glossaire): harmonize portal sticky hero and follow behavior
All checks were successful
SMOKE / smoke (push) Successful in 3s
CI / build-and-anchors (push) Successful in 45s
CI / build-and-anchors (pull_request) Successful in 39s
2026-03-21 20:15:13 +01:00
d902c2bf98 Merge pull request 'feat(glossaire): refine portal pages and contextual asides' (#282) from feat/glossaire-portails-asides-polish into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 17s
CI / build-and-anchors (push) Successful in 48s
SMOKE / smoke (push) Successful in 7s
Deploy staging+live (annotations) / deploy (push) Successful in 8m30s
Reviewed-on: #282
2026-03-20 17:46:21 +01:00
baa2082f51 feat(glossaire): refine portal pages and contextual asides
All checks were successful
SMOKE / smoke (push) Successful in 9s
CI / build-and-anchors (push) Successful in 49s
CI / build-and-anchors (pull_request) Successful in 45s
2026-03-20 17:42:09 +01:00
2f249b420f Merge pull request 'feat(glossaire): enrich entries and refine glossary navigation' (#281) from feat/glossaire-enrich-navigation into main
All checks were successful
CI / build-and-anchors (push) Successful in 48s
Proposer Apply (Queue) / apply-proposer (push) Successful in 29s
SMOKE / smoke (push) Successful in 7s
Deploy staging+live (annotations) / deploy (push) Successful in 10m44s
Reviewed-on: #281
2026-03-19 22:18:49 +01:00
d6b4eb82f4 feat(glossaire): enrich entries and refine glossary navigation
All checks were successful
SMOKE / smoke (push) Successful in 9s
CI / build-and-anchors (push) Successful in 55s
CI / build-and-anchors (pull_request) Successful in 45s
2026-03-19 21:53:33 +01:00
bfa44fecda Merge pull request 'Add archicrations-esthetico-symboliques.md' (#280) from chore/add-archicrations-esthetico-symboliques into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 23s
CI / build-and-anchors (push) Successful in 47s
SMOKE / smoke (push) Successful in 8s
Deploy staging+live (annotations) / deploy (push) Successful in 10m53s
Reviewed-on: #280
2026-03-18 23:53:32 +01:00
e329235aa9 Add archicrations-esthetico-symboliques.md
All checks were successful
SMOKE / smoke (push) Successful in 7s
CI / build-and-anchors (push) Successful in 51s
CI / build-and-anchors (pull_request) Successful in 45s
2026-03-18 23:51:48 +01:00
8cbaa5117c Merge pull request 'Document cockpit local, NAS supervision, and ops workflow' (#279) from docs-and-ops/cockpit-finalization into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 28s
Deploy staging+live (annotations) / deploy (push) Successful in 49s
CI / build-and-anchors (push) Successful in 44s
SMOKE / smoke (push) Successful in 4s
Reviewed-on: #279
2026-03-18 18:24:44 +01:00
3086f333ed Document cockpit local, NAS supervision, and ops workflow
All checks were successful
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 49s
CI / build-and-anchors (pull_request) Successful in 42s
2026-03-18 18:21:52 +01:00
c1c3c19d13 Merge pull request 'Use Europe/Paris build time for ops health manifest' (#278) from ops/builtat-paris-time into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 30s
Deploy staging+live (annotations) / deploy (push) Successful in 46s
CI / build-and-anchors (push) Successful in 44s
SMOKE / smoke (push) Successful in 2s
Reviewed-on: #278
2026-03-18 11:14:11 +01:00
ddcd0acd4d Use Europe/Paris build time for ops health manifest
All checks were successful
SMOKE / smoke (push) Successful in 9s
CI / build-and-anchors (push) Successful in 48s
CI / build-and-anchors (pull_request) Successful in 49s
2026-03-18 11:11:54 +01:00
9bc4eeb3e7 Merge pull request 'Add ops health manifest to deploy pipeline' (#277) from ops/ops-health-deploy into main
All checks were successful
CI / build-and-anchors (push) Successful in 44s
Proposer Apply (Queue) / apply-proposer (push) Successful in 19s
SMOKE / smoke (push) Successful in 7s
Deploy staging+live (annotations) / deploy (push) Successful in 11m8s
Reviewed-on: #277
2026-03-18 10:31:32 +01:00
7a9a5319ac Add ops health manifest to deploy pipeline
All checks were successful
SMOKE / smoke (push) Successful in 11s
CI / build-and-anchors (push) Successful in 58s
CI / build-and-anchors (pull_request) Successful in 1m3s
2026-03-18 10:28:13 +01:00
7d75de5c9f Merge pull request 'docs: formalize localhost auto-sync architecture' (#276) from docs/localhost-auto-sync into main
All checks were successful
CI / build-and-anchors (push) Successful in 51s
Proposer Apply (Queue) / apply-proposer (push) Successful in 19s
SMOKE / smoke (push) Successful in 6s
Deploy staging+live (annotations) / deploy (push) Successful in 46s
Reviewed-on: #276
2026-03-16 21:19:51 +01:00
69c91cb661 docs: formalize localhost auto-sync architecture
All checks were successful
SMOKE / smoke (push) Successful in 9s
CI / build-and-anchors (push) Successful in 47s
CI / build-and-anchors (pull_request) Successful in 45s
2026-03-16 21:14:41 +01:00
a1bfbf4405 Merge pull request 'proposer: apply 2 tickets on /archicrat-ia/prologue/' (#275) from bot/proposer-273-ce91b3d8cf02 into main
All checks were successful
CI / build-and-anchors (push) Successful in 44s
Proposer Apply (Queue) / apply-proposer (push) Successful in 33s
SMOKE / smoke (push) Successful in 12s
Deploy staging+live (annotations) / deploy (push) Successful in 9m57s
Reviewed-on: #275
2026-03-16 16:46:20 +01:00
archicratie-bot
be26b425d8 edit: apply ticket #274 (/archicrat-ia/prologue/#p-23-d91a7b78)
All checks were successful
CI / build-and-anchors (push) Successful in 51s
SMOKE / smoke (push) Successful in 9s
CI / build-and-anchors (pull_request) Successful in 42s
2026-03-16 15:43:09 +00:00
archicratie-bot
abf88e7037 edit: apply ticket #273 (/archicrat-ia/prologue/#p-22-a416d473) 2026-03-16 15:42:47 +00:00
04fee32fdb Merge pull request 'proposer: apply 2 tickets on /archicrat-ia/prologue/' (#272) from bot/proposer-270-39655773c199 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 26s
CI / build-and-anchors (push) Successful in 43s
SMOKE / smoke (push) Successful in 8s
Deploy staging+live (annotations) / deploy (push) Successful in 9m20s
Reviewed-on: #272
2026-03-16 13:57:16 +01:00
archicratie-bot
fbddf5c3fc edit: apply ticket #271 (/archicrat-ia/prologue/#p-17-b8c5bf21)
All checks were successful
CI / build-and-anchors (push) Successful in 50s
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (pull_request) Successful in 46s
2026-03-16 12:54:46 +00:00
archicratie-bot
bad748df3a edit: apply ticket #270 (/archicrat-ia/prologue/#p-7-64a0ca9c) 2026-03-16 12:54:21 +00:00
0066cf8601 Merge pull request 'fix(actions): harden proposer queue against duplicate batch PRs' (#269) from hotfix/proposer-close-verify into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 21s
Deploy staging+live (annotations) / deploy (push) Successful in 33s
CI / build-and-anchors (push) Successful in 44s
SMOKE / smoke (push) Successful in 4s
Reviewed-on: #269
2026-03-16 13:42:52 +01:00
5d3473d66c fix(actions): harden proposer queue against duplicate batch PRs
All checks were successful
SMOKE / smoke (push) Successful in 2s
CI / build-and-anchors (push) Successful in 40s
CI / build-and-anchors (pull_request) Successful in 39s
2026-03-16 13:39:09 +01:00
f9d34110e4 Merge pull request 'proposer: apply 2 tickets on /archicrat-ia/prologue/' (#266) from bot/proposer-264-20260316-120249 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 20s
CI / build-and-anchors (push) Successful in 41s
SMOKE / smoke (push) Successful in 7s
Deploy staging+live (annotations) / deploy (push) Successful in 7m47s
Reviewed-on: #266
2026-03-16 13:18:27 +01:00
archicratie-bot
84e9c3ead4 edit: apply ticket #265 (/archicrat-ia/prologue/#p-5-85126fa5)
All checks were successful
CI / build-and-anchors (pull_request) Successful in 43s
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 39s
2026-03-16 12:03:37 +00:00
archicratie-bot
72e59175fc edit: apply ticket #264 (/archicrat-ia/prologue/#p-4-8ed4f807) 2026-03-16 12:03:13 +00:00
81b69ac6d5 Merge pull request 'fix(actions): verify proposer issue closure after PR creation' (#263) from hotfix/proposer-close-verify into main
All checks were successful
CI / build-and-anchors (push) Successful in 43s
Deploy staging+live (annotations) / deploy (push) Successful in 47s
Proposer Apply (Queue) / apply-proposer (push) Successful in 33s
SMOKE / smoke (push) Successful in 2s
Reviewed-on: #263
2026-03-16 12:54:26 +01:00
513ae72e85 fix(actions): verify proposer issue closure after PR creation
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 43s
CI / build-and-anchors (pull_request) Successful in 47s
2026-03-16 12:52:47 +01:00
4c4dd1c515 Merge pull request 'fix(actions): remove fragile heredocs from proposer PR step' (#262) from hotfix/proposer-no-heredoc-pr-step into main
All checks were successful
Deploy staging+live (annotations) / deploy (push) Successful in 39s
CI / build-and-anchors (push) Successful in 46s
SMOKE / smoke (push) Successful in 7s
Proposer Apply (Queue) / apply-proposer (push) Successful in 1m30s
Reviewed-on: #262
2026-03-16 12:34:12 +01:00
46b15ed6ab fix(actions): remove fragile heredocs from proposer PR step
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 44s
CI / build-and-anchors (pull_request) Successful in 40s
2026-03-16 12:30:43 +01:00
a015e72f7c Merge pull request 'proposer: apply ticket #257' (#261) from bot/proposer-257-20260316-111742 into main
All checks were successful
CI / build-and-anchors (push) Successful in 42s
SMOKE / smoke (push) Successful in 8s
Proposer Apply (Queue) / apply-proposer (push) Successful in 1m26s
Deploy staging+live (annotations) / deploy (push) Successful in 7m52s
Reviewed-on: #261
2026-03-16 12:21:55 +01:00
archicratie-bot
d5df7d77a0 edit: apply ticket #257 (/archicrat-ia/prologue/#p-0-d7974f88)
All checks were successful
CI / build-and-anchors (push) Successful in 42s
CI / build-and-anchors (pull_request) Successful in 40s
SMOKE / smoke (push) Successful in 4s
2026-03-16 11:18:06 +00:00
ec3ceee862 Merge pull request 'fix(actions): tolerate empty label payload in proposer gate' (#260) from debug/proposer-257 into main
Some checks failed
CI / build-and-anchors (push) Successful in 46s
Deploy staging+live (annotations) / deploy (push) Successful in 48s
SMOKE / smoke (push) Successful in 2s
Proposer Apply (Queue) / apply-proposer (push) Failing after 1m39s
Reviewed-on: #260
2026-03-16 12:16:12 +01:00
867475c3ff fix(actions): tolerate empty label payload in proposer gate
All checks were successful
SMOKE / smoke (push) Successful in 8s
CI / build-and-anchors (push) Successful in 45s
CI / build-and-anchors (pull_request) Successful in 39s
2026-03-16 12:14:01 +01:00
b024c5557c Merge pull request 'fix(editorial): preserve frontmatter in apply-ticket' (#259) from hotfix/preserve-frontmatter-apply-ticket into main
All checks were successful
CI / build-and-anchors (push) Successful in 47s
Proposer Apply (Queue) / apply-proposer (push) Successful in 38s
SMOKE / smoke (push) Successful in 11s
Deploy staging+live (annotations) / deploy (push) Successful in 9m38s
Reviewed-on: #259
2026-03-16 11:52:07 +01:00
93306f360d fix(editorial): preserve frontmatter in apply-ticket
All checks were successful
SMOKE / smoke (push) Successful in 9s
CI / build-and-anchors (push) Successful in 51s
CI / build-and-anchors (pull_request) Successful in 44s
2026-03-16 11:48:08 +01:00
52847d999d Merge pull request 'fix(actions): silence anno workflow on proposer tickets' (#258) from hotfix/fix-proposer-runtime-v2 into main
Some checks failed
Deploy staging+live (annotations) / deploy (push) Successful in 51s
CI / build-and-anchors (push) Successful in 49s
SMOKE / smoke (push) Successful in 5s
Proposer Apply (Queue) / apply-proposer (push) Failing after 48s
Reviewed-on: #258
2026-03-16 11:11:28 +01:00
b9629b43ff fix(actions): silence anno workflow on proposer tickets
All checks were successful
SMOKE / smoke (push) Successful in 9s
CI / build-and-anchors (push) Successful in 49s
CI / build-and-anchors (pull_request) Successful in 44s
2026-03-16 11:06:11 +01:00
06482a9f8d Merge pull request 'fix(actions): make proposer queue runtime-safe' (#254) from hotfix/fix-proposer-runtime-v2 into main
All checks were successful
Proposer Apply (Queue) / apply-proposer (push) Successful in 21s
CI / build-and-anchors (push) Successful in 46s
SMOKE / smoke (push) Successful in 6s
Deploy staging+live (annotations) / deploy (push) Successful in 42s
Reviewed-on: #254
2026-03-16 00:59:50 +01:00
f2e4ae5ac2 fix(actions): make proposer queue runtime-safe
All checks were successful
SMOKE / smoke (push) Successful in 7s
CI / build-and-anchors (push) Successful in 44s
CI / build-and-anchors (pull_request) Successful in 42s
2026-03-16 00:58:10 +01:00
71baf0f6da Merge pull request 'fix(actions): repair proposer workflow yaml' (#253) from hotfix/fix-proposer-workflow into main
Some checks failed
CI / build-and-anchors (push) Successful in 48s
Deploy staging+live (annotations) / deploy (push) Successful in 1m0s
SMOKE / smoke (push) Successful in 4s
Proposer Apply (Queue) / apply-proposer (push) Failing after 4s
Reviewed-on: #253
2026-03-16 00:42:17 +01:00
d02b6fc347 fix(actions): repair proposer workflow yaml
All checks were successful
SMOKE / smoke (push) Successful in 9s
CI / build-and-anchors (push) Successful in 43s
CI / build-and-anchors (pull_request) Successful in 45s
2026-03-16 00:38:46 +01:00
431f1e347b Merge pull request 'chore(editorial): harden proposer queue and apply-ticket' (#252) from chore/editorial-hardening-v1-clean into main
Some checks are pending
Deploy staging+live (annotations) / deploy (push) Waiting to run
CI / build-and-anchors (push) Successful in 1m6s
SMOKE / smoke (push) Successful in 39s
Reviewed-on: #252
2026-03-16 00:02:31 +01:00
ab6f45ed5c chore(editorial): harden proposer queue and apply-ticket
All checks were successful
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 43s
CI / build-and-anchors (pull_request) Successful in 46s
2026-03-15 23:58:11 +01:00
02c060d239 Merge pull request 'chore/reset-from-docx-clean-base' (#251) from chore/reset-from-docx-clean-base into main
All checks were successful
SMOKE / smoke (push) Successful in 8s
CI / build-and-anchors (push) Successful in 45s
Deploy staging+live (annotations) / deploy (push) Successful in 9m50s
Reviewed-on: #251
2026-03-15 21:19:24 +01:00
be2029de82 ci(anchors): accept intentional chapitre 1 anchor reset
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 44s
2026-03-15 21:11:20 +01:00
e148eaeaf3 content(archicrat-ia): refresh chapitre 1 from official docx
Some checks failed
SMOKE / smoke (push) Successful in 7s
CI / build-and-anchors (push) Failing after 42s
2026-03-15 20:50:35 +01:00
c63a1e6ce4 chore(reset): reimport chapitre 1 from docx clean base
All checks were successful
SMOKE / smoke (push) Successful in 7s
CI / build-and-anchors (push) Successful in 44s
2026-03-15 20:33:49 +01:00
b3a73a7781 Merge pull request 'chore(reset): reimport chapitre 1 from docx clean base' (#250) from chore/reset-from-docx-clean-base into main
All checks were successful
SMOKE / smoke (push) Successful in 8s
CI / build-and-anchors (push) Successful in 37s
Deploy staging+live (annotations) / deploy (push) Successful in 9m32s
Reviewed-on: #250
2026-03-15 15:31:37 +01:00
1968585d0f chore(reset): reimport chapitre 1 from docx clean base
All checks were successful
CI / build-and-anchors (push) Successful in 57s
CI / build-and-anchors (pull_request) Successful in 50s
SMOKE / smoke (push) Successful in 5s
2026-03-15 15:29:09 +01:00
b33c758411 Merge pull request 'proposer: apply ticket #236' (#243) from bot/proposer-236-20260315-112808 into main
All checks were successful
Deploy staging+live (annotations) / deploy (push) Successful in 12m1s
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 44s
CI / build-and-anchors (pull_request) Successful in 43s
Reviewed-on: #243
2026-03-15 12:55:33 +01:00
afa543125c Merge pull request 'proposer: apply ticket #235' (#242) from bot/proposer-235-20260315-112515 into main
Some checks are pending
Deploy staging+live (annotations) / deploy (push) Has started running
SMOKE / smoke (push) Successful in 7s
CI / build-and-anchors (push) Successful in 51s
Reviewed-on: #242
2026-03-15 12:47:26 +01:00
archicratie-bot
0d0252cac0 edit: apply ticket #236 (/archicrat-ia/chapitre-1/#p-400-8959d62e)
All checks were successful
CI / build-and-anchors (push) Successful in 45s
SMOKE / smoke (push) Successful in 3s
CI / build-and-anchors (pull_request) Successful in 39s
2026-03-15 11:28:36 +00:00
archicratie-bot
a8bd9aeed5 edit: apply ticket #235 (/archicrat-ia/chapitre-1/#p-139-caa4e99d)
All checks were successful
CI / build-and-anchors (pull_request) Successful in 47s
CI / build-and-anchors (push) Successful in 41s
SMOKE / smoke (push) Successful in 3s
2026-03-15 11:25:43 +00:00
d277c61afd Merge pull request 'proposer: apply ticket #229' (#232) from bot/proposer-229-20260315-105537 into main
Some checks failed
CI / build-and-anchors (push) Successful in 51s
SMOKE / smoke (push) Successful in 10s
Deploy staging+live (annotations) / deploy (push) Has been cancelled
Reviewed-on: #232
2026-03-15 12:24:34 +01:00
archicratie-bot
86479952d1 edit: apply ticket #229 (/archicrat-ia/chapitre-1/#p-10-1a706744)
All checks were successful
CI / build-and-anchors (pull_request) Successful in 42s
CI / build-and-anchors (push) Successful in 42s
SMOKE / smoke (push) Successful in 5s
2026-03-15 10:56:03 +00:00
c94024a8ae Merge pull request 'feat(glossaire): add advanced external paradigms from chapter 3' (#228) from feat/glossaire-archicrations-cartographie into main
All checks were successful
SMOKE / smoke (push) Successful in 7s
CI / build-and-anchors (push) Successful in 45s
Deploy staging+live (annotations) / deploy (push) Successful in 9m53s
Reviewed-on: #228
2026-03-15 10:08:48 +01:00
70611d16f8 feat(glossaire): add advanced external paradigms from chapter 3
All checks were successful
SMOKE / smoke (push) Successful in 11s
CI / build-and-anchors (push) Successful in 44s
CI / build-and-anchors (pull_request) Successful in 44s
2026-03-15 10:05:32 +01:00
354db231b8 Merge pull request 'feat(glossaire): enrichit la cartographie archicratique et les archicrations' (#227) from feat/glossaire-archicrations-cartographie into main
All checks were successful
SMOKE / smoke (push) Successful in 14s
CI / build-and-anchors (push) Successful in 45s
Deploy staging+live (annotations) / deploy (push) Successful in 9m37s
Reviewed-on: #227
2026-03-14 19:57:38 +01:00
9d8d60d00f 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
2026-03-14 19:55:16 +01:00
f5d25abbec Merge pull request 'feat(glossaire): add advanced external paradigms from chapter 3' (#226) from feat/glossaire-paradigmes-externes into main
All checks were successful
SMOKE / smoke (push) Successful in 10s
CI / build-and-anchors (push) Successful in 44s
Deploy staging+live (annotations) / deploy (push) Successful in 7m13s
Reviewed-on: #226
2026-03-13 18:55:10 +01:00
8e9f7314f5 feat(glossaire): add advanced external paradigms from chapter 3
All checks were successful
SMOKE / smoke (push) Successful in 3s
CI / build-and-anchors (push) Successful in 41s
CI / build-and-anchors (pull_request) Successful in 40s
2026-03-13 18:48:33 +01:00
03b88b944d Merge pull request 'feat(glossaire): integrate paradigms portal into glossary navigation' (#225) from feat/glossaire-paradigmes-externes into main
All checks were successful
SMOKE / smoke (push) Successful in 21s
CI / build-and-anchors (push) Successful in 43s
Deploy staging+live (annotations) / deploy (push) Successful in 7m38s
Reviewed-on: #225
2026-03-13 18:06:43 +01:00
385c36f660 feat(glossaire): integrate paradigms portal into glossary navigation
All checks were successful
SMOKE / smoke (push) Successful in 7s
CI / build-and-anchors (push) Successful in 40s
CI / build-and-anchors (pull_request) Successful in 41s
2026-03-13 18:04:13 +01:00
cfa092cd38 Merge pull request 'feat(glossaire): introduce doctrine as ontology type' (#224) from feat/glossaire-paradigmes-externes into main
All checks were successful
SMOKE / smoke (push) Successful in 11s
CI / build-and-anchors (push) Successful in 43s
Deploy staging+live (annotations) / deploy (push) Successful in 8m36s
Reviewed-on: #224
2026-03-13 16:47:52 +01:00
1a762f8f54 feat(glossaire): introduce doctrine as ontology type
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 41s
CI / build-and-anchors (pull_request) Successful in 38s
2026-03-13 16:45:29 +01:00
fbdaf72775 Merge pull request 'refactor(glossaire): introduce dedicated GlossaryLayout wrapper' (#223) from feat/glossaire-paradigmes-externes into main
All checks were successful
SMOKE / smoke (push) Successful in 10s
CI / build-and-anchors (push) Successful in 41s
Deploy staging+live (annotations) / deploy (push) Successful in 8m12s
Reviewed-on: #223
2026-03-13 15:15:32 +01:00
67128a9ca1 refactor(glossaire): introduce dedicated GlossaryLayout wrapper
All checks were successful
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 41s
CI / build-and-anchors (pull_request) Successful in 39s
2026-03-13 15:11:39 +01:00
898759db3d Merge pull request 'feat(glossaire): refactor core archicratic concepts' (#222) from feat/glossaire-paradigmes-externes into main
All checks were successful
SMOKE / smoke (push) Successful in 9s
CI / build-and-anchors (push) Successful in 39s
Deploy staging+live (annotations) / deploy (push) Successful in 8m6s
Reviewed-on: #222
2026-03-13 14:36:40 +01:00
4f009a9557 feat(glossaire): refactor core archicratic concepts
All checks were successful
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 40s
CI / build-and-anchors (pull_request) Successful in 37s
2026-03-13 14:32:41 +01:00
378d0981f0 Merge pull request 'refactor(glossaire): disable reading-only controls in glossary' (#221) from feat/glossaire-paradigmes-externes into main
All checks were successful
SMOKE / smoke (push) Successful in 20s
CI / build-and-anchors (push) Successful in 41s
Deploy staging+live (annotations) / deploy (push) Successful in 9m36s
Reviewed-on: #221
2026-03-12 19:27:16 +01:00
8f3702f803 refactor(glossaire): disable reading-only controls in glossary
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 40s
CI / build-and-anchors (pull_request) Successful in 41s
2026-03-12 19:23:50 +01:00
cfd303fc85 Merge pull request 'Nouveaux Ajouts - Glossaire' (#220) from feat/glossaire-paradigmes-externes into main
All checks were successful
SMOKE / smoke (push) Successful in 8s
CI / build-and-anchors (push) Successful in 39s
Deploy staging+live (annotations) / deploy (push) Successful in 8m26s
Reviewed-on: #220
2026-03-12 17:45:03 +01:00
0fc0976f8a refactor(glossaire): polish contextual aside navigation
All checks were successful
SMOKE / smoke (push) Successful in 7s
CI / build-and-anchors (push) Successful in 41s
CI / build-and-anchors (pull_request) Successful in 42s
2026-03-12 17:42:16 +01:00
e247ea8ead Merge pull request 'feat(glossaire): strengthen conceptual and paradigmatic cross-links' (#219) from feat/glossaire-paradigmes-externes into main
All checks were successful
SMOKE / smoke (push) Successful in 12s
CI / build-and-anchors (push) Successful in 43s
Deploy staging+live (annotations) / deploy (push) Successful in 7m49s
Reviewed-on: #219
2026-03-12 14:44:17 +01:00
0c57c4bc6d feat(glossaire): strengthen conceptual and paradigmatic cross-links
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 37s
CI / build-and-anchors (pull_request) Successful in 41s
2026-03-12 14:39:46 +01:00
9b7998e1c3 Merge pull request 'feat(glossaire): add external paradigms and theoretical landscape' (#218) from feat/glossaire-paradigmes-externes into main
All checks were successful
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 42s
Deploy staging+live (annotations) / deploy (push) Successful in 7m44s
Reviewed-on: #218
2026-03-12 13:57:00 +01:00
8997a00413 feat(glossaire): add external paradigms and theoretical landscape
All checks were successful
SMOKE / smoke (push) Successful in 10s
CI / build-and-anchors (push) Successful in 42s
CI / build-and-anchors (pull_request) Successful in 39s
2026-03-12 13:53:11 +01:00
a2e6f6185f Merge pull request 'fix(glossaire): adjust section anchor offset for sticky header' (#217) from feat/glossaire-paradigmes-externes into main
All checks were successful
SMOKE / smoke (push) Successful in 13s
CI / build-and-anchors (push) Successful in 37s
Deploy staging+live (annotations) / deploy (push) Successful in 9m8s
Reviewed-on: #217
2026-03-12 13:35:39 +01:00
c2715b01d7 fix(glossaire): adjust section anchor offset for sticky header
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 39s
CI / build-and-anchors (pull_request) Successful in 43s
2026-03-12 13:31:07 +01:00
6f09dfcd12 Merge pull request 'feat(glossaire): extend taxonomy and align Astro 6 content config' (#216) from feat/glossaire-paradigmes into main
All checks were successful
SMOKE / smoke (push) Successful in 12s
CI / build-and-anchors (push) Successful in 42s
Deploy staging+live (annotations) / deploy (push) Successful in 8m58s
Reviewed-on: #216
2026-03-12 12:08:15 +01:00
bb9f55a3b5 feat(glossaire): extend taxonomy and align Astro 6 content config
All checks were successful
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 44s
CI / build-and-anchors (pull_request) Successful in 41s
2026-03-12 12:04:46 +01:00
298ee7492c Merge pull request 'EditionToc Modif' (#215) from chore/astro6-upgrade into main
All checks were successful
SMOKE / smoke (push) Successful in 9s
CI / build-and-anchors (push) Successful in 42s
Deploy staging+live (annotations) / deploy (push) Successful in 7m16s
Reviewed-on: #215
2026-03-11 17:58:17 +01:00
37cb836246 chore(astro): upgrade to Astro 6 and fix dynamic collection routes
All checks were successful
SMOKE / smoke (push) Successful in 3s
CI / build-and-anchors (push) Successful in 42s
CI / build-and-anchors (pull_request) Successful in 44s
2026-03-11 17:56:53 +01:00
19e3318125 Merge pull request 'chore(astro): upgrade to astro 6 with legacy content compatibility' (#214) from chore/astro6-upgrade into main
All checks were successful
SMOKE / smoke (push) Successful in 9s
CI / build-and-anchors (push) Successful in 47s
Deploy staging+live (annotations) / deploy (push) Successful in 9m33s
Reviewed-on: #214
2026-03-11 17:19:04 +01:00
683b02f4a0 chore(astro): upgrade to astro 6 with legacy content compatibility
All checks were successful
SMOKE / smoke (push) Successful in 11s
CI / build-and-anchors (push) Successful in 40s
CI / build-and-anchors (pull_request) Successful in 38s
2026-03-11 17:17:02 +01:00
20aecc30b1 Merge pull request 'feat(glossary): add core glossarial taxonomy and foundational entries' (#213) from feat/glossaire-core2 into main
All checks were successful
SMOKE / smoke (push) Successful in 18s
CI / build-and-anchors (push) Successful in 45s
Deploy staging+live (annotations) / deploy (push) Successful in 8m42s
Reviewed-on: #213
2026-03-11 13:04:24 +01:00
daf57aa152 feat(glossary): add core glossarial taxonomy and foundational entries
All checks were successful
SMOKE / smoke (push) Successful in 5s
CI / build-and-anchors (push) Successful in 42s
CI / build-and-anchors (pull_request) Successful in 45s
2026-03-11 12:50:17 +01:00
bfd693de92 Merge pull request 'refactor(import): unify core editorial manifest' (#212) from refactor/unify-manifest-core into main
All checks were successful
SMOKE / smoke (push) Successful in 10s
CI / build-and-anchors (push) Successful in 40s
Deploy staging+live (annotations) / deploy (push) Successful in 8m0s
Reviewed-on: #212
2026-03-11 11:36:47 +01:00
ea2ad0017b refactor(import): unify core editorial manifest
All checks were successful
SMOKE / smoke (push) Successful in 3s
CI / build-and-anchors (push) Successful in 35s
CI / build-and-anchors (pull_request) Successful in 39s
2026-03-11 11:33:37 +01:00
82e7473cac Merge pull request 'fix(content): declare commencer collection and remove implicit ia collection' (#211) from fix/content-collections-stability into main
All checks were successful
SMOKE / smoke (push) Successful in 17s
CI / build-and-anchors (push) Successful in 39s
Deploy staging+live (annotations) / deploy (push) Successful in 8m57s
Reviewed-on: #211
2026-03-11 11:09:39 +01:00
95f8159554 Merge pull request 'proposer: apply ticket #209' (#210) from bot/proposer-209-20260311-090431 into main
All checks were successful
SMOKE / smoke (push) Successful in 12s
CI / build-and-anchors (push) Successful in 37s
Deploy staging+live (annotations) / deploy (push) Successful in 8m16s
Reviewed-on: #210
2026-03-11 10:06:49 +01:00
archicratie-bot
5698c494f1 edit: apply ticket #209 (/cas-ia/introduction/#p-16-615e3d61)
All checks were successful
CI / build-and-anchors (pull_request) Successful in 43s
SMOKE / smoke (push) Successful in 3s
CI / build-and-anchors (push) Successful in 37s
2026-03-11 09:04:53 +00:00
e640e66b8d Merge pull request 'proposer: apply ticket #207' (#208) from bot/proposer-207-20260311-082736 into main
All checks were successful
SMOKE / smoke (push) Successful in 6s
CI / build-and-anchors (push) Successful in 37s
Deploy staging+live (annotations) / deploy (push) Successful in 7m40s
Reviewed-on: #208
2026-03-11 09:29:21 +01:00
archicratie-bot
9be7d170c6 edit: apply ticket #207 (/cas-ia/introduction/#p-10-ceba29a2)
All checks were successful
CI / build-and-anchors (pull_request) Successful in 40s
SMOKE / smoke (push) Successful in 2s
CI / build-and-anchors (push) Successful in 41s
2026-03-11 08:27:58 +00:00
c2c98c516b Merge pull request 'refactor(editorial): recentrer le site sur le noyau archicratique' (#206) from refactor/recentrage-noyau-archicratique into main
All checks were successful
SMOKE / smoke (push) Successful in 9s
CI / build-and-anchors (push) Successful in 37s
Deploy staging+live (annotations) / deploy (push) Successful in 8m54s
Reviewed-on: #206
2026-03-10 20:43:16 +01:00
224 changed files with 63296 additions and 17670 deletions

View File

@@ -41,7 +41,7 @@ jobs:
run: |
set -euo pipefail
export EVENT_JSON="/var/run/act/workflow/event.json"
test -f "$EVENT_JSON" || { echo "Missing $EVENT_JSON"; exit 1; }
test -f "$EVENT_JSON" || { echo "Missing $EVENT_JSON"; exit 1; }
node --input-type=module - <<'NODE' > /tmp/anno.env
import fs from "node:fs";
@@ -66,7 +66,10 @@ jobs:
if (!owner || !repo) {
const m = cloneUrl.match(/[:/](?<o>[^/]+)\/(?<r>[^/]+?)(?:\.git)?$/);
if (m?.groups) { owner = owner || m.groups.o; repo = repo || m.groups.r; }
if (m?.groups) {
owner = owner || m.groups.o;
repo = repo || m.groups.r;
}
}
if (!owner || !repo) throw new Error("Cannot infer owner/repo");
@@ -81,7 +84,6 @@ jobs:
throw new Error("No issue number in event.json or workflow_dispatch input");
}
// label name: best-effort (non-bloquant)
let labelName = "workflow_dispatch";
const lab = ev?.label;
if (typeof lab === "string") labelName = lab;
@@ -95,7 +97,7 @@ jobs:
? String(process.env.FORGE_API).trim().replace(/\/+$/,"")
: origin;
function sh(s){ return JSON.stringify(String(s)); }
function sh(s) { return JSON.stringify(String(s)); }
process.stdout.write([
`CLONE_URL=${sh(cloneUrl)}`,
@@ -108,7 +110,7 @@ jobs:
].join("\n") + "\n");
NODE
echo "context:"
echo "context:"
sed -n '1,120p' /tmp/anno.env
- name: Early gate (label event fast-skip, but tolerant)
@@ -116,18 +118,16 @@ jobs:
set -euo pipefail
source /tmp/anno.env
echo " event label = $LABEL_NAME"
echo "event label = $LABEL_NAME"
# Fast skip on obvious non-approved label events (avoid noise),
# BUT do NOT skip if label payload is weird/unknown.
if [[ "$LABEL_NAME" != "state/approved" && "$LABEL_NAME" != "workflow_dispatch" && "$LABEL_NAME" != "" && "$LABEL_NAME" != "[object Object]" ]]; then
echo " label=$LABEL_NAME => skip early"
echo "label=$LABEL_NAME => skip early"
echo "SKIP=1" >> /tmp/anno.env
echo "SKIP_REASON=\"label_not_approved_event\"" >> /tmp/anno.env
exit 0
fi
echo "continue to API gating (issue=$ISSUE_NUMBER)"
echo "continue to API gating (issue=$ISSUE_NUMBER)"
- name: Fetch issue + hard gate on labels + Type
env:
@@ -135,9 +135,9 @@ jobs:
run: |
set -euo pipefail
source /tmp/anno.env
[[ "${SKIP:-0}" != "1" ]] || { echo " skipped"; exit 0; }
[[ "${SKIP:-0}" != "1" ]] || { echo "skipped"; exit 0; }
test -n "${FORGE_TOKEN:-}" || { echo "Missing secret FORGE_TOKEN"; exit 1; }
test -n "${FORGE_TOKEN:-}" || { echo "Missing secret FORGE_TOKEN"; exit 1; }
curl -fsS \
-H "Authorization: token $FORGE_TOKEN" \
@@ -148,11 +148,12 @@ jobs:
node --input-type=module - <<'NODE' >> /tmp/anno.env
import fs from "node:fs";
const issue = JSON.parse(fs.readFileSync("/tmp/issue.json","utf8"));
const title = String(issue.title || "");
const issue = JSON.parse(fs.readFileSync("/tmp/issue.json", "utf8"));
const body = String(issue.body || "").replace(/\r\n/g, "\n");
const labels = Array.isArray(issue.labels) ? issue.labels.map(l => String(l.name || "")).filter(Boolean) : [];
const labels = Array.isArray(issue.labels)
? issue.labels.map(l => String(l.name || "")).filter(Boolean)
: [];
const hasApproved = labels.includes("state/approved");
function pickLine(key) {
@@ -164,14 +165,12 @@ jobs:
const typeRaw = pickLine("Type");
const type = String(typeRaw || "").trim().toLowerCase();
const allowed = new Set(["type/media","type/reference","type/comment"]);
const proposer = new Set(["type/correction","type/fact-check"]);
const allowedAnno = new Set(["type/media", "type/reference", "type/comment"]);
const proposerTypes = new Set(["type/correction", "type/fact-check"]);
const out = [];
out.push(`ISSUE_TITLE=${JSON.stringify(title)}`);
out.push(`ISSUE_TYPE=${JSON.stringify(type)}`);
// HARD gate: must currently have state/approved (avoids depending on event payload)
if (!hasApproved) {
out.push(`SKIP=1`);
out.push(`SKIP_REASON=${JSON.stringify("not_approved_label_present")}`);
@@ -182,23 +181,23 @@ jobs:
if (!type) {
out.push(`SKIP=1`);
out.push(`SKIP_REASON=${JSON.stringify("missing_type")}`);
} else if (allowed.has(type)) {
} else if (allowedAnno.has(type)) {
// proceed
} else if (proposer.has(type)) {
} else if (proposerTypes.has(type)) {
out.push(`SKIP=1`);
out.push(`SKIP_REASON=${JSON.stringify("proposer_type:"+type)}`);
out.push(`SKIP_REASON=${JSON.stringify("proposer_type:" + type)}`);
} else {
out.push(`SKIP=1`);
out.push(`SKIP_REASON=${JSON.stringify("unsupported_type:"+type)}`);
out.push(`SKIP_REASON=${JSON.stringify("unsupported_type:" + type)}`);
}
process.stdout.write(out.join("\n") + "\n");
NODE
echo "gating result:"
echo "gating result:"
grep -E '^(ISSUE_TYPE|SKIP|SKIP_REASON)=' /tmp/anno.env || true
- name: Comment issue if skipped (Proposer / unsupported / missing Type)
- name: Comment issue if skipped (unsupported / missing Type only)
if: ${{ always() }}
env:
FORGE_TOKEN: ${{ secrets.FORGE_TOKEN }}
@@ -208,9 +207,13 @@ jobs:
[[ "${SKIP:-0}" == "1" ]] || exit 0
# IMPORTANT: do NOT comment for "not_approved_label_present" (avoid spam on other label events)
if [[ "${SKIP_REASON:-}" == "not_approved_label_present" || "${SKIP_REASON:-}" == "label_not_approved_event" ]]; then
echo " skip reason=${SKIP_REASON} -> no comment"
echo "skip reason=${SKIP_REASON} -> no comment"
exit 0
fi
if [[ "${SKIP_REASON:-}" == proposer_type:* ]]; then
echo "proposer ticket detected -> anno stays silent"
exit 0
fi
@@ -219,15 +222,13 @@ jobs:
REASON="${SKIP_REASON:-}"
TYPE="${ISSUE_TYPE:-}"
if [[ "$REASON" == proposer_type:* ]]; then
MSG=" Ticket #${ISSUE_NUMBER} détecté comme **Proposer** (${TYPE}).\n\n- Ce type est **traité manuellement par les editors**.\n✅ Aucun traitement automatique."
elif [[ "$REASON" == unsupported_type:* ]]; then
MSG=" Ticket #${ISSUE_NUMBER} ignoré : Type non supporté par le bot (${TYPE}).\n\nTypes supportés : type/media, type/reference, type/comment."
if [[ "$REASON" == unsupported_type:* ]]; then
MSG="Ticket #${ISSUE_NUMBER} ignored: unsupported Type (${TYPE}). Supported types: type/media, type/reference, type/comment."
else
MSG=" Ticket #${ISSUE_NUMBER} ignoré : champ 'Type:' manquant ou illisible.\n\nAjoute : Type: type/media|type/reference|type/comment"
MSG="Ticket #${ISSUE_NUMBER} ignored: missing or unreadable 'Type:'. Expected: type/media|type/reference|type/comment"
fi
PAYLOAD="$(node --input-type=module -e 'console.log(JSON.stringify({body: process.argv[1]||""}))' "$MSG")"
PAYLOAD="$(node --input-type=module -e 'console.log(JSON.stringify({body: process.argv[1] || ""}))' "$MSG")"
curl -fsS -X POST \
-H "Authorization: token $FORGE_TOKEN" \
@@ -239,7 +240,7 @@ jobs:
run: |
set -euo pipefail
source /tmp/anno.env
[[ "${SKIP:-0}" != "1" ]] || { echo " skipped"; exit 0; }
[[ "${SKIP:-0}" != "1" ]] || { echo "skipped"; exit 0; }
rm -rf .git
git init -q
@@ -252,16 +253,16 @@ jobs:
run: |
set -euo pipefail
source /tmp/anno.env
[[ "${SKIP:-0}" != "1" ]] || { echo " skipped"; exit 0; }
[[ "${SKIP:-0}" != "1" ]] || { echo "skipped"; exit 0; }
npm ci --no-audit --no-fund
- name: Check apply script exists
run: |
set -euo pipefail
source /tmp/anno.env
[[ "${SKIP:-0}" != "1" ]] || { echo " skipped"; exit 0; }
[[ "${SKIP:-0}" != "1" ]] || { echo "skipped"; exit 0; }
test -f scripts/apply-annotation-ticket.mjs || {
echo "missing scripts/apply-annotation-ticket.mjs on $DEFAULT_BRANCH"
echo "missing scripts/apply-annotation-ticket.mjs on $DEFAULT_BRANCH"
ls -la scripts | sed -n '1,200p' || true
exit 1
}
@@ -270,16 +271,16 @@ jobs:
run: |
set -euo pipefail
source /tmp/anno.env
[[ "${SKIP:-0}" != "1" ]] || { echo " skipped"; exit 0; }
[[ "${SKIP:-0}" != "1" ]] || { echo "skipped"; exit 0; }
npm run build
test -f dist/para-index.json || {
echo "missing dist/para-index.json after build"
echo "missing dist/para-index.json after build"
ls -la dist | sed -n '1,200p' || true
exit 1
}
echo "dist/para-index.json present"
echo "dist/para-index.json present"
- name: Apply ticket on bot branch (strict+verify, commit)
continue-on-error: true
@@ -290,10 +291,10 @@ jobs:
run: |
set -euo pipefail
source /tmp/anno.env
[[ "${SKIP:-0}" != "1" ]] || { echo " skipped"; exit 0; }
test -d .git || { echo "not a git repo (checkout failed)"; echo "APPLY_RC=90" >> /tmp/anno.env; exit 0; }
[[ "${SKIP:-0}" != "1" ]] || { echo "skipped"; exit 0; }
test -d .git || { echo "not a git repo (checkout failed)"; echo "APPLY_RC=90" >> /tmp/anno.env; exit 0; }
test -n "${FORGE_TOKEN:-}" || { echo "Missing secret FORGE_TOKEN"; exit 1; }
test -n "${FORGE_TOKEN:-}" || { echo "Missing secret FORGE_TOKEN"; exit 1; }
git config user.name "${BOT_GIT_NAME:-archicratie-bot}"
git config user.email "${BOT_GIT_EMAIL:-bot@archicratie.local}"
@@ -340,11 +341,11 @@ jobs:
run: |
set -euo pipefail
source /tmp/anno.env || true
[[ "${SKIP:-0}" != "1" ]] || { echo " skipped"; exit 0; }
[[ "${SKIP:-0}" != "1" ]] || { echo "skipped"; exit 0; }
RC="${APPLY_RC:-0}"
if [[ "$RC" == "0" ]]; then
echo " no failure detected"
echo "no failure detected"
exit 0
fi
@@ -356,8 +357,8 @@ jobs:
BODY="(no apply log found)"
fi
MSG="apply-annotation-ticket a échoué (rc=${RC}).\n\n\`\`\`\n${BODY}\n\`\`\`\n"
PAYLOAD="$(node --input-type=module -e 'console.log(JSON.stringify({body: process.argv[1]||""}))' "$MSG")"
MSG="apply-annotation-ticket failed (rc=${RC}).\n\n\`\`\`\n${BODY}\n\`\`\`\n"
PAYLOAD="$(node --input-type=module -e 'console.log(JSON.stringify({body: process.argv[1] || ""}))' "$MSG")"
curl -fsS -X POST \
-H "Authorization: token $FORGE_TOKEN" \
@@ -374,9 +375,9 @@ jobs:
source /tmp/anno.env || true
[[ "${SKIP:-0}" != "1" ]] || exit 0
[[ "${APPLY_RC:-0}" == "0" ]] || { echo " apply failed -> skip push"; exit 0; }
[[ "${NOOP:-0}" == "0" ]] || { echo " no-op -> skip push"; exit 0; }
test -d .git || { echo " no git repo -> skip push"; exit 0; }
[[ "${APPLY_RC:-0}" == "0" ]] || { echo "apply failed -> skip push"; exit 0; }
[[ "${NOOP:-0}" == "0" ]] || { echo "no-op -> skip push"; exit 0; }
test -d .git || { echo "no git repo -> skip push"; exit 0; }
AUTH_URL="$(node --input-type=module -e '
const [clone, tok] = process.argv.slice(1);
@@ -398,8 +399,8 @@ jobs:
source /tmp/anno.env || true
[[ "${SKIP:-0}" != "1" ]] || exit 0
[[ "${APPLY_RC:-0}" == "0" ]] || { echo " apply failed -> skip PR"; exit 0; }
[[ "${NOOP:-0}" == "0" ]] || { echo " no-op -> skip PR"; exit 0; }
[[ "${APPLY_RC:-0}" == "0" ]] || { echo "apply failed -> skip PR"; exit 0; }
[[ "${NOOP:-0}" == "0" ]] || { echo "no-op -> skip PR"; exit 0; }
PR_TITLE="anno: apply ticket #${ISSUE_NUMBER}"
PR_BODY="PR auto depuis ticket #${ISSUE_NUMBER} (state/approved).\n\n- Branche: ${BRANCH}\n- Commit: ${END_SHA}\n\nMerge si CI OK."
@@ -420,10 +421,10 @@ jobs:
console.log(pr.html_url || pr.url || "");
' "$PR_JSON")"
test -n "$PR_URL" || { echo "PR URL missing. Raw: $PR_JSON"; exit 1; }
test -n "$PR_URL" || { echo "PR URL missing. Raw: $PR_JSON"; exit 1; }
MSG="PR créée pour ticket #${ISSUE_NUMBER} : ${PR_URL}"
C_PAYLOAD="$(node --input-type=module -e 'console.log(JSON.stringify({body: process.argv[1]||""}))' "$MSG")"
MSG="PR created for ticket #${ISSUE_NUMBER}: ${PR_URL}"
C_PAYLOAD="$(node --input-type=module -e 'console.log(JSON.stringify({body: process.argv[1] || ""}))' "$MSG")"
curl -fsS -X POST \
-H "Authorization: token $FORGE_TOKEN" \
@@ -431,7 +432,7 @@ jobs:
"$API_BASE/api/v1/repos/$OWNER/$REPO/issues/$ISSUE_NUMBER/comments" \
--data-binary "$C_PAYLOAD"
echo "PR: $PR_URL"
echo "PR: $PR_URL"
- name: Finalize (fail job if apply failed)
if: ${{ always() }}
@@ -439,11 +440,11 @@ jobs:
set -euo pipefail
source /tmp/anno.env || true
[[ "${SKIP:-0}" != "1" ]] || { echo " skipped"; exit 0; }
[[ "${SKIP:-0}" != "1" ]] || { echo "skipped"; exit 0; }
RC="${APPLY_RC:-0}"
if [[ "$RC" != "0" ]]; then
echo "apply failed (rc=$RC)"
echo "apply failed (rc=$RC)"
exit "$RC"
fi
echo "apply ok"
echo "apply ok"

View File

@@ -297,6 +297,19 @@ jobs:
docker image tag archicratie-web:blue "archicratie-web:blue.BAK.${TS}" || true
docker image tag archicratie-web:green "archicratie-web:green.BAK.${TS}" || true
BUILD_TIME_RAW="$(TZ=Europe/Paris date '+%Y-%m-%dT%H:%M:%S%z')"
BUILD_TIME="${BUILD_TIME_RAW:0:${#BUILD_TIME_RAW}-2}:${BUILD_TIME_RAW:${#BUILD_TIME_RAW}-2}"
PUBLIC_OPS_ENV=staging \
PUBLIC_OPS_UPSTREAM=web_blue \
PUBLIC_BUILD_SHA="${AFTER}" \
PUBLIC_BUILD_TIME="${BUILD_TIME}" \
node scripts/write-ops-health.mjs
test -f public/__ops/health.json
echo "=== public/__ops/health.json (blue/staging) ==="
cat public/__ops/health.json
docker compose -p "$PROJ" -f docker-compose.yml build web_blue
docker rm -f archicratie-web-blue || true
docker compose -p "$PROJ" -f docker-compose.yml up -d --force-recreate --remove-orphans web_blue
@@ -306,6 +319,11 @@ jobs:
wait_url "http://127.0.0.1:8081/annotations-index.json" "blue annotations-index"
wait_url "http://127.0.0.1:8081/pagefind/pagefind.js" "blue pagefind.js"
wait_url "http://127.0.0.1:8081/__ops/health.json" "blue ops health"
curl -fsS --max-time 6 "http://127.0.0.1:8081/__ops/health.json" \
| python3 -c 'import sys, json; j=json.load(sys.stdin); print("env=", j.get("env")); print("upstream=", j.get("upstream")); print("buildSha=", j.get("buildSha")); print("builtAt=", j.get("builtAt"))'
CANON="$(curl -fsS --max-time 6 "http://127.0.0.1:8081/archicrat-ia/chapitre-1/" | grep -oE 'rel="canonical" href="[^"]+"' | head -n1 || true)"
echo "canonical(blue)=$CANON"
echo "$CANON" | grep -q 'https://staging\.archicratie\.trans-hands\.synology\.me/' || {
@@ -353,6 +371,19 @@ jobs:
docker compose -p "$PROJ" -f docker-compose.yml up -d --force-recreate --remove-orphans web_green || true
}
BUILD_TIME_RAW="$(TZ=Europe/Paris date '+%Y-%m-%dT%H:%M:%S%z')"
BUILD_TIME="${BUILD_TIME_RAW:0:${#BUILD_TIME_RAW}-2}:${BUILD_TIME_RAW:${#BUILD_TIME_RAW}-2}"
PUBLIC_OPS_ENV=prod \
PUBLIC_OPS_UPSTREAM=web_green \
PUBLIC_BUILD_SHA="${AFTER}" \
PUBLIC_BUILD_TIME="${BUILD_TIME}" \
node scripts/write-ops-health.mjs
test -f public/__ops/health.json
echo "=== public/__ops/health.json (green/prod) ==="
cat public/__ops/health.json
# build/restart green
if ! docker compose -p "$PROJ" -f docker-compose.yml build web_green; then
echo "❌ build green failed"; rollback; exit 4
@@ -366,6 +397,11 @@ jobs:
if ! wait_url "http://127.0.0.1:8082/annotations-index.json" "green annotations-index"; then rollback; exit 4; fi
if ! wait_url "http://127.0.0.1:8082/pagefind/pagefind.js" "green pagefind.js"; then rollback; exit 4; fi
if ! wait_url "http://127.0.0.1:8082/__ops/health.json" "green ops health"; then rollback; exit 4; fi
curl -fsS --max-time 6 "http://127.0.0.1:8082/__ops/health.json" \
| python3 -c 'import sys, json; j=json.load(sys.stdin); print("env=", j.get("env")); print("upstream=", j.get("upstream")); print("buildSha=", j.get("buildSha")); print("builtAt=", j.get("builtAt"))'
CANON="$(curl -fsS --max-time 6 "http://127.0.0.1:8082/archicrat-ia/chapitre-1/" | grep -oE 'rel="canonical" href="[^"]+"' | head -n1 || true)"
echo "canonical(green)=$CANON"
echo "$CANON" | grep -q 'https://archicratie\.trans-hands\.synology\.me/' || {

View File

@@ -1,13 +1,16 @@
name: Proposer Apply (PR)
name: Proposer Apply (Queue)
on:
issues:
types: [labeled]
push:
branches: [main]
workflow_dispatch:
inputs:
issue:
description: "Issue number to apply (Proposer: correction/fact-check)"
required: true
description: "Issue number to prioritize (optional)"
required: false
default: ""
env:
NODE_OPTIONS: --dns-result-order=ipv4first
@@ -17,8 +20,8 @@ defaults:
shell: bash
concurrency:
group: proposer-apply-${{ github.event.issue.number || inputs.issue || 'manual' }}
cancel-in-progress: true
group: proposer-queue-main
cancel-in-progress: false
jobs:
apply-proposer:
@@ -34,14 +37,15 @@ jobs:
node --version
npm --version
- name: Derive context (event.json / workflow_dispatch)
- name: Derive context (event.json / workflow_dispatch / push)
env:
INPUT_ISSUE: ${{ inputs.issue }}
EVENT_NAME_IN: ${{ github.event_name }}
FORGE_API: ${{ vars.FORGE_API || vars.FORGE_BASE }}
run: |
set -euo pipefail
export EVENT_JSON="/var/run/act/workflow/event.json"
test -f "$EVENT_JSON" || { echo "Missing $EVENT_JSON"; exit 1; }
test -f "$EVENT_JSON" || { echo "Missing $EVENT_JSON"; exit 1; }
node --input-type=module - <<'NODE' > /tmp/proposer.env
import fs from "node:fs";
@@ -51,7 +55,7 @@ jobs:
const cloneUrl =
repoObj?.clone_url ||
(repoObj?.html_url ? (repoObj.html_url.replace(/\/$/,"") + ".git") : "");
(repoObj?.html_url ? (repoObj.html_url.replace(/\/$/, "") + ".git") : "");
if (!cloneUrl) throw new Error("No repository clone_url/html_url in event.json");
@@ -66,8 +70,12 @@ jobs:
if (!owner || !repo) {
const m = cloneUrl.match(/[:/](?<o>[^/]+)\/(?<r>[^/]+?)(?:\.git)?$/);
if (m?.groups) { owner = owner || m.groups.o; repo = repo || m.groups.r; }
if (m?.groups) {
owner = owner || m.groups.o;
repo = repo || m.groups.r;
}
}
if (!owner || !repo) throw new Error("Cannot infer owner/repo");
const defaultBranch = repoObj?.default_branch || "main";
@@ -75,25 +83,30 @@ jobs:
const issueNumber =
ev?.issue?.number ||
ev?.issue?.index ||
(process.env.INPUT_ISSUE ? Number(process.env.INPUT_ISSUE) : 0);
if (!issueNumber || !Number.isFinite(Number(issueNumber))) {
throw new Error("No issue number in event.json or workflow_dispatch input");
}
(process.env.INPUT_ISSUE ? Number(process.env.INPUT_ISSUE) : 0) ||
0;
const labelName =
ev?.label?.name ||
ev?.label ||
"workflow_dispatch";
(typeof ev?.label === "string" ? ev.label : "") ||
"";
const eventName =
String(process.env.EVENT_NAME_IN || "").trim() ||
(ev?.issue ? "issues" : (ev?.before || ev?.after ? "push" : "workflow_dispatch"));
const u = new URL(cloneUrl);
const origin = u.origin;
const apiBase = (process.env.FORGE_API && String(process.env.FORGE_API).trim())
? String(process.env.FORGE_API).trim().replace(/\/+$/,"")
: origin;
const apiBase =
(process.env.FORGE_API && String(process.env.FORGE_API).trim())
? String(process.env.FORGE_API).trim().replace(/\/+$/, "")
: origin;
function sh(s) {
return JSON.stringify(String(s));
}
function sh(s){ return JSON.stringify(String(s)); }
process.stdout.write([
`CLONE_URL=${sh(cloneUrl)}`,
`OWNER=${sh(owner)}`,
@@ -101,82 +114,230 @@ jobs:
`DEFAULT_BRANCH=${sh(defaultBranch)}`,
`ISSUE_NUMBER=${sh(issueNumber)}`,
`LABEL_NAME=${sh(labelName)}`,
`EVENT_NAME=${sh(eventName)}`,
`API_BASE=${sh(apiBase)}`
].join("\n") + "\n");
NODE
echo "✅ context:"
sed -n '1,120p' /tmp/proposer.env
echo "Context:"
sed -n '1,200p' /tmp/proposer.env
- name: Gate on label state/approved
- name: Early gate (tolerant on empty issue label payload)
run: |
set -euo pipefail
source /tmp/proposer.env
if [[ "$LABEL_NAME" != "state/approved" && "$LABEL_NAME" != "workflow_dispatch" ]]; then
echo " label=$LABEL_NAME => skip"
echo "SKIP=1" >> /tmp/proposer.env
exit 0
fi
echo "✅ proceed (issue=$ISSUE_NUMBER)"
echo "event=$EVENT_NAME label=${LABEL_NAME:-<empty>}"
- name: Fetch issue + API-hard gate on (state/approved present + proposer type)
if [[ "$EVENT_NAME" == "issues" ]]; then
if [[ -n "${LABEL_NAME:-}" && "$LABEL_NAME" != "state/approved" ]]; then
echo "issues/labeled with explicit non-approved label=$LABEL_NAME -> skip"
echo 'SKIP=1' >> /tmp/proposer.env
echo 'SKIP_REASON="label_not_state_approved_event"' >> /tmp/proposer.env
exit 0
fi
fi
echo "Proceed to API-based selection/gating"
- name: Checkout default branch
run: |
set -euo pipefail
source /tmp/proposer.env
[[ "${SKIP:-0}" != "1" ]] || { echo "Skipped"; exit 0; }
rm -rf .git
git init -q
git remote add origin "$CLONE_URL"
git fetch --depth 1 origin "$DEFAULT_BRANCH"
git -c advice.detachedHead=false checkout -q FETCH_HEAD
git log -1 --oneline
- name: Detect app dir (repo-root vs ./site)
run: |
set -euo pipefail
source /tmp/proposer.env
[[ "${SKIP:-0}" != "1" ]] || { echo "Skipped"; exit 0; }
APP_DIR="."
if [[ -d "site" && -f "site/package.json" ]]; then
APP_DIR="site"
fi
echo "APP_DIR=$APP_DIR" >> /tmp/proposer.env
echo "APP_DIR=$APP_DIR"
test -f "$APP_DIR/package.json" || {
echo "package.json missing in APP_DIR=$APP_DIR"
exit 1
}
test -d "$APP_DIR/scripts" || {
echo "scripts/ missing in APP_DIR=$APP_DIR"
exit 1
}
- name: Select next proposer batch (by path)
env:
FORGE_TOKEN: ${{ secrets.FORGE_TOKEN }}
run: |
set -euo pipefail
source /tmp/proposer.env
[[ "${SKIP:-0}" != "1" ]] || { echo " skipped"; exit 0; }
[[ "${SKIP:-0}" != "1" ]] || { echo "Skipped"; exit 0; }
test -n "${FORGE_TOKEN:-}" || { echo "❌ Missing secret FORGE_TOKEN"; exit 1; }
test -n "${FORGE_TOKEN:-}" || {
echo "Missing secret FORGE_TOKEN"
exit 1
}
export GITEA_OWNER="$OWNER"
export GITEA_REPO="$REPO"
export FORGE_API="$API_BASE"
cd "$APP_DIR"
test -f scripts/pick-proposer-issue.mjs || {
echo "missing scripts/pick-proposer-issue.mjs in APP_DIR=$APP_DIR"
ls -la scripts | sed -n '1,200p' || true
exit 1
}
node scripts/pick-proposer-issue.mjs "${ISSUE_NUMBER:-0}" > /tmp/proposer.pick.env
cat /tmp/proposer.pick.env >> /tmp/proposer.env
source /tmp/proposer.pick.env
if [[ "${TARGET_FOUND:-0}" != "1" ]]; then
echo 'SKIP=1' >> /tmp/proposer.env
echo "SKIP_REASON=${TARGET_REASON:-no_target}" >> /tmp/proposer.env
echo "No target batch"
exit 0
fi
echo "Target batch:"
grep -E '^(TARGET_PRIMARY_ISSUE|TARGET_ISSUES|TARGET_COUNT|TARGET_CHEMIN)=' /tmp/proposer.env
- name: Derive deterministic batch identity
run: |
set -euo pipefail
source /tmp/proposer.env
[[ "${SKIP:-0}" != "1" ]] || { echo "Skipped"; exit 0; }
export TARGET_ISSUES TARGET_CHEMIN
node --input-type=module - <<'NODE'
import fs from "node:fs";
import crypto from "node:crypto";
const issues = String(process.env.TARGET_ISSUES || "")
.trim()
.split(/\s+/)
.filter(Boolean)
.sort((a, b) => Number(a) - Number(b));
const chemin = String(process.env.TARGET_CHEMIN || "").trim();
const keySource = `${chemin}::${issues.join(",")}`;
const hash = crypto.createHash("sha1").update(keySource).digest("hex").slice(0, 12);
const primary = issues[0] || "0";
const batchBranch = `bot/proposer-${primary}-${hash}`;
fs.appendFileSync(
"/tmp/proposer.env",
[
`BATCH_KEY=${JSON.stringify(keySource)}`,
`BATCH_HASH=${JSON.stringify(hash)}`,
`BATCH_BRANCH=${JSON.stringify(batchBranch)}`
].join("\n") + "\n"
);
NODE
echo "Batch identity:"
grep -E '^(BATCH_KEY|BATCH_HASH|BATCH_BRANCH)=' /tmp/proposer.env
- name: Inspect open proposer PRs
env:
FORGE_TOKEN: ${{ secrets.FORGE_TOKEN }}
run: |
set -euo pipefail
source /tmp/proposer.env
[[ "${SKIP:-0}" != "1" ]] || { echo "Skipped"; exit 0; }
curl -fsS \
-H "Authorization: token $FORGE_TOKEN" \
-H "Accept: application/json" \
"$API_BASE/api/v1/repos/$OWNER/$REPO/issues/$ISSUE_NUMBER" \
-o /tmp/issue.json
"$API_BASE/api/v1/repos/$OWNER/$REPO/pulls?state=open&limit=100" \
-o /tmp/open_pulls.json
export TARGET_ISSUES="${TARGET_ISSUES:-}"
export BATCH_BRANCH="${BATCH_BRANCH:-}"
export BATCH_KEY="${BATCH_KEY:-}"
node --input-type=module - <<'NODE' >> /tmp/proposer.env
import fs from "node:fs";
const issue = JSON.parse(fs.readFileSync("/tmp/issue.json","utf8"));
const title = String(issue.title || "");
const body = String(issue.body || "").replace(/\r\n/g, "\n");
const labels = Array.isArray(issue.labels) ? issue.labels.map(l => String(l.name||"")).filter(Boolean) : [];
function pickLine(key) {
const re = new RegExp(`^\\s*${key}\\s*:\\s*([^\\n\\r]+)`, "mi");
const m = body.match(re);
return m ? m[1].trim() : "";
}
const pulls = JSON.parse(fs.readFileSync("/tmp/open_pulls.json", "utf8"));
const issues = String(process.env.TARGET_ISSUES || "")
.trim()
.split(/\s+/)
.filter(Boolean);
const typeRaw = pickLine("Type");
const type = String(typeRaw || "").trim().toLowerCase();
const batchBranch = String(process.env.BATCH_BRANCH || "");
const batchKey = String(process.env.BATCH_KEY || "");
const hasApproved = labels.includes("state/approved");
const proposer = new Set(["type/correction","type/fact-check"]);
const proposerOpen = Array.isArray(pulls)
? pulls.filter((pr) => String(pr?.head?.ref || "").startsWith("bot/proposer-"))
: [];
const sameBatch = proposerOpen.find((pr) => {
const ref = String(pr?.head?.ref || "");
const title = String(pr?.title || "");
const body = String(pr?.body || "");
if (batchBranch && ref === batchBranch) return true;
if (batchKey && body.includes(`Batch-Key: ${batchKey}`)) return true;
return issues.some((n) =>
ref.startsWith(`bot/proposer-${n}-`) ||
title.includes(`#${n}`) ||
body.includes(`#${n}`) ||
body.includes(`ticket #${n}`)
);
});
const out = [];
out.push(`ISSUE_TITLE=${JSON.stringify(title)}`);
out.push(`ISSUE_TYPE=${JSON.stringify(type)}`);
out.push(`HAS_APPROVED=${hasApproved ? "1":"0"}`);
if (!hasApproved) {
out.push(`SKIP=1`);
out.push(`SKIP_REASON=${JSON.stringify("approved_not_present")}`);
} else if (!type) {
out.push(`SKIP=1`);
out.push(`SKIP_REASON=${JSON.stringify("missing_type")}`);
} else if (!proposer.has(type)) {
out.push(`SKIP=1`);
out.push(`SKIP_REASON=${JSON.stringify("not_proposer:"+type)}`);
if (sameBatch) {
out.push("SKIP=1");
out.push(`SKIP_REASON=${JSON.stringify("issue_already_has_open_pr")}`);
out.push(`OPEN_PR_URL=${JSON.stringify(String(sameBatch.html_url || sameBatch.url || ""))}`);
out.push(`OPEN_PR_BRANCH=${JSON.stringify(String(sameBatch?.head?.ref || ""))}`);
} else if (proposerOpen.length > 0) {
const first = proposerOpen[0];
out.push("SKIP=1");
out.push(`SKIP_REASON=${JSON.stringify("queue_busy_open_proposer_pr")}`);
out.push(`OPEN_PR_URL=${JSON.stringify(String(first.html_url || first.url || ""))}`);
out.push(`OPEN_PR_BRANCH=${JSON.stringify(String(first?.head?.ref || ""))}`);
}
process.stdout.write(out.join("\n") + "\n");
process.stdout.write(out.join("\n") + (out.length ? "\n" : ""));
NODE
echo "✅ proposer gating:"
grep -E '^(ISSUE_TYPE|HAS_APPROVED|SKIP|SKIP_REASON)=' /tmp/proposer.env || true
- name: Guard on remote batch branch before heavy work
run: |
set -euo pipefail
source /tmp/proposer.env
[[ "${SKIP:-0}" != "1" ]] || { echo "Skipped"; exit 0; }
- name: Comment issue if skipped
if git ls-remote --exit-code --heads origin "$BATCH_BRANCH" >/dev/null 2>&1; then
echo 'SKIP=1' >> /tmp/proposer.env
echo 'SKIP_REASON="batch_branch_exists_without_pr"' >> /tmp/proposer.env
echo "OPEN_PR_BRANCH=${BATCH_BRANCH}" >> /tmp/proposer.env
echo "Remote batch branch already exists -> skip duplicate materialization"
exit 0
fi
echo "Remote batch branch is free"
- name: Comment issue if queued / skipped
if: ${{ always() }}
env:
FORGE_TOKEN: ${{ secrets.FORGE_TOKEN }}
@@ -185,122 +346,149 @@ jobs:
source /tmp/proposer.env || true
[[ "${SKIP:-0}" == "1" ]] || exit 0
[[ "$LABEL_NAME" == "state/approved" || "$LABEL_NAME" == "workflow_dispatch" ]] || exit 0
[[ "${EVENT_NAME:-}" != "push" ]] || exit 0
REASON="${SKIP_REASON:-}"
TYPE="${ISSUE_TYPE:-}"
if [[ "$REASON" == "approved_not_present" ]]; then
MSG=" Proposer Apply: skip — le label **state/approved** n'est pas présent sur le ticket au moment du run (gate API-hard)."
elif [[ "$REASON" == "missing_type" ]]; then
MSG=" Proposer Apply: skip — champ **Type:** manquant/illisible. Attendu: type/correction ou type/fact-check."
else
MSG=" Proposer Apply: skip — Type non-Proposer (${TYPE}). (Ce workflow ne traite que correction/fact-check.)"
if [[ "${SKIP_REASON:-}" == "label_not_state_approved_event" || "${SKIP_REASON:-}" == "label_not_state_approved" ]]; then
echo "Skip reason=${SKIP_REASON} -> no comment"
exit 0
fi
PAYLOAD="$(node --input-type=module -e 'console.log(JSON.stringify({body: process.argv[1]||""}))' "$MSG")"
test -n "${FORGE_TOKEN:-}" || exit 0
ISSUE_TO_COMMENT="${ISSUE_NUMBER:-0}"
if [[ "$ISSUE_TO_COMMENT" == "0" || -z "$ISSUE_TO_COMMENT" ]]; then
ISSUE_TO_COMMENT="${TARGET_PRIMARY_ISSUE:-0}"
fi
[[ "$ISSUE_TO_COMMENT" != "0" ]] || exit 0
case "${SKIP_REASON:-}" in
queue_busy_open_proposer_pr)
MSG="Ticket queued in proposer queue. An open proposer PR already exists: ${OPEN_PR_URL:-"(URL unavailable)"}. The workflow will resume after merge on main."
;;
issue_already_has_open_pr)
MSG="This batch already has an open proposer PR: ${OPEN_PR_URL:-"(URL unavailable)"}"
;;
batch_branch_exists_without_pr)
MSG="This batch already has a remote batch branch (${OPEN_PR_BRANCH:-"(unknown branch)"}). Manual inspection is required before any new proposer PR is created."
;;
batch_branch_already_materialized)
MSG="This batch was already materialized by another run on branch ${OPEN_PR_BRANCH:-"(unknown branch)"}. No duplicate PR was created."
;;
explicit_issue_missing_chemin)
MSG="Proposer Apply: cannot process this ticket automatically because field Chemin is missing or unreadable."
;;
explicit_issue_missing_type)
MSG="Proposer Apply: cannot process this ticket automatically because field Type is missing or unreadable."
;;
explicit_issue_not_approved)
MSG="Proposer Apply: this ticket is not currently labeled state/approved."
;;
explicit_issue_rejected)
MSG="Proposer Apply: this ticket has state/rejected and is not eligible for the proposer queue."
;;
no_open_approved_proposer_issue)
MSG="No approved proposer ticket is currently waiting."
;;
*)
MSG="Proposer Apply: skip - ${SKIP_REASON:-unspecified reason}."
;;
esac
export MSG
node --input-type=module - <<'NODE' > /tmp/proposer.skip.comment.json
const msg = process.env.MSG || "";
process.stdout.write(JSON.stringify({ body: msg }));
NODE
curl -fsS -X POST \
-H "Authorization: token $FORGE_TOKEN" \
-H "Content-Type: application/json" \
"$API_BASE/api/v1/repos/$OWNER/$REPO/issues/$ISSUE_NUMBER/comments" \
--data-binary "$PAYLOAD" || true
"$API_BASE/api/v1/repos/$OWNER/$REPO/issues/$ISSUE_TO_COMMENT/comments" \
--data-binary @/tmp/proposer.skip.comment.json || true
- name: Checkout default branch
run: |
set -euo pipefail
source /tmp/proposer.env
[[ "${SKIP:-0}" != "1" ]] || { echo " skipped"; exit 0; }
rm -rf .git
git init -q
git remote add origin "$CLONE_URL"
git fetch --depth 1 origin "$DEFAULT_BRANCH"
git -c advice.detachedHead=false checkout -q FETCH_HEAD
git log -1 --oneline
echo "✅ workspace:"
ls -la | sed -n '1,120p'
- name: Detect app dir (repo-root vs ./site)
run: |
set -euo pipefail
source /tmp/proposer.env
[[ "${SKIP:-0}" != "1" ]] || { echo " skipped"; exit 0; }
APP_DIR="."
if [[ -d "site" && -f "site/package.json" ]]; then
APP_DIR="site"
fi
echo "APP_DIR=$APP_DIR" >> /tmp/proposer.env
echo "✅ APP_DIR=$APP_DIR"
ls -la "$APP_DIR" | sed -n '1,120p'
test -f "$APP_DIR/package.json" || { echo "❌ package.json missing in APP_DIR=$APP_DIR"; exit 1; }
test -d "$APP_DIR/scripts" || { echo "❌ scripts/ missing in APP_DIR=$APP_DIR"; exit 1; }
- name: NPM harden (reduce flakiness)
- name: NPM harden
run: |
set -euo pipefail
source /tmp/proposer.env
[[ "${SKIP:-0}" != "1" ]] || exit 0
cd "$APP_DIR"
npm config set fetch-retries 5
npm config set fetch-retry-mintimeout 20000
npm config set fetch-retry-maxtimeout 120000
npm config set registry https://registry.npmjs.org
- name: Install deps (APP_DIR)
- name: Install deps
run: |
set -euo pipefail
source /tmp/proposer.env
[[ "${SKIP:-0}" != "1" ]] || { echo " skipped"; exit 0; }
[[ "${SKIP:-0}" != "1" ]] || exit 0
cd "$APP_DIR"
npm ci --no-audit --no-fund
- name: Build dist baseline (APP_DIR)
- name: Build dist baseline
run: |
set -euo pipefail
source /tmp/proposer.env
[[ "${SKIP:-0}" != "1" ]] || { echo " skipped"; exit 0; }
[[ "${SKIP:-0}" != "1" ]] || exit 0
cd "$APP_DIR"
npm run build
- name: Apply ticket (alias + commit) on bot branch
- name: Apply proposer batch on bot branch
continue-on-error: true
env:
FORGE_TOKEN: ${{ secrets.FORGE_TOKEN }}
BOT_GIT_NAME: ${{ secrets.BOT_GIT_NAME }}
BOT_GIT_EMAIL: ${{ secrets.BOT_GIT_EMAIL }}
FORGE_API: ${{ vars.FORGE_API || vars.FORGE_BASE }}
run: |
set -euo pipefail
source /tmp/proposer.env
[[ "${SKIP:-0}" != "1" ]] || { echo " skipped"; exit 0; }
[[ "${SKIP:-0}" != "1" ]] || { echo "Skipped"; exit 0; }
git config user.name "${BOT_GIT_NAME:-archicratie-bot}"
git config user.name "${BOT_GIT_NAME:-archicratie-bot}"
git config user.email "${BOT_GIT_EMAIL:-bot@archicratie.local}"
START_SHA="$(git rev-parse HEAD)"
TS="$(date -u +%Y%m%d-%H%M%S)"
BR="bot/proposer-${ISSUE_NUMBER}-${TS}"
BR="$BATCH_BRANCH"
echo "BRANCH=$BR" >> /tmp/proposer.env
git checkout -b "$BR"
export GITEA_OWNER="$OWNER"
export GITEA_REPO="$REPO"
export FORGE_BASE="$API_BASE"
export FORGE_API="$API_BASE"
LOG="/tmp/proposer-apply.log"
set +e
(cd "$APP_DIR" && node scripts/apply-ticket.mjs "$ISSUE_NUMBER" --alias --commit) >"$LOG" 2>&1
RC=$?
set -e
: > "$LOG"
RC=0
FAILED_ISSUE=""
for ISSUE in $TARGET_ISSUES; do
echo "" >> "$LOG"
echo "== ticket #$ISSUE ==" >> "$LOG"
set +e
(cd "$APP_DIR" && node scripts/apply-ticket.mjs "$ISSUE" --alias --commit) >> "$LOG" 2>&1
STEP_RC=$?
set -e
if [[ "$STEP_RC" -ne 0 ]]; then
RC="$STEP_RC"
FAILED_ISSUE="$ISSUE"
break
fi
done
echo "APPLY_RC=$RC" >> /tmp/proposer.env
echo "FAILED_ISSUE=${FAILED_ISSUE}" >> /tmp/proposer.env
echo "== apply log (tail) =="
tail -n 200 "$LOG" || true
echo "Apply log (tail):"
tail -n 220 "$LOG" || true
END_SHA="$(git rev-parse HEAD)"
if [[ "$RC" -ne 0 ]]; then
echo "NOOP=0" >> /tmp/proposer.env
exit 0
@@ -313,7 +501,34 @@ jobs:
echo "END_SHA=$END_SHA" >> /tmp/proposer.env
fi
- name: Push bot branch
- name: Rebase bot branch on latest main
continue-on-error: true
run: |
set -euo pipefail
source /tmp/proposer.env || true
[[ "${SKIP:-0}" != "1" ]] || exit 0
[[ "${APPLY_RC:-0}" == "0" ]] || exit 0
[[ "${NOOP:-0}" == "0" ]] || exit 0
LOG="/tmp/proposer-apply.log"
git fetch origin "$DEFAULT_BRANCH"
set +e
git rebase "origin/$DEFAULT_BRANCH" >> "$LOG" 2>&1
RC=$?
set -e
if [[ "$RC" -ne 0 ]]; then
git rebase --abort || true
fi
echo "REBASE_RC=$RC" >> /tmp/proposer.env
echo "Rebase log (tail):"
tail -n 220 "$LOG" || true
- name: Comment issues on failure
if: ${{ always() }}
env:
FORGE_TOKEN: ${{ secrets.FORGE_TOKEN }}
@@ -322,9 +537,86 @@ jobs:
source /tmp/proposer.env || true
[[ "${SKIP:-0}" != "1" ]] || exit 0
[[ "${APPLY_RC:-0}" == "0" ]] || { echo " apply failed -> skip push"; exit 0; }
[[ "${NOOP:-0}" == "0" ]] || { echo " no-op -> skip push"; exit 0; }
[[ -n "${BRANCH:-}" ]] || { echo " BRANCH unset -> skip push"; exit 0; }
APPLY_RC="${APPLY_RC:-0}"
REBASE_RC="${REBASE_RC:-0}"
if [[ "$APPLY_RC" == "0" && "$REBASE_RC" == "0" ]]; then
echo "No failure detected"
exit 0
fi
test -n "${FORGE_TOKEN:-}" || exit 0
if [[ -f /tmp/proposer-apply.log ]]; then
BODY="$(tail -n 160 /tmp/proposer-apply.log | sed 's/\r$//')"
else
BODY="(no proposer log found)"
fi
export BODY APPLY_RC REBASE_RC FAILED_ISSUE
if [[ "$APPLY_RC" != "0" ]]; then
export FAILURE_KIND="apply"
else
export FAILURE_KIND="rebase"
fi
node --input-type=module - <<'NODE' > /tmp/proposer.failure.comment.json
const body = process.env.BODY || "";
const applyRc = process.env.APPLY_RC || "0";
const rebaseRc = process.env.REBASE_RC || "0";
const failedIssue = process.env.FAILED_ISSUE || "unknown";
const kind = process.env.FAILURE_KIND || "apply";
const msg =
kind === "apply"
? `Batch proposer failed on ticket #${failedIssue} (rc=${applyRc}).\n\n\`\`\`\n${body}\n\`\`\`\n`
: `Rebase proposer failed on main (rc=${rebaseRc}).\n\n\`\`\`\n${body}\n\`\`\`\n`;
process.stdout.write(JSON.stringify({ body: msg }));
NODE
for ISSUE in ${TARGET_ISSUES:-}; do
curl -fsS -X POST \
-H "Authorization: token $FORGE_TOKEN" \
-H "Content-Type: application/json" \
"$API_BASE/api/v1/repos/$OWNER/$REPO/issues/$ISSUE/comments" \
--data-binary @/tmp/proposer.failure.comment.json || true
done
- name: Late guard against duplicate batch materialization
run: |
set -euo pipefail
source /tmp/proposer.env || true
[[ "${SKIP:-0}" != "1" ]] || exit 0
[[ "${APPLY_RC:-0}" == "0" ]] || exit 0
[[ "${REBASE_RC:-0}" == "0" ]] || exit 0
[[ "${NOOP:-0}" == "0" ]] || exit 0
REMOTE_SHA="$(git ls-remote --heads origin "$BATCH_BRANCH" | awk 'NR==1 {print $1}')"
if [[ -n "${REMOTE_SHA:-}" && "${REMOTE_SHA}" != "${END_SHA:-}" ]]; then
echo 'SKIP=1' >> /tmp/proposer.env
echo 'SKIP_REASON="batch_branch_already_materialized"' >> /tmp/proposer.env
echo "OPEN_PR_BRANCH=${BATCH_BRANCH}" >> /tmp/proposer.env
echo "Remote batch branch already exists at $REMOTE_SHA -> skip duplicate push/PR"
exit 0
fi
echo "Late guard OK"
- name: Push bot branch
if: ${{ always() }}
env:
FORGE_TOKEN: ${{ secrets.FORGE_TOKEN }}
run: |
set -euo pipefail
source /tmp/proposer.env || true
[[ "${SKIP:-0}" != "1" ]] || exit 0
[[ "${APPLY_RC:-0}" == "0" ]] || { echo "Apply failed -> skip push"; exit 0; }
[[ "${REBASE_RC:-0}" == "0" ]] || { echo "Rebase failed -> skip push"; exit 0; }
[[ "${NOOP:-0}" == "0" ]] || { echo "No-op -> skip push"; exit 0; }
[[ -n "${BRANCH:-}" ]] || { echo "BRANCH unset -> skip push"; exit 0; }
AUTH_URL="$(node --input-type=module -e '
const [clone, tok] = process.argv.slice(1);
@@ -337,7 +629,7 @@ jobs:
git remote set-url origin "$AUTH_URL"
git push -u origin "$BRANCH"
- name: Create PR + comment issue
- name: Create PR + comment issues + close issues
if: ${{ always() }}
env:
FORGE_TOKEN: ${{ secrets.FORGE_TOKEN }}
@@ -345,51 +637,152 @@ jobs:
set -euo pipefail
source /tmp/proposer.env || true
[[ "${SKIP:-0}" != "1" ]] || exit 0
[[ "${APPLY_RC:-0}" == "0" ]] || exit 0
[[ "${REBASE_RC:-0}" == "0" ]] || exit 0
[[ "${NOOP:-0}" == "0" ]] || exit 0
[[ -n "${BRANCH:-}" ]] || { echo " BRANCH unset -> skip PR"; exit 0; }
[[ -n "${BRANCH:-}" ]] || { echo "BRANCH unset -> skip PR"; exit 0; }
PR_TITLE="proposer: apply ticket #${ISSUE_NUMBER}"
PR_BODY="PR auto depuis ticket #${ISSUE_NUMBER} (state/approved).\n\n- Branche: ${BRANCH}\n- Commit: ${END_SHA:-unknown}\n\nMerge si CI OK."
test -n "${FORGE_TOKEN:-}" || { echo "Missing FORGE_TOKEN"; exit 1; }
PR_PAYLOAD="$(node --input-type=module -e '
const [title, body, base, head] = process.argv.slice(1);
console.log(JSON.stringify({ title, body, base, head, allow_maintainer_edit: true }));
' "$PR_TITLE" "$PR_BODY" "$DEFAULT_BRANCH" "${OWNER}:${BRANCH}")"
OPEN_PRS_JSON="$(curl -fsS \
-H "Authorization: token $FORGE_TOKEN" \
-H "Accept: application/json" \
"$API_BASE/api/v1/repos/$OWNER/$REPO/pulls?state=open&limit=100")"
export OPEN_PRS_JSON BATCH_BRANCH BATCH_KEY
EXISTING_PR_URL="$(node --input-type=module -e '
const pulls = JSON.parse(process.env.OPEN_PRS_JSON || "[]");
const branch = String(process.env.BATCH_BRANCH || "");
const key = String(process.env.BATCH_KEY || "");
const current = Array.isArray(pulls)
? pulls.find((pr) => {
const ref = String(pr?.head?.ref || "");
const body = String(pr?.body || "");
return (branch && ref === branch) || (key && body.includes(`Batch-Key: ${key}`));
})
: null;
process.stdout.write(current ? String(current.html_url || current.url || "") : "");
')"
if [[ -n "${EXISTING_PR_URL:-}" ]]; then
echo "PR already exists for this batch: $EXISTING_PR_URL"
exit 0
fi
if [[ "${TARGET_COUNT:-0}" == "1" ]]; then
PR_TITLE="proposer: apply ticket #${TARGET_PRIMARY_ISSUE}"
else
PR_TITLE="proposer: apply ${TARGET_COUNT} tickets on ${TARGET_CHEMIN}"
fi
export PR_TITLE TARGET_CHEMIN TARGET_ISSUES BRANCH END_SHA DEFAULT_BRANCH OWNER BATCH_KEY
node --input-type=module -e '
import fs from "node:fs";
const issues = String(process.env.TARGET_ISSUES || "")
.trim()
.split(/\s+/)
.filter(Boolean);
const body = [
`PR auto depuis ticket${issues.length > 1 ? "s" : ""} ${issues.map((n) => `#${n}`).join(", ")} (state/approved).`,
"",
`- Chemin: ${process.env.TARGET_CHEMIN || "(inconnu)"}`,
"- Tickets:",
...issues.map((n) => ` - #${n}`),
`- Branche: ${process.env.BRANCH || ""}`,
`- Commit: ${process.env.END_SHA || "unknown"}`,
`- Batch-Key: ${process.env.BATCH_KEY || ""}`,
"",
"Merge si CI OK."
].join("\n");
fs.writeFileSync(
"/tmp/proposer.pr.json",
JSON.stringify({
title: process.env.PR_TITLE || "proposer: apply tickets",
body,
base: process.env.DEFAULT_BRANCH || "main",
head: `${process.env.OWNER}:${process.env.BRANCH}`,
allow_maintainer_edit: true
})
);
'
PR_JSON="$(curl -fsS -X POST \
-H "Authorization: token $FORGE_TOKEN" \
-H "Content-Type: application/json" \
"$API_BASE/api/v1/repos/$OWNER/$REPO/pulls" \
--data-binary "$PR_PAYLOAD")"
--data-binary @/tmp/proposer.pr.json)"
PR_URL="$(node --input-type=module -e '
const pr = JSON.parse(process.argv[1] || "{}");
console.log(pr.html_url || pr.url || "");
' "$PR_JSON")"
PR_URL="$(node --input-type=module -e 'const pr = JSON.parse(process.argv[1] || "{}"); console.log(pr.html_url || pr.url || "");' "$PR_JSON")"
test -n "$PR_URL" || { echo "❌ PR URL missing. Raw: $PR_JSON"; exit 1; }
test -n "$PR_URL" || {
echo "PR URL missing. Raw: $PR_JSON"
exit 1
}
MSG="✅ PR Proposer créée pour ticket #${ISSUE_NUMBER} : ${PR_URL}"
C_PAYLOAD="$(node --input-type=module -e 'console.log(JSON.stringify({body: process.argv[1]||""}))' "$MSG")"
for ISSUE in $TARGET_ISSUES; do
export ISSUE PR_URL
curl -fsS -X POST \
-H "Authorization: token $FORGE_TOKEN" \
-H "Content-Type: application/json" \
"$API_BASE/api/v1/repos/$OWNER/$REPO/issues/$ISSUE_NUMBER/comments" \
--data-binary "$C_PAYLOAD"
node --input-type=module -e '
import fs from "node:fs";
- name: Finalize (fail job if apply failed)
const issue = process.env.ISSUE || "";
const url = process.env.PR_URL || "";
const msg =
`PR proposer creee pour le ticket #${issue} : ${url}\n\n` +
`Le ticket est cloture automatiquement ; la discussion peut se poursuivre dans la PR.`;
fs.writeFileSync(
"/tmp/proposer.issue.close.comment.json",
JSON.stringify({ body: msg })
);
'
curl -fsS -X POST \
-H "Authorization: token $FORGE_TOKEN" \
-H "Content-Type: application/json" \
"$API_BASE/api/v1/repos/$OWNER/$REPO/issues/$ISSUE/comments" \
--data-binary @/tmp/proposer.issue.close.comment.json
curl -fsS -X PATCH \
-H "Authorization: token $FORGE_TOKEN" \
-H "Content-Type: application/json" \
"$API_BASE/api/v1/repos/$OWNER/$REPO/issues/$ISSUE" \
--data-binary '{"state":"closed"}'
ISSUE_STATE="$(curl -fsS \
-H "Authorization: token $FORGE_TOKEN" \
-H "Accept: application/json" \
"$API_BASE/api/v1/repos/$OWNER/$REPO/issues/$ISSUE" | \
node --input-type=module -e 'let s=""; process.stdin.on("data", d => s += d); process.stdin.on("end", () => { const j = JSON.parse(s || "{}"); process.stdout.write(String(j.state || "")); });')"
[[ "$ISSUE_STATE" == "closed" ]] || {
echo "Issue #$ISSUE is still not closed after PATCH"
exit 1
}
done
echo "PR: $PR_URL"
- name: Finalize
if: ${{ always() }}
run: |
set -euo pipefail
source /tmp/proposer.env || true
[[ "${SKIP:-0}" != "1" ]] || exit 0
RC="${APPLY_RC:-0}"
if [[ "$RC" != "0" ]]; then
echo "❌ apply failed (rc=$RC)"
exit "$RC"
if [[ "${APPLY_RC:-0}" != "0" ]]; then
echo "Apply failed (rc=${APPLY_RC})"
exit "${APPLY_RC}"
fi
echo "✅ apply ok"
if [[ "${REBASE_RC:-0}" != "0" ]]; then
echo "Rebase failed (rc=${REBASE_RC})"
exit "${REBASE_RC}"
fi
echo "Proposer queue OK"

4
.gitignore vendored
View File

@@ -28,3 +28,7 @@ public/favicon_io.zip
# macOS
.DS_Store
# local temp workspace
.tmp/
public/__ops/health.json

View File

@@ -86,6 +86,10 @@ function rehypeDedupeIds() {
}
export default defineConfig({
legacy: {
collectionsBackwardsCompat: true,
},
output: "static",
trailingSlash: "always",
site: process.env.PUBLIC_SITE ?? "http://localhost:4321",

View File

@@ -0,0 +1,15 @@
{
"accepted_resets": {
"archicrat-ia/prologue/index.html": "Reset intentionnel des ancres après réimport DOCX et révision substantielle du prologue depuis la source officielle. Site neuf, sans annotations ni compatibilité descendante à préserver.",
"archicrat-ia/chapitre-1/index.html": "Reset intentionnel des ancres après révision doctrinale substantielle du chapitre 1. Site neuf, sans annotations ni compatibilité descendante à préserver.",
"archicrat-ia/chapitre-2/index.html": "Reset intentionnel des ancres après restauration doctrinale substantielle du chapitre 2 depuis la bonne source officielle. Site neuf, sans annotations ni compatibilité descendante à préserver.",
"archicrat-ia/chapitre-3/index.html": "Reset intentionnel des ancres après réimport DOCX et perfectionnement doctrinal substantiel du chapitre 3 depuis la source officielle. Site neuf, sans annotations ni compatibilité descendante à préserver.",
"archicrat-ia/chapitre-4/index.html": "Reset intentionnel des ancres après réimport DOCX et stabilisation doctrinale substantielle du chapitre 4 depuis la source officielle. Site neuf, sans annotations ni compatibilité descendante à préserver.",
"archicrat-ia/chapitre-5/index.html": "Reset intentionnel des ancres après réimport DOCX et stabilisation doctrinale substantielle du chapitre 5 depuis la source officielle. Site neuf, sans annotations ni compatibilité descendante à préserver.",
"archicrat-ia/conclusion/index.html": "Reset intentionnel des ancres après réimport DOCX et révision substantielle de la conclusion depuis la source officielle. Site neuf, sans annotations ni compatibilité descendante à préserver.",
"commencer/index.html": "Reset intentionnel des ancres après transformation de la page commencer en page dentrée éditoriale sous SiteLayout, sans instrumentation de lecture longue à préserver."
},
"accepted_prefixes": {
"glossaire/": "Reset intentionnel des ancres après révision substantielle des fiches paradigmes et doctrines du glossaire. Site neuf, sans annotations ni compatibilité descendante à préserver."
}
}

View File

@@ -0,0 +1,152 @@
# Gouvernance du graphe du glossaire
## Lois actuelles vérifiées automatiquement
- Aucune fiche sans navigation.
- Aucun `primaryNext` mort.
- Aucun cycle direct.
- Aucun `primaryNext` vers soi-même.
- Aucune famille sans defaults.
- Aucun hub `primaryNext` au-dessus du seuil 5.
- Les paths effectifs tiennent compte des defaults famille.
## Liens `primaryNext` à surveiller qualitativement
- `contractualisme-hobbesien → droit-naturel-et-propriete`
- `exception-souveraine → droit-naturel-et-propriete`
- `regime-de-co-viabilite → gouvernance-des-communs`
- `memoire-symbolique-et-instantaneite-computationnelle → meta-regime`
- `scene-darchicration → co-viabilite`
## Critère de décision
Un `primaryNext` est bon sil produit au moins lun des effets suivants :
- déplier la notion ;
- changer de niveau ;
- rendre opératoire ;
- mettre en tension ;
- concrétiser.
Un `primaryNext` est faible sil est seulement voisin, décoratif ou encyclopédique.
---
## Dynamique réelle du graphe (niveau avancé)
### 1. Attracteurs
Laudit de convergence effective met en évidence des nœuds fortement attractifs :
* dispositifs méthodologiques (audit, cartographie)
* concepts fondamentaux (co-viabilité, tension, archicration)
Ces nœuds structurent la circulation globale du glossaire.
---
### 2. Bassins de convergence
Le graphe ne se distribue pas uniformément.
Il tend à sorganiser en bassins :
* bassin conceptuel central
* bassin méthodologique
* bassins secondaires (paradigmes, pathologies)
Un bassin est défini comme un ensemble de parcours convergeant vers un même noyau.
---
### 3. Risque de surconvergence
Lorsque trop de parcours convergent vers les mêmes nœuds :
* les parcours deviennent redondants
* la navigation perd en différenciation
* lexpérience de lecture devient monotone
Ce phénomène ne constitue pas une erreur technique, mais un déséquilibre structurel.
---
### 4. Bifurcation effective
Les nœuds à forte bifurcation jouent un rôle clé :
* ils ouvrent des trajectoires multiples
* ils structurent la diversité des parcours
Ils doivent être préservés comme points dexpansion.
---
### 5. Principe de régulation avancée
Lobjectif nest pas de supprimer les attracteurs, mais de :
* limiter leur domination excessive
* maintenir plusieurs bassins actifs
* garantir des trajectoires réellement distinctes
---
### 6. Règle pratique
Avant toute modification :
* vérifier limpact sur les convergences effectives
* éviter dajouter un lien vers un nœud déjà dominant
* privilégier louverture de nouvelles zones de circulation
---
### 7. Nature du système
Le glossaire ne doit pas être compris comme :
* un index
* ni un arbre
mais comme :
→ un graphe dynamique de circulation conceptuelle
dont la structure influence directement la pensée du lecteur.
# la première désaturation a déplacé les attracteurs vers scene-depreuve, journal-de-justification, regime-de-co-viabilite
## Attracteurs structurels du graphe
Certains nœuds présentent une forte convergence effective. Cela ne constitue pas un défaut, mais une propriété structurelle du modèle.
### Attracteurs assumés
- scene-depreuve (scène)
→ cœur opératoire de mise à lépreuve des régulations
→ point de passage légitime pour une grande partie des parcours
- audit-archicratique (dispositif méthodologique)
→ point dentrée opératoire vers lanalyse des régulations
- cartographie-des-scenes-manquantes (dispositif méthodologique)
→ prolongement naturel de laudit vers lidentification des lacunes
- co-viabilite (concept fondamental)
→ horizon de stabilisation des tensions
### Principe
Un attracteur est acceptable si :
- il correspond à un changement de niveau (concept → scène → dispositif)
- il rend opératoire une notion
- il constitue un passage obligé théoriquement justifié
Un attracteur devient problématique sil :
- absorbe sans transformation
- remplace une articulation par une répétition

File diff suppressed because it is too large Load Diff

View File

@@ -1,51 +1,147 @@
# START-HERE — Archicratie / Édition Web (v2)
> Onboarding + exploitation “nickel chrome” (DEV → Gitea → CI → Release → Blue/Green → Edge/SSO)
# START-HERE — Archicratie / Édition Web (v3)
> Onboarding + exploitation “nickel chrome” (DEV → Gitea → CI → Release → Blue/Green → Edge/SSO → localhost auto-sync)
## 0) TL;DR (la règle dor)
- **Gitea = source canonique**.
- **main est protégé** : toute modification passe par **branche → PR → CI → merge**.
- **Le NAS nest pas la source** : si un hotfix est fait sur NAS, on **backporte** via PR immédiatement.
- **Le site est statique Astro** : la prod sert du HTML (nginx), laccès est contrôlé au niveau reverse-proxy (Traefik + Authelia).
- **Gitea = source canonique**.
- **`main` est protégée** : toute modification passe par **branche → PR → CI → merge**.
- **Le NAS nest pas la source** : si un hotfix est fait sur NAS, il doit être **backporté immédiatement** via PR.
- **Le site est statique Astro** : la prod sert du HTML via nginx ; laccès est contrôlé au niveau reverse-proxy (Traefik + Authelia).
- **Le localhost automatique nest pas le repo de dev** : il tourne depuis un **worktree dédié**, synchronisé sur `origin/main`.
---
## 1) Architecture mentale (ultra simple)
- **DEV (Mac Studio)** : édition + tests + commit + push
- **Gitea** : dépôt canon + PR + CI (CI.yaml)
- **NAS (DS220+)** : déploiement “blue/green”
- `web_blue` (staging upstream) → `127.0.0.1:8081`
- `web_green` (live upstream)`127.0.0.1:8082`
- **Edge (Traefik)** : route les hosts
- **DEV canonique (Mac Studio)** : édition, dev, tests, commits, pushes
- **Gitea** : dépôt canonique, PR, CI, workflows éditoriaux
- **NAS (DS220+)** : déploiement blue/green
- `web_blue` → staging upstream → `127.0.0.1:8081`
- `web_green` → live upstream → `127.0.0.1:8082`
- **Edge (Traefik)** : routage des hosts
- `staging.archicratie...` → 8081
- `archicratie...` → 8082
- **Authelia** devant, via middleware `chain-auth@file`
- **Localhost auto-sync**
- un **repo canonique de développement**
- un **worktree localhost miroir de `origin/main`**
- un **agent de sync**
- un **agent Astro**
---
## 2) Répertoires & conventions (repo)
### 2.1 Contenu canon (édition)
- `src/content/**` : contenu MD / MDX canon (Astro content collections)
- `src/pages/**` : routes Astro (index, [...slug], etc.)
- `src/components/**` : composants UI (SiteNav, TOC, SidePanel, etc.)
- `src/layouts/**` : layouts (EditionLayout, SiteLayout)
- `src/content/**` : contenu MD / MDX canon
- `src/pages/**` : routes Astro
- `src/components/**` : composants UI
- `src/layouts/**` : layouts
- `src/styles/**` : CSS global
### 2.2 Annotations (pré-Édition “tickets”)
- `src/annotations/<workKey>/<slug>.yml`
- Exemple : `src/annotations/archicrat-ia/prologue.yml`
- Objectif : stocker “Références / Médias / Commentaires” par page et par paragraphe (`p-...`).
- Exemple :
`src/annotations/archicrat-ia/prologue.yml`
Objectif :
stocker “Références / Médias / Commentaires” par page et par paragraphe (`p-...`).
### 2.3 Scripts (tooling / build)
- `scripts/inject-anchor-aliases.mjs` : injection aliases dans dist
- `scripts/dedupe-ids-dist.mjs` : retire IDs dupliqués dans dist
- `scripts/build-para-index.mjs` : index paragraphes (postbuild / predev)
- `scripts/build-annotations-index.mjs` : index annotations (postbuild / predev)
- `scripts/check-anchors.mjs` : contrat stabilité dancres (CI)
- `scripts/inject-anchor-aliases.mjs` : injection aliases dans `dist`
- `scripts/dedupe-ids-dist.mjs` : retrait IDs dupliqués
- `scripts/build-para-index.mjs` : index paragraphes
- `scripts/build-annotations-index.mjs` : index annotations
- `scripts/check-anchors.mjs` : contrat stabilité dancres
- `scripts/check-annotations*.mjs` : sanity YAML + médias
> Important : les scripts sont **partie intégrante** de la stabilité (IDs/ancres/indexation).
> On évite “la magie” : tout est scripté + vérifié.
> Important : ces scripts ne sont pas accessoires.
> Ils font partie du contrat de stabilité éditoriale.
## 3) Workflow Git “pro” (main protégé)
### 3.1 Cycle standard (toute modif)
en bash :
---
## 3) Les trois espaces à ne jamais confondre
### 3.1 Repo canonique de développement
```text
/Volumes/FunIA/dev/archicratie-edition/site
```
Usage :
- développement normal
- branches de travail
- nouvelles fonctionnalités
- corrections manuelles
- commits
- pushes
- PR
### 3.2 Worktree localhost miroir de `main`
```text
/Users/s-funia/ops-local/archicratie/localhost-worktree
```
Branche attendue :
```text
localhost-sync
```
Usage :
- exécuter le localhost automatique
- refléter `origin/main`
- ne jamais servir despace de développement
### 3.3 Ops local hors repo
```text
/Users/s-funia/ops-local/archicratie
```
Usage :
- scripts dexploitation
- état
- logs
- automatisation `launchd`
---
## 4) Pourquoi cette séparation existe
Il ne faut pas utiliser le repo canonique de développement comme serveur localhost permanent.
Sinon on mélange :
- travail en cours
- commits non poussés
- essais temporaires
- état réellement publié sur `main`
Le résultat devient ambigu.
La séparation retenue est donc :
- **repo canonique** = espace de développement
- **worktree localhost** = miroir exécutable de `origin/main`
- **ops local** = scripts et automatisation
Cest cette séparation qui rend le système lisible, robuste et opérable.
---
## 5) Workflow Git “pro” (main protégée)
### 5.1 Cycle standard (toute modif)
```bash
git checkout main
git pull --ff-only
@@ -60,37 +156,48 @@ npm run test:anchors
git add -A
git commit -m "xxx: description claire"
git push -u origin "$BR"
```
### 3.2 PR vers main
### 5.2 PR vers `main`
Ouvrir PR dans Gitea
- ouvrir une PR dans Gitea
- attendre une CI verte
- merger
- laisser les workflows faire le reste
CI doit être verte
### 5.3 Cas spécial : hotfix prod (NAS)
Merge PR → main
On peut faire un hotfix durgence côté NAS si nécessaire.
### 3.3 Cas spécial : hotfix prod (NAS)
Mais létat final doit toujours revenir dans Gitea :
On peut faire un hotfix “urgence” en prod/staging si nécessaire…
- branche
- PR
- CI
- merge
MAIS : létat final doit revenir dans Gitea : branche → PR → CI → merge.
---
## 4) Déploiement (NAS) — principe
### 4.1 Release pack
## 6) Déploiement (NAS) — principe
On génère un pack “reproductible” (source + config + scripts) puis on déploie.
### 6.1 Release pack
### 4.2 Blue/Green
On génère un pack reproductible, puis on déploie.
web_blue = staging upstream (8081)
### 6.2 Blue/Green
web_green = live upstream (8082)
- `web_blue` = staging (`8081`)
- `web_green` = live (`8082`)
Edge Traefik sélectionne quel host pointe vers quel upstream.
Le reverse-proxy choisit lupstream selon le host demandé.
## 5) Check-list “≤ 10 commandes” (happy path complet)
### 5.1 DEV (Mac)
---
## 7) Happy path complet
### 7.1 DEV (Mac)
```bash
git checkout main && git pull --ff-only
git checkout -b chore/my-change-$(date +%Y%m%d)
@@ -99,55 +206,258 @@ rm -rf .astro node_modules/.vite dist
npm run build
npm run test:anchors
npm run dev
```
### 5.2 Push + PR
### 7.2 Push + PR
```bash
git add -A
git commit -m "chore: my change"
git push -u origin chore/my-change-YYYYMMDD
# ouvrir PR dans Gitea
```
### 5.3 Déploiement NAS (résumé)
Puis ouvrir la PR dans Gitea.
Voir docs/runbooks/DEPLOY-BLUE-GREEN.md.
### 7.3 Déploiement NAS
## 6) Problèmes “classiques” + diagnostic rapide
### 6.1 “Le staging ne ressemble pas au local”
Voir :
# Comparer upstream direct 8081 vs 8082 :
```text
docs/runbooks/DEPLOY-BLUE-GREEN.md
```
---
## 8) Localhost auto-sync — ce quil faut retenir
Le localhost automatique sert à voir **la vérité de `main`**, pas à développer du neuf.
### 8.1 Scripts principaux
#### Script de sync
```text
~/ops-local/archicratie/auto-sync-localhost.sh
```
Rôle :
- fetch `origin/main`
- réaligner le worktree localhost
- lancer `npm ci` si besoin
- redéclencher lagent Astro si nécessaire
#### Script Astro
```text
~/ops-local/archicratie/run-astro-localhost.sh
```
Rôle :
- lancer `astro dev`
- depuis le bon worktree
- avec le bon runtime Node
- sur `127.0.0.1:4321`
> Oui : ce script est nécessaire.
> Il isole proprement le lancement du serveur Astro dans un contexte `launchd` stable.
### 8.2 LaunchAgents
#### Agent sync
```text
~/Library/LaunchAgents/me.archicratie.localhost-sync.plist
```
#### Agent Astro
```text
~/Library/LaunchAgents/me.archicratie.localhost-astro.plist
```
### 8.3 Document de référence
Pour tout le détail dexploitation du localhost automatique, lire :
```text
docs/OPS-LOCALHOST-AUTO-SYNC.md
```
---
## 9) Règle dor : il y a deux usages locaux distincts
### 9.1 Voir ce qui est réellement sur `main`
Utiliser :
```text
http://127.0.0.1:4321
```
Ce localhost doit être considéré comme :
**un miroir local exécutable de `origin/main`**
### 9.2 Développer / tester une nouvelle fonctionnalité
Utiliser le repo canonique :
```bash
cd /Volumes/FunIA/dev/archicratie-edition/site
npm run dev
```
Donc :
- **localhost auto-sync** = vérité de `main`
- **localhost de dev manuel** = expérimentation en cours
Il ne faut pas les confondre.
---
## 10) Ce quil ne faut pas faire
### 10.1 Ne pas développer dans le worktree localhost
Le worktree localhost est piloté automatiquement.
Il peut être :
- réaligné
- nettoyé
- redémarré
Donc :
- pas de commits dedans
- pas de dev feature dedans
- pas dexpérimentation de fond dedans
### 10.2 Ne pas utiliser le repo canonique comme miroir auto-sync
Sinon on mélange :
- espace de dev
- état publié
- serveur local permanent
### 10.3 Ne pas remettre les scripts ops sur un volume externe
Les scripts dops doivent rester sous `HOME`.
Le fait de les mettre sous `/Volumes/...` a déjà provoqué des erreurs du type :
```text
Operation not permitted
```
### 10.4 Ne pas supprimer `run-astro-localhost.sh`
Ce script fait partie de larchitecture actuelle.
Le supprimer reviendrait à réintroduire le flou entre sync Git et exécution dAstro.
---
## 11) Commandes de contrôle essentielles
### 11.1 État global
```bash
~/ops-local/archicratie/doctor-localhost.sh
```
### 11.2 État Git
```bash
git -C ~/ops-local/archicratie/localhost-worktree rev-parse HEAD
git -C /Volumes/FunIA/dev/archicratie-edition/site ls-remote origin refs/heads/main
git -C ~/ops-local/archicratie/localhost-worktree branch --show-current
```
### 11.3 État LaunchAgents
```bash
launchctl print "gui/$(id -u)/me.archicratie.localhost-sync" | sed -n '1,160p'
launchctl print "gui/$(id -u)/me.archicratie.localhost-astro" | sed -n '1,160p'
```
### 11.4 État logs
```bash
tail -n 120 ~/ops-local/archicratie/logs/auto-sync-localhost.log
tail -n 120 ~/ops-local/archicratie/logs/astro-localhost.log
tail -n 80 ~/Library/Logs/archicratie-localhost-sync.err.log
tail -n 80 ~/Library/Logs/archicratie-localhost-astro.err.log
```
### 11.5 État serveur
```bash
lsof -nP -iTCP:4321 -sTCP:LISTEN
PID="$(lsof -tiTCP:4321 -sTCP:LISTEN | head -n 1)"
ps -p "$PID" -o pid=,command=
lsof -a -p "$PID" -d cwd
```
### 11.6 Vérification contenu
```bash
curl -s http://127.0.0.1:4321/archicrat-ia/prologue/ | grep -n "taxe Zucman"
```
---
## 12) Problèmes classiques + diagnostic
### 12.1 “Le staging ne ressemble pas au local”
Comparer les upstream directs :
```bash
curl -sS http://127.0.0.1:8081/ | head -n 2
curl -sS http://127.0.0.1:8082/ | head -n 2
```
# Vérifier quel routeur edge répond (header diag) :
Vérifier le routeur edge :
```bash
curl -sSI -H 'Host: staging.archicratie.trans-hands.synology.me' http://127.0.0.1:18080/ \
| grep -iE 'HTTP/|location:|x-archi-router'
```
# Lire docs/runbooks/EDGE-TRAEFIK.md.
Voir :
### 6.2 Canonical incorrect (localhost en prod)
```text
docs/runbooks/EDGE-TRAEFIK.md
```
Cause racine : site dans Astro = PUBLIC_SITE non injecté au build.
### 12.2 Canonical incorrect
Fix canonique : voir docs/runbooks/ENV-PUBLIC_SITE.md.
Cause probable : `PUBLIC_SITE` mal injecté au build.
Test :
```bash
curl -sS http://127.0.0.1:8082/ | grep -oE 'rel="canonical" href="[^"]+"' | head -1
```
### 6.3 Contrat “anchors” en échec après migration dURL
Voir :
Quand on déplace des routes (ex: /archicratie/archicrat-ia/* → /archicrat-ia/*), le test dancres peut échouer même si les IDs nont pas changé, car les pages ont changé de chemin.
```text
docs/runbooks/ENV-PUBLIC_SITE.md
```
# Procédure safe :
### 12.3 Contrat anchors en échec après migration dURL
Backup baseline :
Procédure safe :
```bash
cp -a tests/anchors-baseline.json /tmp/anchors-baseline.json.bak.$(date +%F-%H%M%S)
Mettre à jour les clés (chemins) sans toucher aux IDs :
node - <<'NODE'
import fs from 'fs';
const p='tests/anchors-baseline.json';
@@ -161,16 +471,213 @@ fs.writeFileSync(p, JSON.stringify(out,null,2)+'\n');
console.log('updated keys:', Object.keys(j).length, '->', Object.keys(out).length);
NODE
Re-run :
npm run test:anchors
```
## 7) Ce que létape 9 doit faire (orientation)
### 12.4 “Le localhost auto-sync ne montre pas les dernières modifs”
Stabiliser le pipeline “tickets → YAML annotations”
Commande réflexe :
Formaliser la spec YAML + merge + anti-doublon (voir docs/EDITORIAL-ANNOTATIONS-SPEC.md)
```bash
~/ops-local/archicratie/doctor-localhost.sh
```
Durcir lonboarding (ce START-HERE + runbooks)
Puis :
Éviter les régressions par tests (anchors / annotations / smoke)
```bash
git -C ~/ops-local/archicratie/localhost-worktree rev-parse HEAD
git -C /Volumes/FunIA/dev/archicratie-edition/site ls-remote origin refs/heads/main
```
Si les SHA diffèrent :
- le sync na pas tourné
- ou lagent sync a un problème
### 12.5 “Le SHA est bon mais le contenu web est faux”
Vérifier quel Astro écoute réellement :
```bash
lsof -nP -iTCP:4321 -sTCP:LISTEN
PID="$(lsof -tiTCP:4321 -sTCP:LISTEN | head -n 1)"
ps -p "$PID" -o pid=,command=
lsof -a -p "$PID" -d cwd
```
Attendu :
- commande contenant `astro dev`
- cwd = `~/ops-local/archicratie/localhost-worktree`
### 12.6 Erreur `EBADENGINE`
Cause probable :
- Node 23 utilisé au lieu de Node 22
Résolution :
- forcer `node@22` dans les scripts et les LaunchAgents
### 12.7 Erreur `Operation not permitted`
Cause probable :
- scripts dops placés sous `/Volumes/...`
Résolution :
- garder les scripts sous :
```text
~/ops-local/archicratie
```
### 12.8 Erreur `EPERM` sur `astro.mjs`
Cause probable :
- ancien worktree sur volume externe
- ancien chemin résiduel
- Astro lancé depuis un mauvais emplacement
Résolution :
- worktree localhost sous :
```text
~/ops-local/archicratie/localhost-worktree
```
- scripts cohérents avec ce chemin
- réinstallation propre via :
```bash
~/ops-local/archicratie/install-localhost-sync.sh
```
---
## 13) Redémarrage machine
Après reboot, le comportement attendu est :
1. le LaunchAgent sync se recharge
2. le LaunchAgent Astro se recharge
3. le worktree localhost est réaligné
4. Astro redémarre sur `127.0.0.1:4321`
### Vérification rapide après reboot
```bash
~/ops-local/archicratie/doctor-localhost.sh
```
Si nécessaire :
```bash
~/ops-local/archicratie/install-localhost-sync.sh
```
---
## 14) Procédure de secours manuelle
### Forcer un sync
```bash
~/ops-local/archicratie/auto-sync-localhost.sh
```
### Réinstaller proprement le dispositif local
```bash
~/ops-local/archicratie/install-localhost-sync.sh
```
### Diagnostic complet
```bash
~/ops-local/archicratie/doctor-localhost.sh
```
---
## 15) Décision dexploitation finale
La politique retenue est la suivante :
- **repo canonique** = espace de développement
- **worktree localhost** = miroir automatique de `main`
- **ops sous HOME** = scripts, logs, automation
- **LaunchAgent sync** = réalignement Git
- **LaunchAgent Astro** = exécution stable du serveur local
- **Astro local** = lancé uniquement depuis le worktree localhost
Cette séparation rend le dispositif plus :
- lisible
- robuste
- opérable
- antifragile
---
## 16) Résumé opératoire
### Pour voir la vérité de `main`
Ouvrir :
```text
http://127.0.0.1:4321
```
Le serveur doit provenir de :
```text
/Users/s-funia/ops-local/archicratie/localhost-worktree
```
### Pour développer
Travailler dans :
```text
/Volumes/FunIA/dev/archicratie-edition/site
```
avec les commandes habituelles.
### Pour réparer vite
```bash
~/ops-local/archicratie/doctor-localhost.sh
~/ops-local/archicratie/auto-sync-localhost.sh
```
---
## 17) Mémoire courte
Si un jour plus rien nest clair, repartir de ces commandes :
```bash
~/ops-local/archicratie/doctor-localhost.sh
git -C ~/ops-local/archicratie/localhost-worktree rev-parse HEAD
git -C /Volumes/FunIA/dev/archicratie-edition/site ls-remote origin refs/heads/main
lsof -nP -iTCP:4321 -sTCP:LISTEN
```
Puis lire :
```bash
tail -n 120 ~/ops-local/archicratie/logs/auto-sync-localhost.log
tail -n 120 ~/ops-local/archicratie/logs/astro-localhost.log
```
---
## 18) Statut actuel visé
Quand tout fonctionne correctement :
- le worktree localhost pointe sur le même SHA que `origin/main`
- `astro dev` écoute sur `127.0.0.1:4321`
- son cwd est `~/ops-local/archicratie/localhost-worktree`
- le contenu servi correspond au contenu mergé sur `main`
Cest létat de référence à préserver.

100
docs/graph.dot Normal file
View File

@@ -0,0 +1,100 @@
digraph G {
rankdir="LR";
node [shape=box, style="rounded"];
"agencement-machinique" -> "cratialite";
"arcalite" -> "cratialite";
"archeogenese" -> "meta-regime-archicratique";
"archicratie" -> "arcalite";
"archicration-obliteree" -> "hypercratialite";
"archicration" -> "scene-depreuve";
"archicrations-differentielles-et-formes-hybrides" -> "co-viabilisation";
"archicrations-epistemiques" -> "archicrations-differentielles-et-formes-hybrides";
"archicrations-esthetico-symboliques" -> "archicrations-historiographiques";
"archicrations-guerrieres" -> "archicrations-normativo-politiques";
"archicrations-historiographiques" -> "archicrations-epistemiques";
"archicrations-marchandes" -> "archicrations-techno-logistiques";
"archicrations-normativo-politiques" -> "archicrations-marchandes";
"archicrations-proto-symboliques" -> "archicrations-sacrales-non-etatiques";
"archicrations-sacrales-non-etatiques" -> "archicrations-scripturo-cosmologiques";
"archicrations-scripturo-cosmologiques" -> "archicrations-scripturo-normatives";
"archicrations-scripturo-normatives" -> "archicrations-normativo-politiques";
"archicrations-techno-logistiques" -> "archicrations-differentielles-et-formes-hybrides";
"archicrations-theologiques" -> "archicrations-normativo-politiques";
"archicratisation" -> "co-viabilisation";
"archidiagnostic" -> "cartographie-des-scenes-manquantes";
"audit-archicratique" -> "cartographie-des-scenes-manquantes";
"autarchicratie" -> "autarchicration";
"autarchicration" -> "obliteration-archicratique";
"biopolitique" -> "gouvernementalite-algorithmique";
"budget-scenique" -> "visa-daffectation";
"cartographie-des-scenes-manquantes" -> "scene-manquante";
"co-viabilisation" -> "regime-de-co-viabilite";
"co-viabilite" -> "tension";
"coexistence-ontologique-et-necessite-regulatrice" -> "formes-de-vie-et-cadres-dhabitabilite";
"conatus-et-multitude" -> "configuration-et-interdependance";
"configuration-et-interdependance" -> "transduction-et-individuation";
"contractualisme-hobbesien" -> "droit-naturel-et-propriete";
"cosmopolitique" -> "technodiversite-et-cosmotechnie";
"coupe-circuit-citoyen" -> "droit-au-differe-contradictoire";
"cratialite" -> "archicration";
"cybernetique" -> "gouvernementalite-algorithmique";
"decisionnisme-souverain" -> "exception-souveraine";
"democratie-deliberative" -> "dissensus-politique";
"desarchicration" -> "desarchicratisation";
"desarchicratisation" -> "autarchicratie";
"dissensus-politique" -> "lieu-vide-du-pouvoir";
"domination-legale-rationnelle" -> "democratie-deliberative";
"droit-au-differe-contradictoire" -> "tribunal-de-lalgorithme";
"droit-naturel-et-propriete" -> "volonte-generale";
"egalisation-normative-et-differenciation-singuliere" -> "dissensus-politique";
"exception-souveraine" -> "droit-naturel-et-propriete";
"fait-social-total" -> "configuration-et-interdependance";
"formes-de-vie-et-cadres-dhabitabilite" -> "subsistance-vivante-et-captation-capitalistique";
"gouvernance-des-communs" -> "co-viabilite";
"gouvernementalite-algorithmique" -> "preemption-algorithmique";
"gouvernementalite" -> "biopolitique";
"grammatisation-et-proletarisation-cognitive" -> "pharmacologie-technique";
"habitus-et-violence-symbolique" -> "obliteration-archicratique";
"hyperarcalite" -> "desarchicration";
"hypercratialite" -> "hyperarcalite";
"inertie-sociale-symbolique" -> "habitus-et-violence-symbolique";
"institution-invisible" -> "scene-depreuve";
"journal-de-justification" -> "droit-au-differe-contradictoire";
"liberte-daction-et-regimes-de-securite-algorithmique" -> "preemption-algorithmique";
"lieu-vide-du-pouvoir" -> "visibilite-mediatique-et-reconnaissance-symbolique";
"memoire-symbolique-et-instantaneite-computationnelle" -> "meta-regime";
"meta-regime-archicratique" -> "archicrations-differentielles-et-formes-hybrides";
"meta-regime" -> "meta-regime-archicratique";
"monde-instituable" -> "scene-manquante";
"obliteration-archicratique" -> "archicration-obliteree";
"pensee-complexe" -> "configuration-et-interdependance";
"pharmacologie-technique" -> "technodiversite-et-cosmotechnie";
"pluralite-natalite-action" -> "dissensus-politique";
"preemption-algorithmique" -> "droit-au-differe-contradictoire";
"regime-de-co-viabilite" -> "gouvernance-des-communs";
"regulation-morphogenetique-des-interdependances" -> "transduction-et-individuation";
"regulation-technique-et-legitimation-democratique" -> "tribunal-de-lalgorithme";
"regulations-fondatrices" -> "regulations-incorporees";
"regulations-incorporees" -> "regulations-procedurales";
"regulations-procedurales" -> "regulations-techniques";
"regulations-relationnelles" -> "regime-de-co-viabilite";
"regulations-techniques" -> "regulations-relationnelles";
"resonance-sociale" -> "visibilite-mediatique-et-reconnaissance-symbolique";
"scene-darchicration" -> "co-viabilite";
"scene-depreuve" -> "scene-darchicration";
"scene-empechee" -> "institution-invisible";
"scene-manquante" -> "scene-empechee";
"souverainetes-territoriales-et-interdependances-globales" -> "gouvernance-des-communs";
"subsistance-vivante-et-captation-capitalistique" -> "travail-vivant-et-abstraction-de-la-valeur";
"technodiversite-et-cosmotechnie" -> "regime-de-co-viabilite";
"tension" -> "regime-de-co-viabilite";
"theorie-de-la-justification" -> "journal-de-justification";
"theorie-de-la-resonance" -> "resonance-sociale";
"theorie-de-lacteur-reseau" -> "agencement-machinique";
"transduction-et-individuation" -> "archeogenese";
"travail-vivant-et-abstraction-de-la-valeur" -> "grammatisation-et-proletarisation-cognitive";
"tribunal-de-lalgorithme" -> "budget-scenique";
"visa-daffectation" -> "scene-depreuve";
"visibilite-mediatique-et-reconnaissance-symbolique" -> "cartographie-des-scenes-manquantes";
"volonte-generale" -> "democratie-deliberative";
}

BIN
docs/graph.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 KiB

1565
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -10,10 +10,12 @@
"clean": "rm -rf dist",
"build": "astro build",
"build:clean": "npm run clean && npm run build",
"postbuild": "node scripts/inject-anchor-aliases.mjs && node scripts/dedupe-ids-dist.mjs && node scripts/build-para-index.mjs && node scripts/build-annotations-index.mjs && node scripts/purge-dist-dev-whoami.mjs && npx pagefind --site dist",
"build:search": "pagefind --site dist",
"postbuild": "node scripts/inject-anchor-aliases.mjs && node scripts/dedupe-ids-dist.mjs && node scripts/build-para-index.mjs && node scripts/build-annotations-index.mjs && node scripts/purge-dist-dev-whoami.mjs && npm run build:search",
"import": "node scripts/import-docx.mjs",
"apply:ticket": "node scripts/apply-ticket.mjs",
"audit:dist": "node scripts/audit-dist.mjs",
"audit:glossary": "node scripts/audit-glossary-navigation.mjs",
"build:para-index": "node scripts/build-para-index.mjs",
"build:annotations-index": "node scripts/build-annotations-index.mjs",
"test:aliases": "node scripts/check-anchor-aliases.mjs",
@@ -25,11 +27,11 @@
"ci": "CI=1 npm test"
},
"dependencies": {
"@astrojs/mdx": "^4.3.13",
"astro": "^5.18.0"
"@astrojs/mdx": "^5.0.0",
"astro": "^6.0.2"
},
"devDependencies": {
"@astrojs/sitemap": "^3.7.0",
"@astrojs/sitemap": "^3.7.1",
"mammoth": "^1.11.0",
"pagefind": "^1.4.0",
"rehype-autolink-headings": "^7.1.0",

View File

@@ -9,8 +9,9 @@ import { spawnSync } from "node:child_process";
*
* Conçu pour:
* - prendre un ticket [Correction]/[Fact-check] (issue) avec Chemin + Ancre + Proposition
* - retrouver le bon paragraphe dans le .mdx
* - retrouver le bon paragraphe dans le .mdx/.md
* - remplacer proprement
* - ne JAMAIS toucher au frontmatter
* - optionnel: écrire un alias dancre old->new (build-time) dans src/anchors/anchor-aliases.json
* - optionnel: committer automatiquement
* - optionnel: fermer le ticket (après commit)
@@ -39,7 +40,7 @@ Env (recommandé):
Notes:
- Si dist/<chemin>/index.html est absent, le script lance "npm run build" sauf si --no-build.
- Sauvegarde automatique: <fichier>.bak.issue-<N> (uniquement si on écrit)
- Sauvegarde automatique: .tmp/apply-ticket/<fichier>.bak.issue-<N> (uniquement si on écrit)
- Avec --alias : le script rebuild pour identifier le NOUVEL id, puis écrit l'alias old->new.
- Refuse automatiquement les Pull Requests (PR) : ce ne sont pas des tickets éditoriaux.
`);
@@ -89,6 +90,7 @@ const CWD = process.cwd();
const CONTENT_ROOT = path.join(CWD, "src", "content");
const DIST_ROOT = path.join(CWD, "dist");
const ALIASES_FILE = path.join(CWD, "src", "anchors", "anchor-aliases.json");
const BACKUP_ROOT = path.join(CWD, ".tmp", "apply-ticket");
/* -------------------------- utils texte / matching -------------------------- */
@@ -136,31 +138,26 @@ function scoreText(candidate, targetText) {
let hit = 0;
for (const w of tgtSet) if (blkSet.has(w)) hit++;
// Bonus si un long préfixe ressemble
const tgtNorm = normalizeText(stripMd(targetText));
const blkNorm = normalizeText(stripMd(candidate));
const prefix = tgtNorm.slice(0, Math.min(180, tgtNorm.length));
const prefixBonus = prefix && blkNorm.includes(prefix) ? 1000 : 0;
// Ratio bonus (0..100)
const ratio = hit / Math.max(1, tgtSet.size);
const ratioBonus = Math.round(ratio * 100);
return prefixBonus + hit + ratioBonus;
}
function bestBlockMatchIndex(blocks, targetText) {
let best = { i: -1, score: -1 };
for (let i = 0; i < blocks.length; i++) {
const sc = scoreText(blocks[i], targetText);
if (sc > best.score) best = { i, score: sc };
}
return best;
}
function splitParagraphBlocks(mdxText) {
const raw = String(mdxText ?? "").replace(/\r\n/g, "\n");
return raw.split(/\n{2,}/);
function rankedBlockMatches(blocks, targetText, limit = 5) {
return blocks
.map((b, i) => ({
i,
score: scoreText(b, targetText),
excerpt: stripMd(b).slice(0, 140),
}))
.sort((a, b) => b.score - a.score)
.slice(0, limit);
}
function isLikelyExcerpt(s) {
@@ -172,6 +169,89 @@ function isLikelyExcerpt(s) {
return false;
}
/* --------------------------- frontmatter / structure ------------------------ */
function normalizeNewlines(s) {
return String(s ?? "").replace(/^\uFEFF/, "").replace(/\r\n/g, "\n");
}
function splitMdxFrontmatter(src) {
const text = normalizeNewlines(src);
const m = text.match(/^---\n[\s\S]*?\n---\n?/);
if (!m) {
return {
hasFrontmatter: false,
frontmatter: "",
body: text,
};
}
const frontmatter = m[0];
const body = text.slice(frontmatter.length);
return {
hasFrontmatter: true,
frontmatter,
body,
};
}
function joinMdxFrontmatter(frontmatter, body) {
if (!frontmatter) return String(body ?? "");
return String(frontmatter) + String(body ?? "");
}
function assertFrontmatterIntegrity({ hadFrontmatter, originalFrontmatter, finalText, filePath }) {
if (!hadFrontmatter) return;
const text = normalizeNewlines(finalText);
if (!text.startsWith("---\n")) {
throw new Error(`Frontmatter perdu pendant la mise à jour de ${filePath}`);
}
if (!text.startsWith(originalFrontmatter)) {
throw new Error(`Frontmatter altéré pendant la mise à jour de ${filePath}`);
}
}
function splitParagraphBlocksPreserve(bodyText) {
const text = normalizeNewlines(bodyText);
if (!text) {
return { blocks: [], separators: [] };
}
const blocks = [];
const separators = [];
const re = /(\n{2,})/g;
let last = 0;
let m;
while ((m = re.exec(text))) {
blocks.push(text.slice(last, m.index));
separators.push(m[1]);
last = m.index + m[1].length;
}
blocks.push(text.slice(last));
return { blocks, separators };
}
function joinParagraphBlocksPreserve(blocks, separators) {
if (!Array.isArray(blocks) || blocks.length === 0) return "";
let out = "";
for (let i = 0; i < blocks.length; i++) {
out += blocks[i];
if (i < separators.length) out += separators[i];
}
return out;
}
/* ------------------------------ utils système ------------------------------ */
function run(cmd, args, opts = {}) {
@@ -251,7 +331,9 @@ function pickSection(body, markers) {
.map((m) => ({ m, i: text.toLowerCase().indexOf(m.toLowerCase()) }))
.filter((x) => x.i >= 0)
.sort((a, b) => a.i - b.i)[0];
if (!idx) return "";
const start = idx.i + idx.m.length;
const tail = text.slice(start);
@@ -266,11 +348,13 @@ function pickSection(body, markers) {
"\n## Proposition",
"\n## Problème",
];
let end = tail.length;
for (const s of stops) {
const j = tail.toLowerCase().indexOf(s.toLowerCase());
if (j >= 0 && j < end) end = j;
}
return tail.slice(0, end).trim();
}
@@ -298,8 +382,6 @@ function extractAnchorIdAnywhere(text) {
function extractCheminFromAnyUrl(text) {
const s = String(text || "");
// Exemple: http://localhost:4321/archicratie/prologue/#p-3-xxxx
// ou: /archicratie/prologue/#p-3-xxxx
const m = s.match(/(\/[a-z0-9\-]+\/[a-z0-9\-\/]+\/)#p-\d+-[0-9a-f]{8}/i);
return m ? m[1] : "";
}
@@ -400,7 +482,7 @@ async function fetchIssue({ forgeApiBase, owner, repo, token, issueNum }) {
headers: {
Authorization: `token ${token}`,
Accept: "application/json",
"User-Agent": "archicratie-apply-ticket/2.0",
"User-Agent": "archicratie-apply-ticket/2.1",
},
});
if (!res.ok) {
@@ -416,7 +498,7 @@ async function closeIssue({ forgeApiBase, owner, repo, token, issueNum, comment
Authorization: `token ${token}`,
Accept: "application/json",
"Content-Type": "application/json",
"User-Agent": "archicratie-apply-ticket/2.0",
"User-Agent": "archicratie-apply-ticket/2.1",
};
if (comment) {
@@ -425,7 +507,11 @@ async function closeIssue({ forgeApiBase, owner, repo, token, issueNum, comment
}
const url = `${base}/api/v1/repos/${owner}/${repo}/issues/${issueNum}`;
const res = await fetch(url, { method: "PATCH", headers, body: JSON.stringify({ state: "closed" }) });
const res = await fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify({ state: "closed" }),
});
if (!res.ok) {
const t = await res.text().catch(() => "");
@@ -529,10 +615,9 @@ async function main() {
console.log(`🔎 Fetch ticket #${issueNum} from ${owner}/${repo}`);
const issue = await fetchIssue({ forgeApiBase, owner, repo, token, issueNum });
// Guard PR (Pull Request = "Demande d'ajout" = pas un ticket éditorial)
if (issue?.pull_request) {
console.error(`❌ #${issueNum} est une Pull Request (demande dajout), pas un ticket éditorial.`);
console.error(`➡️ Ouvre un ticket [Correction]/[Fact-check] depuis le site (Proposer), puis relance apply-ticket sur ce numéro.`);
console.error("➡️ Ouvre un ticket [Correction]/[Fact-check] depuis le site (Proposer), puis relance apply-ticket sur ce numéro.");
process.exit(2);
}
@@ -553,7 +638,6 @@ async function main() {
ancre = (ancre || "").trim();
if (ancre.startsWith("#")) ancre = ancre.slice(1);
// fallback si ticket mal formé
if (!ancre) ancre = extractAnchorIdAnywhere(title) || extractAnchorIdAnywhere(body);
chemin = normalizeChemin(chemin);
@@ -592,7 +676,6 @@ async function main() {
const distHtmlPath = path.join(DIST_ROOT, chemin.replace(/^\/+|\/+$/g, ""), "index.html");
await ensureBuildIfNeeded(distHtmlPath);
// Texte cible: préférence au texte complet (ticket), sinon dist si extrait probable
let targetText = texteActuel;
let distText = "";
@@ -609,21 +692,24 @@ async function main() {
throw new Error("Impossible de reconstruire le texte du paragraphe (ni texte actuel, ni dist html).");
}
const original = await fs.readFile(contentFile, "utf-8");
const blocks = splitParagraphBlocks(original);
const originalRaw = await fs.readFile(contentFile, "utf-8");
const { hasFrontmatter, frontmatter, body: originalBody } = splitMdxFrontmatter(originalRaw);
const best = bestBlockMatchIndex(blocks, targetText);
const split = splitParagraphBlocksPreserve(originalBody);
const blocks = split.blocks;
const separators = split.separators;
if (!blocks.length) {
throw new Error(`Aucun bloc éditorial exploitable dans ${path.relative(CWD, contentFile)}`);
}
const ranked = rankedBlockMatches(blocks, targetText, 5);
const best = ranked[0] || { i: -1, score: -1, excerpt: "" };
const runnerUp = ranked[1] || null;
// seuil de sécurité
if (best.i < 0 || best.score < 40) {
console.error("❌ Match trop faible: je refuse de remplacer automatiquement.");
console.error(`➡️ Score=${best.score}. Recommandation: ticket avec 'Texte actuel (copie exacte du paragraphe)'.`);
const ranked = blocks
.map((b, i) => ({ i, score: scoreText(b, targetText), excerpt: stripMd(b).slice(0, 140) }))
.sort((a, b) => b.score - a.score)
.slice(0, 5);
console.error("Top candidates:");
for (const r of ranked) {
console.error(` #${r.i + 1} score=${r.score} ${r.excerpt}${r.excerpt.length >= 140 ? "…" : ""}`);
@@ -631,12 +717,34 @@ async function main() {
process.exit(2);
}
if (runnerUp) {
const ambiguityGap = best.score - runnerUp.score;
if (ambiguityGap < 15) {
console.error("❌ Match ambigu: le meilleur candidat est trop proche du second.");
console.error(`➡️ best=${best.score} / second=${runnerUp.score} / gap=${ambiguityGap}`);
console.error("Top candidates:");
for (const r of ranked) {
console.error(` #${r.i + 1} score=${r.score} ${r.excerpt}${r.excerpt.length >= 140 ? "…" : ""}`);
}
process.exit(2);
}
}
const beforeBlock = blocks[best.i];
const afterBlock = proposition.trim();
const nextBlocks = blocks.slice();
nextBlocks[best.i] = afterBlock;
const updated = nextBlocks.join("\n\n");
const updatedBody = joinParagraphBlocksPreserve(nextBlocks, separators);
const updatedRaw = joinMdxFrontmatter(frontmatter, updatedBody);
assertFrontmatterIntegrity({
hadFrontmatter: hasFrontmatter,
originalFrontmatter: frontmatter,
finalText: updatedRaw,
filePath: path.relative(CWD, contentFile),
});
console.log(`🧩 Matched block #${best.i + 1}/${blocks.length} score=${best.score}`);
@@ -650,13 +758,15 @@ async function main() {
return;
}
// backup uniquement si on écrit
const bakPath = `${contentFile}.bak.issue-${issueNum}`;
const relContentFile = path.relative(CWD, contentFile);
const bakPath = path.join(BACKUP_ROOT, `${relContentFile}.bak.issue-${issueNum}`);
await fs.mkdir(path.dirname(bakPath), { recursive: true });
if (!(await fileExists(bakPath))) {
await fs.writeFile(bakPath, original, "utf-8");
await fs.writeFile(bakPath, originalRaw, "utf-8");
}
await fs.writeFile(contentFile, updated, "utf-8");
await fs.writeFile(contentFile, updatedRaw, "utf-8");
console.log("✅ Applied.");
let aliasChanged = false;
@@ -677,13 +787,13 @@ async function main() {
if (aliasChanged) {
console.log(`✅ Alias ajouté: ${chemin} ${ancre} -> ${newId}`);
// MàJ dist sans rebuild complet (inject seulement)
run("node", ["scripts/inject-anchor-aliases.mjs"], { cwd: CWD });
} else {
console.log(` Alias déjà présent ou inutile (${ancre} -> ${newId}).`);
}
// garde-fous rapides
run("node", ["scripts/check-anchor-aliases.mjs"], { cwd: CWD });
run("node", ["scripts/verify-anchor-aliases-in-dist.mjs"], { cwd: CWD });
run("npm", ["run", "test:anchors"], { cwd: CWD });
run("node", ["scripts/check-inline-js.mjs"], { cwd: CWD });
}
@@ -713,7 +823,6 @@ async function main() {
return;
}
// mode manuel
console.log("Next (manuel) :");
console.log(` git diff -- ${path.relative(CWD, contentFile)}`);
console.log(
@@ -730,4 +839,4 @@ async function main() {
main().catch((e) => {
console.error("💥", e?.message || e);
process.exit(1);
});
});

72
scripts/audit-docx-source.py Executable file
View File

@@ -0,0 +1,72 @@
#!/usr/bin/env python3
from __future__ import annotations
import argparse
import sys
import unicodedata
import xml.etree.ElementTree as ET
from zipfile import ZipFile
NS = {"w": "http://schemas.openxmlformats.org/wordprocessingml/2006/main"}
FORBIDDEN = [
"coviabilité",
"sacroinstitutionnelle",
"technologistique",
"scripturonormative",
"textesrepères",
"ellemême",
"opérateur de darchicration",
"systèmes plusieurs statuts",
"celle-ci se donne à voir",
"Pour autant il serait",
"Telles peuvent être le cas de",
"la co-viabilité devient ,",
]
def norm(s: str) -> str:
return unicodedata.normalize("NFC", s or "")
def main() -> int:
parser = argparse.ArgumentParser(description="Audit simple dun DOCX source officiel.")
parser.add_argument("docx", help="Chemin du fichier .docx")
args = parser.parse_args()
try:
with ZipFile(args.docx) as zf:
data = zf.read("word/document.xml")
except FileNotFoundError:
print(f"ECHEC: fichier introuvable: {args.docx}", file=sys.stderr)
return 2
except KeyError:
print("ECHEC: word/document.xml introuvable dans le DOCX.", file=sys.stderr)
return 2
except Exception as e:
print(f"ECHEC: impossible douvrir le DOCX: {e}", file=sys.stderr)
return 2
root = ET.fromstring(data)
found = False
for i, p in enumerate(root.findall(".//w:p", NS), start=1):
txt = "".join(t.text or "" for t in p.findall(".//w:t", NS))
txt_n = norm(txt)
hits = [needle for needle in FORBIDDEN if needle in txt_n]
if hits:
found = True
print(f"\n[paragraphe {i}]")
print("Hits :", ", ".join(hits))
print(txt_n)
if found:
print("\nECHEC: formes interdites encore présentes dans le DOCX.")
return 1
print("OK: aucune forme interdite trouvée dans le DOCX.")
return 0
if __name__ == "__main__":
raise SystemExit(main())

View File

@@ -0,0 +1,232 @@
import fs from "fs";
import path from "path";
import yaml from "js-yaml";
const ROOT = "src/content/glossaire";
const DEFAULTS_FILE = "src/lib/glossary-navigation-defaults.ts";
const HUB_LIMIT = 5;
const EFFECTIVE_TOP_LIMIT = 10;
const PATH_KEYS = ["understand", "deepen", "compare", "apply"];
const defaultsRaw = fs.readFileSync(DEFAULTS_FILE, "utf-8");
const defaultFamilies = new Set(
[...defaultsRaw.matchAll(/^\s{4}"?([a-z0-9-]+)"?\s*:/gm)].map((m) => m[1]),
);
const defaultPathKeysByFamily = new Map();
const defaultTargetsByFamily = new Map();
for (const match of defaultsRaw.matchAll(
/^\s{4}"?([a-z0-9-]+)"?\s*:\s*\{([\s\S]*?)^\s{4}\},/gm,
)) {
const family = match[1];
const body = match[2];
const keys = new Set();
const targetsByKey = new Map();
for (const key of PATH_KEYS) {
const pathMatch = body.match(new RegExp(`\\b${key}\\s*:\\s*\\[([^\\]]*)\\]`));
const targets = pathMatch
? pathMatch[1]
.split(",")
.map((x) => x.trim().replace(/^["']|["']$/g, ""))
.filter(Boolean)
: [];
if (targets.length > 0) keys.add(key);
targetsByKey.set(key, targets);
}
defaultPathKeysByFamily.set(family, keys);
defaultTargetsByFamily.set(family, targetsByKey);
}
const files = fs.readdirSync(ROOT).filter((f) => f.endsWith(".md"));
const slugs = new Set(files.map((f) => f.replace(".md", "")));
const entries = [];
for (const file of files) {
const full = path.join(ROOT, file);
const raw = fs.readFileSync(full, "utf-8");
const slug = file.replace(".md", "");
if (!raw.startsWith("---")) {
entries.push({ slug, data: {}, noFrontmatter: true });
continue;
}
const frontmatter = raw.split("---", 3)[1];
const data = yaml.load(frontmatter) || {};
entries.push({ slug, data, noFrontmatter: false });
}
const missingNavigation = [];
const missingReason = [];
const weakPaths = [];
const selfLoops = [];
const deadPrimaryNext = [];
const directCycles = [];
const edges = {};
const incoming = {};
const families = new Set();
const effectiveOutgoing = new Map();
const effectiveIncoming = new Map();
function addEffectiveEdge(from, to) {
if (!from || !to || from === to || !slugs.has(to)) return;
if (!effectiveOutgoing.has(from)) effectiveOutgoing.set(from, new Set());
if (!effectiveIncoming.has(to)) effectiveIncoming.set(to, new Set());
effectiveOutgoing.get(from).add(to);
effectiveIncoming.get(to).add(from);
}
for (const { slug, data, noFrontmatter } of entries) {
if (noFrontmatter) continue;
if (data.family) families.add(data.family);
const nav = data.navigation;
if (!nav) {
missingNavigation.push(slug);
continue;
}
const next = nav.primaryNext;
if (next) {
edges[slug] = next;
incoming[next] = (incoming[next] || 0) + 1;
addEffectiveEdge(slug, next);
if (next === slug) selfLoops.push(slug);
if (!slugs.has(next)) deadPrimaryNext.push(`${slug}${next}`);
if (!nav.primaryReason) missingReason.push(slug);
}
const explicitPaths = nav.paths || {};
const familyDefaults = defaultPathKeysByFamily.get(data.family) || new Set();
const familyDefaultTargets = defaultTargetsByFamily.get(data.family) || new Map();
const pathCount = PATH_KEYS.filter((key) => {
const explicit = Array.isArray(explicitPaths[key]) && explicitPaths[key].length > 0;
const fromDefault = familyDefaults.has(key);
return explicit || fromDefault;
}).length;
if (pathCount < 2) weakPaths.push(slug);
for (const key of PATH_KEYS) {
const explicitTargets = Array.isArray(explicitPaths[key]) ? explicitPaths[key] : [];
const defaultTargets = familyDefaultTargets.get(key) || [];
for (const target of [...explicitTargets, ...defaultTargets]) {
addEffectiveEdge(slug, target);
}
}
}
const seenPairs = new Set();
for (const [a, b] of Object.entries(edges)) {
if (edges[b] === a) {
const pair = [a, b].sort().join(" <-> ");
if (!seenPairs.has(pair)) {
seenPairs.add(pair);
directCycles.push(`${a} <-> ${b}`);
}
}
}
const missingDefaults = [...families].filter((f) => !defaultFamilies.has(f));
const bigHubs = Object.entries(incoming)
.filter(([, count]) => count > HUB_LIMIT)
.sort((a, b) => b[1] - a[1]);
console.log("\n🔍 Glossary navigation audit");
if (missingNavigation.length > 0) {
console.log("\n❌ Missing navigation:");
missingNavigation.forEach((s) => console.log(" -", s));
}
console.log("\n🔍 Direct cycles:");
if (directCycles.length) directCycles.forEach((c) => console.log(" -", c));
else console.log(" (none)");
console.log("\n📊 Top hubs:");
Object.entries(incoming)
.sort((a, b) => b[1] - a[1])
.slice(0, 10)
.forEach(([slug, n]) => {
if (n > HUB_LIMIT) console.log(`⚠️ ${slug}: ${n}`);
else console.log(` ${slug}: ${n}`);
});
console.log("\n🔗 Checking dead primaryNext:");
if (deadPrimaryNext.length) deadPrimaryNext.forEach((x) => console.log("❌", x));
else console.log(" (none)");
if (missingDefaults.length) {
console.log("\n❌ Families without defaults:");
missingDefaults.forEach((f) => console.log(" -", f));
}
if (bigHubs.length) {
console.log(`\n⚠️ Hubs above limit (${HUB_LIMIT}):`);
bigHubs.forEach(([slug, n]) => console.log(` - ${slug}: ${n}`));
}
if (missingReason.length) {
console.log("\n⚠ Missing primaryReason:");
missingReason.forEach((s) => console.log(" -", s));
}
if (weakPaths.length) {
console.log("\n⚠ Weak path coverage (<2):");
weakPaths.forEach((s) => console.log(" -", s));
}
if (selfLoops.length) {
console.log("\n❌ Self-referencing primaryNext:");
selfLoops.forEach((s) => console.log(" -", s));
}
console.log(`\n📊 Effective convergence top ${EFFECTIVE_TOP_LIMIT}:`);
[...effectiveIncoming.entries()]
.map(([slug, sources]) => [slug, sources.size])
.sort((a, b) => b[1] - a[1])
.slice(0, EFFECTIVE_TOP_LIMIT)
.forEach(([slug, n]) => {
console.log(` ${n} ${slug}`);
});
console.log(`\n📊 Effective branching top ${EFFECTIVE_TOP_LIMIT}:`);
[...effectiveOutgoing.entries()]
.map(([slug, targets]) => [slug, targets.size])
.sort((a, b) => b[1] - a[1])
.slice(0, EFFECTIVE_TOP_LIMIT)
.forEach(([slug, n]) => {
console.log(` ${n} ${slug}`);
});
const hardFailures =
missingNavigation.length +
directCycles.length +
deadPrimaryNext.length +
missingDefaults.length +
selfLoops.length;
if (hardFailures > 0) {
console.log(`\n❌ Audit failed: ${hardFailures} hard issue(s)`);
process.exitCode = 1;
} else {
console.log("\n✅ Audit done");
}

View File

@@ -14,6 +14,9 @@ const DIST_DIR = getArg("--dist", "dist");
const BASELINE = getArg("--baseline", path.join("tests", "anchors-baseline.json"));
const UPDATE = args.has("--update");
const ACCEPT_GLOSSARY_RESETS =
process.env.ACCEPT_GLOSSARY_ANCHOR_RESETS === "1";
// Ex: 0.2 => 20%
const THRESHOLD = Number(getArg("--threshold", process.env.ANCHORS_THRESHOLD ?? "0.2"));
const MIN_PREV = Number(getArg("--min-prev", process.env.ANCHORS_MIN_PREV ?? "10"));
@@ -74,7 +77,42 @@ function loadAllowMissing() {
return new Set(arr.map(String));
}
function loadAnchorChurnAllowlist() {
const p = path.resolve("config/anchor-churn-allowlist.json");
if (!fssync.existsSync(p)) return { acceptedResets: {}, acceptedPrefixes: {} };
const raw = fssync.readFileSync(p, "utf8").trim();
if (!raw) return { acceptedResets: {}, acceptedPrefixes: {} };
const data = JSON.parse(raw);
if (!data || typeof data !== "object" || Array.isArray(data)) {
throw new Error("anchor-churn-allowlist.json must be an object");
}
const acceptedResets = data.accepted_resets || {};
if (!acceptedResets || typeof acceptedResets !== "object" || Array.isArray(acceptedResets)) {
throw new Error("anchor-churn-allowlist.json: accepted_resets must be an object");
}
const acceptedPrefixes = data.accepted_prefixes || {};
if (!acceptedPrefixes || typeof acceptedPrefixes !== "object" || Array.isArray(acceptedPrefixes)) {
throw new Error("anchor-churn-allowlist.json: accepted_prefixes must be an object");
}
return { acceptedResets, acceptedPrefixes };
}
function acceptedResetReasonForPage(page) {
if (ACCEPTED_RESETS[page]) return ACCEPTED_RESETS[page];
for (const [prefix, reason] of Object.entries(ACCEPTED_PREFIXES)) {
if (page.startsWith(prefix)) return reason;
}
return null;
}
const ALLOW_MISSING = loadAllowMissing();
const { acceptedResets: ACCEPTED_RESETS, acceptedPrefixes: ACCEPTED_PREFIXES } =
loadAnchorChurnAllowlist();
async function buildSnapshot() {
const absDist = path.resolve(DIST_DIR);
@@ -139,6 +177,7 @@ function diffPage(prevIds, curIds) {
let failed = false;
let changedPages = 0;
let acceptedPages = 0;
for (const p of pages) {
const prevIds = base[p] || null;
@@ -150,12 +189,22 @@ function diffPage(prevIds, curIds) {
continue;
}
// page supprimée
// page supprimée ou sortie volontairement du contrat dancres
if (prevIds && !curIds) {
const acceptedReason = acceptedResetReasonForPage(p);
if (ALLOW_MISSING.has(p)) {
console.log(`~ PAGE ${p} (missing now) ✅ allowed prevIds=${prevIds.length}`);
continue;
}
if (acceptedReason) {
acceptedPages += 1;
console.log(`- PAGE ${p} (missing now) prevIds=${prevIds.length}`);
console.log(` ✅ accepted reset: ${acceptedReason}`);
continue;
}
console.log(`- PAGE ${p} (missing now) prevIds=${prevIds.length}`);
failed = true;
continue;
@@ -172,6 +221,7 @@ function diffPage(prevIds, curIds) {
const prevN = prevIds.length || 1;
const churn = (added.length + removed.length) / prevN;
const removedRatio = removed.length / prevN;
const acceptedReason = acceptedResetReasonForPage(p);
console.log(
`~ ${p} prev=${prevIds.length} now=${curIds.length}` +
@@ -182,11 +232,23 @@ function diffPage(prevIds, curIds) {
console.log(` removed: ${removed.slice(0, 20).join(", ")}${removed.length > 20 ? " …" : ""}`);
}
if (prevIds.length >= MIN_PREV && churn > THRESHOLD) failed = true;
if (prevIds.length >= MIN_PREV && removedRatio > THRESHOLD) failed = true;
const exceeds =
(prevIds.length >= MIN_PREV && churn > THRESHOLD) ||
(prevIds.length >= MIN_PREV && removedRatio > THRESHOLD);
if (exceeds && acceptedReason) {
acceptedPages += 1;
console.log(` ✅ accepted reset: ${acceptedReason}`);
continue;
}
if (exceeds) failed = true;
}
console.log(`\nSummary: pages compared=${pages.length}, pages changed=${changedPages}`);
console.log(
`\nSummary: pages compared=${pages.length}, pages changed=${changedPages}, accepted resets=${acceptedPages}`
);
if (failed) {
console.error(`FAIL: anchor churn above threshold (threshold=${pct(THRESHOLD)} minPrev=${MIN_PREV})`);
process.exit(1);

241
scripts/convert_docx_to_mdx.py Executable file
View File

@@ -0,0 +1,241 @@
#!/usr/bin/env python3
import argparse
import os
import re
import shutil
import subprocess
import sys
from pathlib import Path
try:
import yaml
except ImportError:
print("Erreur : PyYAML n'est pas installé. Lance : pip3 install pyyaml")
sys.exit(1)
EDITION = "archicrat-ia"
STATUS = "essai_these"
VERSION = "0.1.0"
ORDER_MAP = {
"prologue": 10,
"chapitre-1": 20,
"chapitre-2": 30,
"chapitre-3": 40,
"chapitre-4": 50,
"chapitre-5": 60,
"conclusion": 70,
}
TITLE_MAP = {
"prologue": "Prologue — Fondation, finalité sociopolitique et historique",
"chapitre-1": "Chapitre 1 — Fondements épistémologiques et modélisation",
"chapitre-2": "Chapitre 2 — Archéogenèse des régimes de co-viabilité",
"chapitre-3": "Chapitre 3 — Philosophies du pouvoir et archicration",
"chapitre-4": "Chapitre 4 — Histoire archicratique des révolutions industrielles",
"chapitre-5": "Chapitre 5 — Tensions, co-viabilités et régulations",
"conclusion": "Conclusion — ArchiCraT-IA",
}
def slugify_name(path: Path) -> str:
stem = path.stem.lower().strip()
replacements = {
" ": "-",
"_": "-",
"": "-",
"": "-",
"é": "e",
"è": "e",
"ê": "e",
"ë": "e",
"à": "a",
"â": "a",
"ä": "a",
"î": "i",
"ï": "i",
"ô": "o",
"ö": "o",
"ù": "u",
"û": "u",
"ü": "u",
"ç": "c",
"'": "",
"": "",
}
for old, new in replacements.items():
stem = stem.replace(old, new)
stem = re.sub(r"-+", "-", stem).strip("-")
# normalisations spécifiques
stem = stem.replace("chapitre-1-fondements-epistemologiques-et-modelisation-archicratie-version-officielle-revise", "chapitre-1")
stem = stem.replace("chapitre-2", "chapitre-2")
stem = stem.replace("chapitre-3", "chapitre-3")
stem = stem.replace("chapitre-4", "chapitre-4")
stem = stem.replace("chapitre-5", "chapitre-5")
if "prologue" in stem:
return "prologue"
if "chapitre-1" in stem:
return "chapitre-1"
if "chapitre-2" in stem:
return "chapitre-2"
if "chapitre-3" in stem:
return "chapitre-3"
if "chapitre-4" in stem:
return "chapitre-4"
if "chapitre-5" in stem:
return "chapitre-5"
if "conclusion" in stem:
return "conclusion"
return stem
def extract_title_from_markdown(md_text: str) -> str | None:
for line in md_text.splitlines():
line = line.strip()
if not line:
continue
if line.startswith("# "):
return line[2:].strip()
return None
def remove_first_h1(md_text: str) -> str:
lines = md_text.splitlines()
out = []
removed = False
for line in lines:
if not removed and line.strip().startswith("# "):
removed = True
continue
out.append(line)
text = "\n".join(out).lstrip()
return text
def clean_markdown(md_text: str) -> str:
text = md_text.replace("\r\n", "\n").replace("\r", "\n")
# nettoyer espaces multiples
text = re.sub(r"\n{3,}", "\n\n", text)
# supprimer éventuels signets/artefacts de liens internes Pandoc
text = re.sub(r"\[\]\(#.*?\)", "", text)
# convertir astérismes parasites
text = re.sub(r"[ \t]+$", "", text, flags=re.MULTILINE)
return text.strip() + "\n"
def compute_level(slug: str) -> int:
if slug == "prologue":
return 1
if slug.startswith("chapitre-"):
return 1
if slug == "conclusion":
return 1
return 1
def convert_one_file(input_docx: Path, output_dir: Path, source_root: Path):
slug = slugify_name(input_docx)
output_mdx = output_dir / f"{slug}.mdx"
cmd = [
"pandoc",
str(input_docx),
"-f",
"docx",
"-t",
"gfm+smart",
]
result = subprocess.run(cmd, check=True, capture_output=True, text=True)
md_text = result.stdout
detected_title = extract_title_from_markdown(md_text)
md_body = remove_first_h1(md_text)
md_body = clean_markdown(md_body)
title = TITLE_MAP.get(slug) or detected_title or input_docx.stem
order = ORDER_MAP.get(slug, 999)
level = compute_level(slug)
relative_source = input_docx
try:
relative_source = input_docx.relative_to(source_root)
except ValueError:
relative_source = input_docx.name
frontmatter = {
"title": title,
"edition": EDITION,
"status": STATUS,
"level": level,
"version": VERSION,
"concepts": [],
"links": [],
"order": order,
"summary": "",
"source": {
"kind": "docx",
"path": str(relative_source),
},
}
yaml_block = yaml.safe_dump(
frontmatter,
allow_unicode=True,
sort_keys=False,
default_flow_style=False,
).strip()
final_text = f"---\n{yaml_block}\n---\n{md_body if md_body.startswith(chr(10)) else chr(10) + md_body}"
output_mdx.write_text(final_text, encoding="utf-8")
print(f"{input_docx.name} -> {output_mdx.name}")
def main():
parser = argparse.ArgumentParser(description="Convertit un dossier DOCX en MDX avec frontmatter.")
parser.add_argument("input_dir", help="Dossier source contenant les DOCX")
parser.add_argument("output_dir", help="Dossier de sortie pour les MDX")
args = parser.parse_args()
input_dir = Path(args.input_dir).expanduser().resolve()
output_dir = Path(args.output_dir).expanduser().resolve()
if not shutil.which("pandoc"):
print("Erreur : pandoc n'est pas installé. Lance : brew install pandoc")
sys.exit(1)
if not input_dir.exists() or not input_dir.is_dir():
print(f"Erreur : dossier source introuvable : {input_dir}")
sys.exit(1)
output_dir.mkdir(parents=True, exist_ok=True)
docx_files = sorted(input_dir.glob("*.docx"))
if not docx_files:
print(f"Aucun DOCX trouvé dans : {input_dir}")
sys.exit(1)
for docx_file in docx_files:
convert_one_file(docx_file, output_dir, input_dir)
print()
print("Conversion DOCX -> MDX terminée.")
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,304 @@
#!/usr/bin/env python3
import argparse
import re
import shutil
import subprocess
import sys
import tempfile
from pathlib import Path
import zipfile
try:
import yaml
except ImportError:
print("Erreur : PyYAML n'est pas installé. Lance : pip3 install pyyaml")
sys.exit(1)
try:
from docx import Document
except ImportError:
print("Erreur : python-docx n'est pas installé. Lance : pip3 install python-docx")
sys.exit(1)
def split_frontmatter(text: str):
if not text.startswith("---\n"):
return {}, text
match = re.match(r"^---\n(.*?)\n---\n(.*)$", text, flags=re.DOTALL)
if not match:
return {}, text
yaml_block = match.group(1)
body = match.group(2)
try:
metadata = yaml.safe_load(yaml_block) or {}
except Exception as e:
print(f"Avertissement : frontmatter YAML illisible : {e}")
metadata = {}
return metadata, body
def strip_mdx_artifacts(text: str):
# imports / exports MDX
text = re.sub(r"^\s*(import|export)\s+.+?$", "", text, flags=re.MULTILINE)
# composants autofermants : <Component />
text = re.sub(r"<[A-Z][A-Za-z0-9._-]*\b[^>]*\/>", "", text)
# composants bloc : <Component ...>...</Component>
text = re.sub(
r"<([A-Z][A-Za-z0-9._-]*)\b[^>]*>.*?</\1>",
"",
text,
flags=re.DOTALL,
)
# accolades seules résiduelles sur ligne
text = re.sub(r"^\s*{\s*}\s*$", "", text, flags=re.MULTILINE)
# lignes vides multiples
text = re.sub(r"\n{3,}", "\n\n", text)
return text.strip() + "\n"
def inject_h1_from_title(metadata: dict, body: str):
title = metadata.get("title", "")
if not title:
return body
if re.match(r"^\s*#\s+", body):
return body
return f"# {title}\n\n{body.lstrip()}"
def find_style_by_candidates(doc, candidates):
# Cherche d'abord par nom visible
for style in doc.styles:
for candidate in candidates:
if style.name == candidate:
return style
# Puis par style_id Word interne
for style in doc.styles:
style_id = getattr(style, "style_id", "")
if style_id in {"BodyText", "Heading1", "Heading2", "Heading3", "Heading4"}:
for candidate in candidates:
if candidate in {"Body Text", "Corps de texte"} and style_id == "BodyText":
return style
if candidate in {"Heading 1", "Titre 1"} and style_id == "Heading1":
return style
if candidate in {"Heading 2", "Titre 2"} and style_id == "Heading2":
return style
if candidate in {"Heading 3", "Titre 3"} and style_id == "Heading3":
return style
if candidate in {"Heading 4", "Titre 4"} and style_id == "Heading4":
return style
return None
def strip_leading_paragraph_numbers(text: str):
"""
Supprime les numéros de paragraphe du type :
2. Texte...
11. Texte...
101. Texte...
sans toucher aux titres Markdown (#, ##, ###).
"""
fixed_lines = []
for line in text.splitlines():
stripped = line.lstrip()
# Ne jamais toucher aux titres Markdown
if stripped.startswith("#"):
fixed_lines.append(line)
continue
# Supprime un numéro de paragraphe en début de ligne
line = re.sub(r"^\s*\d+\.\s+", "", line)
fixed_lines.append(line)
return "\n".join(fixed_lines) + "\n"
def normalize_non_heading_paragraphs(docx_path: Path):
"""
Force tous les paragraphes non-titres en Body Text / Corps de texte.
On laisse intacts les Heading 1-4.
"""
doc = Document(str(docx_path))
body_style = find_style_by_candidates(doc, ["Body Text", "Corps de texte"])
if body_style is None:
print(f"Avertissement : style 'Body Text / Corps de texte' introuvable dans {docx_path.name}")
return
heading_names = {
"Heading 1", "Heading 2", "Heading 3", "Heading 4",
"Titre 1", "Titre 2", "Titre 3", "Titre 4",
}
heading_ids = {"Heading1", "Heading2", "Heading3", "Heading4"}
changed = 0
for para in doc.paragraphs:
text = para.text.strip()
if not text:
continue
current_style = para.style
current_name = current_style.name if current_style else ""
current_id = getattr(current_style, "style_id", "") if current_style else ""
if current_name in heading_names or current_id in heading_ids:
continue
# Tout le reste passe en Body Text
para.style = body_style
changed += 1
doc.save(str(docx_path))
print(f" ↳ normalisation styles : {changed} paragraphe(s) mis en 'Body Text / Corps de texte'")
def remove_word_bookmarks(docx_path: Path):
"""
Supprime les bookmarks Word (signets) du DOCX.
Ce sont eux qui apparaissent comme crochets gris dans LibreOffice/Word
quand l'affichage des signets est activé.
"""
with tempfile.TemporaryDirectory() as tmpdir:
tmpdir = Path(tmpdir)
# Dézipper le docx
with zipfile.ZipFile(docx_path, "r") as zin:
zin.extractall(tmpdir)
xml_targets = [
tmpdir / "word" / "document.xml",
tmpdir / "word" / "footnotes.xml",
tmpdir / "word" / "endnotes.xml",
tmpdir / "word" / "comments.xml",
]
removed = 0
for xml_file in xml_targets:
if not xml_file.exists():
continue
text = xml_file.read_text(encoding="utf-8")
# enlever <w:bookmarkStart .../> et <w:bookmarkEnd .../>
text, c1 = re.subn(r"<w:bookmarkStart\b[^>]*/>", "", text)
text, c2 = re.subn(r"<w:bookmarkEnd\b[^>]*/>", "", text)
removed += c1 + c2
xml_file.write_text(text, encoding="utf-8")
# Rezipper
tmp_output = docx_path.with_suffix(".cleaned.docx")
with zipfile.ZipFile(tmp_output, "w", zipfile.ZIP_DEFLATED) as zout:
for file in tmpdir.rglob("*"):
if file.is_file():
zout.write(file, file.relative_to(tmpdir))
tmp_output.replace(docx_path)
print(f" ↳ suppression signets : {removed} balise(s) supprimée(s)")
def convert_one_file(input_path: Path, output_path: Path, reference_doc: Path | None):
raw = input_path.read_text(encoding="utf-8")
metadata, body = split_frontmatter(raw)
body = strip_mdx_artifacts(body)
body = strip_leading_paragraph_numbers(body)
body = inject_h1_from_title(metadata, body)
with tempfile.NamedTemporaryFile("w", suffix=".md", delete=False, encoding="utf-8") as tmp:
tmp.write(body)
tmp_md = Path(tmp.name)
cmd = [
"pandoc",
str(tmp_md),
"-f",
"markdown",
"-o",
str(output_path),
]
if reference_doc:
cmd.extend(["--reference-doc", str(reference_doc)])
try:
subprocess.run(cmd, check=True)
finally:
try:
tmp_md.unlink()
except FileNotFoundError:
pass
normalize_non_heading_paragraphs(output_path)
remove_word_bookmarks(output_path)
def main():
parser = argparse.ArgumentParser(
description="Convertit des fichiers MDX en DOCX en conservant H1/H2/H3/H4 et en forçant le corps en Body Text."
)
parser.add_argument("input_dir", help="Dossier contenant les .mdx")
parser.add_argument(
"--output-dir",
default=str(Path.home() / "Desktop" / "archicrat-ia-docx"),
help="Dossier de sortie DOCX"
)
parser.add_argument(
"--reference-doc",
default=None,
help="DOCX modèle Word à utiliser comme reference-doc"
)
args = parser.parse_args()
input_dir = Path(args.input_dir)
output_dir = Path(args.output_dir)
reference_doc = Path(args.reference_doc) if args.reference_doc else None
if not shutil.which("pandoc"):
print("Erreur : pandoc n'est pas installé. Installe-le avec : brew install pandoc")
sys.exit(1)
if not input_dir.exists() or not input_dir.is_dir():
print(f"Erreur : dossier introuvable : {input_dir}")
sys.exit(1)
if reference_doc and not reference_doc.exists():
print(f"Erreur : reference-doc introuvable : {reference_doc}")
sys.exit(1)
output_dir.mkdir(parents=True, exist_ok=True)
mdx_files = sorted(input_dir.glob("*.mdx"))
if not mdx_files:
print(f"Aucun fichier .mdx trouvé dans : {input_dir}")
sys.exit(1)
print(f"Conversion de {len(mdx_files)} fichier(s)...")
print(f"Entrée : {input_dir}")
print(f"Sortie : {output_dir}")
if reference_doc:
print(f"Modèle : {reference_doc}")
print()
for mdx_file in mdx_files:
docx_name = mdx_file.with_suffix(".docx").name
out_file = output_dir / docx_name
print(f"{mdx_file.name} -> {docx_name}")
convert_one_file(mdx_file, out_file, reference_doc)
print()
print("✅ Conversion terminée.")
if __name__ == "__main__":
main()

132
scripts/fix-docx-source.py Executable file
View File

@@ -0,0 +1,132 @@
#!/usr/bin/env python3
from __future__ import annotations
import argparse
import shutil
import tempfile
import unicodedata
import xml.etree.ElementTree as ET
from pathlib import Path
from zipfile import ZIP_DEFLATED, ZipFile
W_NS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main"
XML_NS = "http://www.w3.org/XML/1998/namespace"
NS = {"w": W_NS}
ET.register_namespace("w", W_NS)
REPLACEMENTS = {
"coviabilité": "co-viabilité",
"sacroinstitutionnelle": "sacro-institutionnelle",
"technologistique": "techno-logistique",
"scripturonormative": "scripturo-normative",
"textesrepères": "textes-repères",
"ellemême": "elle-même",
"opérateur de darchicration": "opérateur darchicration",
"systèmes plusieurs statuts": "systèmes à plusieurs statuts",
"celle-ci se donne à voir": "Celle-ci se donne à voir",
"Pour autant il serait": "Pour autant, il serait",
"Telles peuvent être le cas de": "Tels peuvent être les cas de",
}
# volontairement NON auto-corrigé : "la co-viabilité devient ,"
# ce cas demande une décision éditoriale humaine.
def qn(tag: str) -> str:
prefix, local = tag.split(":")
if prefix != "w":
raise ValueError(tag)
return f"{{{W_NS}}}{local}"
def norm(s: str) -> str:
return unicodedata.normalize("NFC", s or "")
def paragraph_text(p: ET.Element) -> str:
return "".join(t.text or "" for t in p.findall(".//w:t", NS))
def replaced_text(s: str) -> str:
out = norm(s)
for bad, good in REPLACEMENTS.items():
out = out.replace(bad, good)
return out
def rewrite_paragraph_text(p: ET.Element, new_text: str) -> None:
ppr = p.find("w:pPr", NS)
for child in list(p):
if ppr is not None and child is ppr:
continue
p.remove(child)
r = ET.Element(qn("w:r"))
t = ET.SubElement(r, qn("w:t"))
t.set(f"{{{XML_NS}}}space", "preserve")
t.text = new_text
p.append(r)
def process_document_xml(xml_path: Path) -> int:
tree = ET.parse(xml_path)
root = tree.getroot()
changed = 0
for p in root.findall(".//w:p", NS):
old = paragraph_text(p)
new = replaced_text(old)
if new != old:
rewrite_paragraph_text(p, new)
changed += 1
tree.write(xml_path, encoding="utf-8", xml_declaration=True)
return changed
def repack_docx(tmpdir: Path, out_docx: Path) -> None:
tmp_out = out_docx.with_suffix(out_docx.suffix + ".tmp")
with ZipFile(tmp_out, "w", ZIP_DEFLATED) as zf:
for p in sorted(tmpdir.rglob("*")):
if p.is_file():
zf.write(p, p.relative_to(tmpdir))
shutil.move(tmp_out, out_docx)
def main() -> int:
parser = argparse.ArgumentParser(description="Répare mécaniquement certaines scories DOCX.")
parser.add_argument("docx", help="Chemin du DOCX")
parser.add_argument("--in-place", action="store_true", help="Réécrit le DOCX en place")
args = parser.parse_args()
src = Path(args.docx)
if not src.exists():
print(f"ECHEC: fichier introuvable: {src}", file=sys.stderr)
return 2
out = src if args.in_place else src.with_name(src.stem + ".fixed.docx")
with tempfile.TemporaryDirectory(prefix="docx-fix-") as td:
td_path = Path(td)
with ZipFile(src) as zf:
zf.extractall(td_path)
document_xml = td_path / "word" / "document.xml"
if not document_xml.exists():
print("ECHEC: word/document.xml absent.", file=sys.stderr)
return 2
changed = process_document_xml(document_xml)
repack_docx(td_path, out)
print(f"OK: DOCX réparé par réécriture paragraphe/XML. Paragraphes modifiés: {changed}")
return 0
if __name__ == "__main__":
import sys
raise SystemExit(main())

View File

@@ -205,12 +205,28 @@ async function main() {
const manifestPath = path.resolve(args.manifest);
const items = await readManifest(manifestPath);
const selected = args.all ? items : items.filter(it => args.only.includes(it.slug));
const selected = args.all
? items
: items.filter((it) => {
const rawSlug = String(it.slug || "").trim();
const rawCollection = String(it.collection || "").trim();
const qualified = `${rawCollection}/${rawSlug}`;
return args.only.includes(rawSlug) || args.only.includes(qualified);
});
if (!args.all && selected.length !== args.only.length) {
const found = new Set(selected.map(s => s.slug));
const missing = args.only.filter(s => !found.has(s));
throw new Error(`Some --only slugs not found in manifest: ${missing.join(", ")}`);
if (!args.all) {
const found = new Set(
selected.flatMap((s) => {
const rawSlug = String(s.slug || "").trim();
const rawCollection = String(s.collection || "").trim();
return [rawSlug, `${rawCollection}/${rawSlug}`];
})
);
const missing = args.only.filter((s) => !found.has(s));
if (missing.length > 0) {
throw new Error(`Some --only slugs not found in manifest: ${missing.join(", ")}`);
}
}
const pandocOk = havePandoc();
@@ -275,7 +291,22 @@ async function main() {
atlas: { edition: "atlas", status: "atlas", level: 1 },
};
const defaults = schemaDefaultsByCollection[outCollection] || { edition: outCollection, status: "draft", level: 1 };
// Compat legacy :
// manifest collection="archicratie" + slug="archicrat-ia/..."
// => on écrit bien dans src/content/archicrat-ia/...
// => mais on conserve edition/status historiques de type archicratie/modele_sociopolitique
const defaultsKey =
String(it.collection || "").trim() === "archicratie" &&
String(it.slug || "").trim().startsWith("archicrat-ia/")
? "archicratie"
: outCollection;
const defaults =
schemaDefaultsByCollection[defaultsKey] || {
edition: defaultsKey,
status: "draft",
level: 1,
};
const fm = [
"---",

View File

@@ -0,0 +1,241 @@
#!/usr/bin/env node
import process from "node:process";
function getEnv(name, fallback = "") {
return String(process.env[name] ?? fallback).trim();
}
function sh(value) {
return JSON.stringify(String(value ?? ""));
}
function escapeRegExp(s) {
return String(s).replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
function pickLine(body, key) {
const re = new RegExp(`^\\s*${escapeRegExp(key)}\\s*:\\s*([^\\n\\r]+)`, "mi");
const m = String(body || "").match(re);
return m ? m[1].trim() : "";
}
function pickHeadingValue(body, headingKey) {
const re = new RegExp(
`^##\\s*${escapeRegExp(headingKey)}[^\\n]*\\n([\\s\\S]*?)(?=\\n##\\s|\\n\\s*$)`,
"mi"
);
const m = String(body || "").match(re);
if (!m) return "";
const lines = m[1].split(/\r?\n/).map((l) => l.trim());
for (const l of lines) {
if (!l) continue;
if (l.startsWith("<!--")) continue;
return l.replace(/^\/?/, "/").trim();
}
return "";
}
function normalizeChemin(chemin) {
let c = String(chemin || "").trim();
if (!c) return "";
if (!c.startsWith("/")) c = "/" + c;
if (!c.endsWith("/")) c += "/";
return c;
}
function extractCheminFromAnyUrl(text) {
const s = String(text || "");
const m = s.match(/(\/[a-z0-9\-]+\/[a-z0-9\-\/]+\/)#p-\d+-[0-9a-f]{8}/i);
return m ? m[1] : "";
}
function inferType(issue) {
const title = String(issue?.title || "");
const body = String(issue?.body || "").replace(/\r\n/g, "\n");
const fromBody = String(pickLine(body, "Type") || "").trim().toLowerCase();
if (fromBody) return fromBody;
if (title.startsWith("[Correction]")) return "type/correction";
if (title.startsWith("[Fact-check]") || title.startsWith("[Vérification]")) return "type/fact-check";
return "";
}
function inferChemin(issue) {
const title = String(issue?.title || "");
const body = String(issue?.body || "").replace(/\r\n/g, "\n");
return normalizeChemin(
pickLine(body, "Chemin") ||
pickHeadingValue(body, "Chemin") ||
extractCheminFromAnyUrl(body) ||
extractCheminFromAnyUrl(title)
);
}
function labelsOf(issue) {
return Array.isArray(issue?.labels)
? issue.labels.map((l) => String(l?.name || "")).filter(Boolean)
: [];
}
function issueNumber(issue) {
return Number(issue?.number || issue?.index || 0);
}
function parseMeta(issue) {
const labels = labelsOf(issue);
const type = inferType(issue);
const chemin = inferChemin(issue);
const number = issueNumber(issue);
const hasApproved = labels.includes("state/approved");
const hasRejected = labels.includes("state/rejected");
const isProposer = type === "type/correction" || type === "type/fact-check";
const isOpen = String(issue?.state || "open") === "open";
const isPR = Boolean(issue?.pull_request);
const eligible =
number > 0 &&
isOpen &&
!isPR &&
hasApproved &&
!hasRejected &&
isProposer &&
Boolean(chemin);
return {
issue,
number,
type,
chemin,
labels,
hasApproved,
hasRejected,
eligible,
};
}
async function fetchJson(url, token) {
const res = await fetch(url, {
headers: {
Authorization: `token ${token}`,
Accept: "application/json",
"User-Agent": "archicratie-pick-proposer-issue/1.0",
},
});
if (!res.ok) {
const t = await res.text().catch(() => "");
throw new Error(`HTTP ${res.status} ${url}\n${t}`);
}
return await res.json();
}
async function fetchIssue(apiBase, owner, repo, token, n) {
const url = `${apiBase}/api/v1/repos/${owner}/${repo}/issues/${n}`;
return await fetchJson(url, token);
}
async function listOpenIssues(apiBase, owner, repo, token) {
const out = [];
let page = 1;
const limit = 100;
while (true) {
const url = `${apiBase}/api/v1/repos/${owner}/${repo}/issues?state=open&page=${page}&limit=${limit}`;
const batch = await fetchJson(url, token);
if (!Array.isArray(batch) || batch.length === 0) break;
out.push(...batch);
if (batch.length < limit) break;
page += 1;
}
return out;
}
function emitNone(reason) {
process.stdout.write(
[
`TARGET_FOUND="0"`,
`TARGET_REASON=${sh(reason)}`,
`TARGET_PRIMARY_ISSUE=""`,
`TARGET_ISSUES=""`,
`TARGET_COUNT="0"`,
`TARGET_CHEMIN=""`,
].join("\n") + "\n"
);
}
async function main() {
const token = getEnv("FORGE_TOKEN");
const owner = getEnv("GITEA_OWNER");
const repo = getEnv("GITEA_REPO");
const apiBase = (getEnv("FORGE_API") || getEnv("FORGE_BASE")).replace(/\/+$/, "");
const explicit = Number(process.argv[2] || 0);
if (!token) throw new Error("Missing FORGE_TOKEN");
if (!owner || !repo) throw new Error("Missing GITEA_OWNER / GITEA_REPO");
if (!apiBase) throw new Error("Missing FORGE_API / FORGE_BASE");
let metas = [];
if (explicit > 0) {
const issue = await fetchIssue(apiBase, owner, repo, token, explicit);
const meta = parseMeta(issue);
if (!meta.eligible) {
emitNone(
!meta.hasApproved
? "explicit_issue_not_approved"
: meta.hasRejected
? "explicit_issue_rejected"
: !meta.type
? "explicit_issue_missing_type"
: !meta.chemin
? "explicit_issue_missing_chemin"
: "explicit_issue_not_eligible"
);
return;
}
const openIssues = await listOpenIssues(apiBase, owner, repo, token);
metas = openIssues.map(parseMeta).filter((m) => m.eligible && m.chemin === meta.chemin);
} else {
const openIssues = await listOpenIssues(apiBase, owner, repo, token);
metas = openIssues.map(parseMeta).filter((m) => m.eligible);
if (metas.length === 0) {
emitNone("no_open_approved_proposer_issue");
return;
}
metas.sort((a, b) => a.number - b.number);
const first = metas[0];
metas = metas.filter((m) => m.chemin === first.chemin);
}
metas.sort((a, b) => a.number - b.number);
if (metas.length === 0) {
emitNone("no_batch_for_path");
return;
}
const primary = metas[0];
const issues = metas.map((m) => String(m.number));
process.stdout.write(
[
`TARGET_FOUND="1"`,
`TARGET_REASON="ok"`,
`TARGET_PRIMARY_ISSUE=${sh(primary.number)}`,
`TARGET_ISSUES=${sh(issues.join(" "))}`,
`TARGET_COUNT=${sh(issues.length)}`,
`TARGET_CHEMIN=${sh(primary.chemin)}`,
].join("\n") + "\n"
);
}
main().catch((e) => {
console.error("💥 pick-proposer-issue:", e?.message || e);
process.exit(1);
});

29
scripts/refresh-chapter2.sh Executable file
View File

@@ -0,0 +1,29 @@
#!/usr/bin/env bash
set -euo pipefail
DOCX="sources/docx/archicrat-ia/Chapitre_2Archeogenese_des_regimes_de_co-viabilite-version_officielle.docx"
MANIFEST="sources/manifest.yml"
ONLY="archicrat-ia/chapitre-2"
echo "== Audit source avant fix =="
if ! python3 scripts/audit-docx-source.py "$DOCX"; then
echo
echo "== Fix source =="
python3 scripts/fix-docx-source.py --in-place "$DOCX"
echo
echo "== Audit source après fix =="
python3 scripts/audit-docx-source.py "$DOCX"
fi
echo
echo "== Réimport =="
node scripts/import-docx.mjs --manifest "$MANIFEST" --only "$ONLY" --force
echo
echo "== Build =="
npm run build
echo
echo "== Tests =="
npm test

View File

@@ -0,0 +1,20 @@
import fs from "node:fs";
import path from "node:path";
const root = process.cwd();
const outDir = path.join(root, "public", "__ops");
const outFile = path.join(outDir, "health.json");
const payload = {
service: "archicratie-site",
env: process.env.PUBLIC_OPS_ENV || "unknown",
upstream: process.env.PUBLIC_OPS_UPSTREAM || "unknown",
buildSha: process.env.PUBLIC_BUILD_SHA || "unknown",
builtAt: process.env.PUBLIC_BUILD_TIME || new Date().toISOString(),
};
fs.mkdirSync(outDir, { recursive: true });
fs.writeFileSync(outFile, `${JSON.stringify(payload, null, 2)}\n`, "utf8");
console.log(`✅ ops health written: ${outFile}`);
console.log(payload);

Binary file not shown.

View File

@@ -1,107 +0,0 @@
---
import SiteNav from "../components/SiteNav.astro";
import LevelToggle from "../components/LevelToggle.astro";
import BuildStamp from "../components/BuildStamp.astro";
import "../styles/global.css";
const {
title,
editionLabel,
editionKey,
statusLabel,
statusKey,
level,
version
} = Astro.props;
const lvl = level ?? 1;
const canonical = Astro.site
? new URL(Astro.url.pathname, Astro.site).href
: Astro.url.href;
---
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>{title ? `${title} — Archicratie` : "Archicratie"}</title>
<link rel="canonical" href={canonical} />
<link rel="sitemap" href="/sitemap-index.xml" />
<meta data-pagefind-filter="edition[content]" content={String(editionKey ?? editionLabel)} />
<meta data-pagefind-filter="level[content]" content={String(lvl)} />
<meta data-pagefind-filter="status[content]" content={String(statusKey ?? statusLabel)} />
<meta data-pagefind-meta={`edition:${String(editionKey ?? editionLabel)}`} />
<meta data-pagefind-meta={`level:${String(lvl)}`} />
<meta data-pagefind-meta={`status:${String(statusKey ?? statusLabel)}`} />
<meta data-pagefind-meta={`version:${String(version ?? "")}`} />
</head>
<body data-doc-title={title} data-doc-version={version}>
<header>
<SiteNav />
<div class="edition-bar">
<span class="badge"><strong>Édition</strong> : {editionLabel}</span>
<span class="badge"><strong>Statut</strong> : {statusLabel}</span>
<span class="badge"><strong>Niveau</strong> : {lvl}</span>
<span class="badge"><strong>Version</strong> : {version}</span>
<LevelToggle initialLevel={lvl} />
</div>
</header>
<main>
<article class="reading" data-pagefind-body>
<slot />
<BuildStamp />
</article>
</main>
<script is:inline>
(() => {
const title = document.body.dataset.docTitle || document.title;
const version = document.body.dataset.docVersion || "";
const paras = Array.from(document.querySelectorAll(".reading p[id]"));
for (const p of paras) {
if (p.querySelector(".para-tools")) continue;
const tools = document.createElement("span");
tools.className = "para-tools";
const a = document.createElement("a");
a.className = "para-anchor";
a.href = `#${p.id}`;
a.setAttribute("aria-label", "Lien vers ce paragraphe");
a.textContent = "¶";
const btn = document.createElement("button");
btn.type = "button";
btn.className = "para-cite";
btn.textContent = "Citer";
btn.addEventListener("click", async () => {
const url = new URL(window.location.href);
url.hash = p.id;
const cite = `${title}${version ? ` (v${version})` : ""} — ${url.toString()}`;
try {
await navigator.clipboard.writeText(cite);
const prev = btn.textContent;
btn.textContent = "Copié";
setTimeout(() => (btn.textContent = prev), 900);
} catch {
window.prompt("Copiez la citation :", cite);
}
});
tools.appendChild(a);
tools.appendChild(btn);
p.appendChild(tools);
}
})();
</script>
</body>
</html>

View File

@@ -1,165 +0,0 @@
---
import SiteNav from "../components/SiteNav.astro";
import LevelToggle from "../components/LevelToggle.astro";
import BuildStamp from "../components/BuildStamp.astro";
import "../styles/global.css";
const {
title,
editionLabel,
editionKey,
statusLabel,
statusKey,
level,
version
} = Astro.props;
const lvl = level ?? 1;
const canonical = Astro.site
? new URL(Astro.url.pathname, Astro.site).href
: Astro.url.href;
// Cible Gitea (injectée au build)
const GITEA_BASE = import.meta.env.PUBLIC_GITEA_BASE ?? "";
const GITEA_OWNER = import.meta.env.PUBLIC_GITEA_OWNER ?? "";
const GITEA_REPO = import.meta.env.PUBLIC_GITEA_REPO ?? "";
---
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>{title ? `${title} — Archicratie` : "Archicratie"}</title>
<link rel="canonical" href={canonical} />
<link rel="sitemap" href="/sitemap-index.xml" />
<meta data-pagefind-filter="edition[content]" content={String(editionKey ?? editionLabel)} />
<meta data-pagefind-filter="level[content]" content={String(lvl)} />
<meta data-pagefind-filter="status[content]" content={String(statusKey ?? statusLabel)} />
<meta data-pagefind-meta={`edition:${String(editionKey ?? editionLabel)}`} />
<meta data-pagefind-meta={`level:${String(lvl)}`} />
<meta data-pagefind-meta={`status:${String(statusKey ?? statusLabel)}`} />
<meta data-pagefind-meta={`version:${String(version ?? "")}`} />
</head>
<body data-doc-title={title} data-doc-version={version}>
<header>
<SiteNav />
<div class="edition-bar">
<span class="badge"><strong>Édition</strong> : {editionLabel}</span>
<span class="badge"><strong>Statut</strong> : {statusLabel}</span>
<span class="badge"><strong>Niveau</strong> : {lvl}</span>
<span class="badge"><strong>Version</strong> : {version}</span>
<LevelToggle initialLevel={lvl} />
</div>
</header>
<main>
<article class="reading" data-pagefind-body>
<slot />
<BuildStamp />
</article>
</main>
<script is:inline>
(() => {
const title = document.body.dataset.docTitle || document.title;
const version = document.body.dataset.docVersion || "";
const GITEA_BASE = {JSON.stringify(GITEA_BASE)};
const GITEA_OWNER = {JSON.stringify(GITEA_OWNER)};
const GITEA_REPO = {JSON.stringify(GITEA_REPO)};
const giteaReady = Boolean(GITEA_BASE && GITEA_OWNER && GITEA_REPO);
function buildIssueURL(anchorId, excerpt) {
const base = String(GITEA_BASE).replace(/\/+$/, "");
const issue = new URL(`${base}/${GITEA_OWNER}/${GITEA_REPO}/issues/new`);
const page = new URL(window.location.href);
page.hash = anchorId;
const issueTitle = `Correction: ${anchorId} — ${title}`;
const body = [
`Page: ${page.toString()}`,
`Ancre: #${anchorId}`,
`Version: ${version || "(non renseignée)"}`,
``,
`Texte actuel (extrait):`,
`> ${excerpt}`,
``,
`Proposition (remplacer par):`,
``,
`Justification:`,
``,
`---`,
`Note: issue générée depuis le site (pré-remplissage).`
].join("\n");
issue.searchParams.set("title", issueTitle);
issue.searchParams.set("body", body);
return issue.toString();
}
const paras = Array.from(document.querySelectorAll(".reading p[id]"));
for (const p of paras) {
if (p.querySelector(".para-tools")) continue;
const tools = document.createElement("span");
tools.className = "para-tools";
const a = document.createElement("a");
a.className = "para-anchor";
a.href = `#${p.id}`;
a.setAttribute("aria-label", "Lien vers ce paragraphe");
a.textContent = "¶";
const citeBtn = document.createElement("button");
citeBtn.type = "button";
citeBtn.className = "para-cite";
citeBtn.textContent = "Citer";
citeBtn.addEventListener("click", async () => {
const url = new URL(window.location.href);
url.hash = p.id;
const cite = `${title}${version ? ` (v${version})` : ""} — ${url.toString()}`;
try {
await navigator.clipboard.writeText(cite);
const prev = citeBtn.textContent;
citeBtn.textContent = "Copié";
setTimeout(() => (citeBtn.textContent = prev), 900);
} catch {
window.prompt("Copiez la citation :", cite);
}
});
tools.appendChild(a);
tools.appendChild(citeBtn);
if (giteaReady) {
const propose = document.createElement("a");
propose.className = "para-propose";
propose.href = "#";
propose.textContent = "Proposer";
propose.setAttribute("aria-label", "Proposer une correction sur Gitea");
propose.addEventListener("click", (e) => {
e.preventDefault();
const raw = (p.textContent || "").trim().replace(/\s+/g, " ");
const excerpt = raw.length > 420 ? (raw.slice(0, 420) + "…") : raw;
const url = buildIssueURL(p.id, excerpt);
window.open(url, "_blank", "noopener,noreferrer");
});
tools.appendChild(propose);
}
p.appendChild(tools);
}
})();
</script>
</body>
</html>

View File

@@ -1,60 +0,0 @@
items:
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Introduction.docx
collection: cas-ia
slug: introduction
title: "Introduction générale — Mettre un système dIA en scène"
order: 10
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_1_Epreuve_de_detectabilite.docx
collection: cas-ia
slug: chapitre-1
title: "Chapitre I — Épreuve de détectabilité"
order: 20
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_2_Epreuve_Topologique.docx
collection: cas-ia
slug: chapitre-2
title: "Chapitre II — Épreuve topologique"
order: 30
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_3_Epreuve_archeogenetique.docx
collection: cas-ia
slug: chapitre-3
title: "Chapitre III — Épreuve archéogénétique"
order: 40
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_4_Epreuve_Morphologique.docx
collection: cas-ia
slug: chapitre-4
title: "Chapitre IV — Épreuve morphologique"
order: 50
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_5_Epreuve_Historique.docx
collection: cas-ia
slug: chapitre-5
title: "Chapitre V — Épreuve historique"
order: 60
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_6_Epreuve_de_Co-viabilite.docx
collection: cas-ia
slug: chapitre-6
title: "Chapitre VI — Épreuve de co-viabilité"
order: 70
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_7_Gestes_archicratiques_concrets_pour_un_systeme_IA.docx
collection: cas-ia
slug: chapitre-7
title: "Chapitre VII — Gestes archicratiques concrets pour un système dIA"
order: 80
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Conclusion.docx
collection: cas-ia
slug: conclusion
title: "Conclusion"
order: 90
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Annexe_Glossaire_Archicratique_Cas_IA.docx
collection: cas-ia
slug: annexe-glossaire-audit
title: "Annexe — Glossaire archicratique pour laudit des systèmes dIA"
order: 100

View File

@@ -1,6 +0,0 @@
items:
- source: sources/docx/commencer/document-de-presentation.docx
collection: commencer
slug: document-de-presentation
title: Document de présentation
order: 0

View File

@@ -1,161 +1,123 @@
version: 1
docs:
# =========================
# Document dentrée
# =========================
- source: sources/docx/commencer/document-de-presentation.docx
collection: commencer
slug: document-de-presentation
title: "Document de présentation"
order: 0
# =========================
# Archicratie — Essai-thèse "ArchiCraT-IA"
# =========================
- source: sources/docx/archicrat-ia/Prologue—Archicratie-fondation_et_finalite_sociopolitique_et_historique-version_officielle.docx
collection: archicratie
slug: archicrat-ia/prologue
title: "Prologue — Fondation et finalité sociopolitique et historique"
collection: archicrat-ia
slug: prologue
title: "Prologue — Fondation, finalité sociopolitique et historique"
order: 10
- source: sources/docx/archicrat-ia/Chapitre_1—Fondements_epistemologiques_et_modelisation_Archicratie-version_officielle.docx
collection: archicratie
slug: archicrat-ia/chapitre-1
collection: archicrat-ia
slug: chapitre-1
title: "Chapitre 1 — Fondements épistémologiques et modélisation"
order: 20
- source: sources/docx/archicrat-ia/Chapitre_2Archeogenese_des_regimes_de_co-viabilite-version_officielle.docx
collection: archicratie
slug: archicrat-ia/chapitre-2
collection: archicrat-ia
slug: chapitre-2
title: "Chapitre 2 — Archéogenèse des régimes de co-viabilité"
order: 30
- source: sources/docx/archicrat-ia/Chapitre_3—Philosophies_du_pouvoir_et_Archicration-pour_une_topologie_differenciee_des_regimes_regulateurs-version_officielle.docx
collection: archicratie
slug: archicrat-ia/chapitre-3
collection: archicrat-ia
slug: chapitre-3
title: "Chapitre 3 — Philosophies du pouvoir et archicration"
order: 40
- source: sources/docx/archicrat-ia/Chapitre_4—Vers_une_histoire_archicratique_des_revolutions_industrielles-version_officielle.docx
collection: archicratie
slug: archicrat-ia/chapitre-4
collection: archicrat-ia
slug: chapitre-4
title: "Chapitre 4 — Histoire archicratique des révolutions industrielles"
order: 50
- source: sources/docx/archicrat-ia/Chapitre_5—Problematiques_des_tensions_des_co-viabilites_et_des_regulations_archicratiques-version_officielle.docx
collection: archicratie
slug: archicrat-ia/chapitre-5
collection: archicrat-ia
slug: chapitre-5
title: "Chapitre 5 — Tensions, co-viabilités et régulations"
order: 60
- source: sources/docx/archicrat-ia/Conclusion-Archicrat-IA-version_officielle.docx
collection: archicratie
slug: archicrat-ia/conclusion
collection: archicrat-ia
slug: conclusion
title: "Conclusion — ArchiCraT-IA"
order: 70
# =========================
# IA — Cas pratique (1 page = 1 chapitre)
# NOTE: on n'inclut PAS le monolithe "Cas_IA-... .docx" dans le manifeste.
# Cas pratique — Gouvernance des systèmes IA
# =========================
- source: sources/docx/cas-ia/Cas_IA-Archicratie_et_gouvernance_des_systemes_IA-Introduction_generale—Mettre_en_scene_un_systeme_IA.docx
collection: ia
slug: cas-pratique/introduction
title: "Cas pratique — Introduction générale : Mettre en scène un système IA"
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Introduction.docx
collection: cas-ia
slug: introduction
title: "Introduction générale Mettre un système dIA en scène"
order: 110
- source: sources/docx/cas-ia/Cas_IA-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_I—Epreuve_de_detectabilite.docx
collection: ia
slug: cas-pratique/chapitre-1
title: "Cas pratique — Chapitre I : Épreuve de détectabilité"
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_1_Epreuve_de_detectabilite.docx
collection: cas-ia
slug: chapitre-1
title: "Chapitre I Épreuve de détectabilité"
order: 120
- source: sources/docx/cas-ia/Cas_IA-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_II—Epreuve_topologique.docx
collection: ia
slug: cas-pratique/chapitre-2
title: "Cas pratique — Chapitre II : Épreuve topologique"
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_2_Epreuve_Topologique.docx
collection: cas-ia
slug: chapitre-2
title: "Chapitre II Épreuve topologique"
order: 130
- source: sources/docx/cas-ia/Cas_IA-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_III—Epreuve_archeogenetique.docx
collection: ia
slug: cas-pratique/chapitre-3
title: "Cas pratique — Chapitre III : Épreuve archéogénétique"
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_3_Epreuve_archeogenetique.docx
collection: cas-ia
slug: chapitre-3
title: "Chapitre III Épreuve archéogénétique"
order: 140
- source: sources/docx/cas-ia/Cas_IA-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_IV—Epreuve_morphologique.docx
collection: ia
slug: cas-pratique/chapitre-4
title: "Cas pratique — Chapitre IV : Épreuve morphologique"
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_4_Epreuve_Morphologique.docx
collection: cas-ia
slug: chapitre-4
title: "Chapitre IV Épreuve morphologique"
order: 150
- source: sources/docx/cas-ia/Cas_IA-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_V—Epreuve_historique.docx
collection: ia
slug: cas-pratique/chapitre-5
title: "Cas pratique — Chapitre V : Épreuve historique"
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_5_Epreuve_Historique.docx
collection: cas-ia
slug: chapitre-5
title: "Chapitre V Épreuve historique"
order: 160
- source: sources/docx/cas-ia/Cas_IA-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_VI—Epreuve_de_co-viabilite.docx
collection: ia
slug: cas-pratique/chapitre-6
title: "Cas pratique — Chapitre VI : Épreuve de co-viabilité"
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_6_Epreuve_de_Co-viabilite.docx
collection: cas-ia
slug: chapitre-6
title: "Chapitre VI Épreuve de co-viabilité"
order: 170
- source: sources/docx/cas-ia/Cas_IA-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_VII—Gestes_archicratiques_concrets_pour_un_systeme_IA.docx
collection: ia
slug: cas-pratique/chapitre-7
title: "Cas pratique — Chapitre VII : Gestes archicratiques concrets"
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_7_Gestes_archicratiques_concrets_pour_un_systeme_IA.docx
collection: cas-ia
slug: chapitre-7
title: "Chapitre VII Gestes archicratiques concrets pour un système dIA"
order: 180
- source: sources/docx/cas-ia/Cas_IA-Archicratie_et_gouvernance_des_systemes_IA-Conclusion.docx
collection: ia
slug: cas-pratique/conclusion
title: "Cas pratique — Conclusion"
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Conclusion.docx
collection: cas-ia
slug: conclusion
title: "Conclusion"
order: 190
- source: sources/docx/cas-ia/Cas_IA-Archicratie_et_gouvernance_des_systemes_IA-AnnexeGlossaire_archicratique_pour_audit_des_systemes_IA.docx
collection: ia
slug: cas-pratique/annexe-glossaire-audit
title: "Cas pratique — Annexe : Glossaire archicratique pour audit des systèmes IA"
- source: sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Annexe_Glossaire_Archicratique_Cas_IA.docx
collection: cas-ia
slug: annexe-glossaire-audit
title: "Annexe Glossaire archicratique pour laudit des systèmes dIA"
order: 195
# =========================
# Traité — Ontodynamique générative (1 page = 1 chapitre)
# NOTE: on n'inclut PAS le monolithe "Traite-...-version_officielle.docx" dans le manifeste.
# =========================
- source: sources/docx/traite/Traite-Ontodynamique_Generative-Fondements_Archicratie-Introduction-version_officielle.docx
collection: traite
slug: ontodynamique/introduction
title: "Traité — Introduction"
order: 210
- source: sources/docx/traite/Traite-Ontodynamique_Generative-Fondements_Archicratie-Chapitre_1—Le_flux_ontogenetique-version_officielle.docx
collection: traite
slug: ontodynamique/chapitre-1
title: "Traité — Chapitre 1 : Le flux ontogénétique"
order: 220
- source: sources/docx/traite/Traite-Ontodynamique_Generative-Fondements_Archicratie-Chapitre_2—economie_du_reel-version_officielle.docx
collection: traite
slug: ontodynamique/chapitre-2
title: "Traité — Chapitre 2 : Économie du réel"
order: 230
- source: sources/docx/traite/Traite-Ontodynamique_Generative-Fondements_Archicratie-Chapitre_3—Le_reel_comme_systeme_regulateur-version_officielle.docx
collection: traite
slug: ontodynamique/chapitre-3
title: "Traité — Chapitre 3 : Le réel comme système régulateur"
order: 240
- source: sources/docx/traite/Traite-Ontodynamique_Generative-Fondements_Archicratie-Chapitre_4—Arcalite-structures_formes_invariants-version_officielle.docx
collection: traite
slug: ontodynamique/chapitre-4
title: "Traité — Chapitre 4 : Arcalité — structures, formes, invariants"
order: 250
- source: sources/docx/traite/Traite-Ontodynamique_Generative-Fondements_Archicratie-Chapitre_5-Cratialite-forces_flux_gradients-version_officielle.docx
collection: traite
slug: ontodynamique/chapitre-5
title: "Traité — Chapitre 5 : Cratialité — forces, flux, gradients"
order: 260
- source: sources/docx/traite/Traite-Ontodynamique_Generative-Fondements_Archicratie-Chapitre_6—Archicration-version_officielle.docx
collection: traite
slug: ontodynamique/chapitre-6
title: "Traité — Chapitre 6 : Archicration"
order: 270
# =========================
# Glossaire / Lexique
# =========================
@@ -169,4 +131,4 @@ docs:
collection: glossaire
slug: mini-glossaire-verbes
title: "Mini-glossaire des verbes de la scène archicratique"
order: 910
order: 910

View File

@@ -1,5 +1 @@
{
"/archicrat-ia/chapitre-3/": {
"p-1-60c7ea48": "p-1-a21087b0"
}
}
{}

View File

@@ -1,8 +1,5 @@
---
import { SITE_RELEASE, BUILD_TIME_ISO } from "../lib/buildInfo";
---
<footer class="build-stamp" aria-label="Informations dédition">
<small>
Édition web — release <strong>{SITE_RELEASE}</strong> · build <time datetime={BUILD_TIME_ISO}>{BUILD_TIME_ISO}</time>
Archicratie — Web Edition · Version de lecture critique · Conception, rédaction et édition : Sylvain Noyon
</small>
</footer>
</footer>

View File

@@ -8,45 +8,73 @@ const {
label = "Table des matières"
} = Astro.props;
const entries = (await getCollection(collection))
.sort((a, b) => (a.data.order ?? 0) - (b.data.order ?? 0));
const slugOf = (entry) => String(entry.id).replace(/\.(md|mdx)$/i, "");
const hrefOf = (entry) => `${basePath}/${slugOf(entry)}/`;
const href = (slug) => `${basePath}/${slug}/`;
const collator = new Intl.Collator("fr", { sensitivity: "base", numeric: true });
const entries = [...await getCollection(collection)].sort((a, b) => {
const ao = Number(a.data.order ?? 9999);
const bo = Number(b.data.order ?? 9999);
if (ao !== bo) return ao - bo;
const at = String(a.data.title ?? a.data.term ?? slugOf(a));
const bt = String(b.data.title ?? b.data.term ?? slugOf(b));
return collator.compare(at, bt);
});
const tocId = `toc-global-${collection}-${String(basePath).replace(/[^\w-]+/g, "-")}`;
---
<nav class="toc-global" aria-label={label}>
<div class="toc-global__head">
<div class="toc-global__title">{label}</div>
</div>
<nav
class="toc-global"
data-mobile-default="closed"
aria-label={label}
data-toc-global
data-toc-key={`global:${collection}:${basePath}`}
>
<button
class="toc-global__head toc-global__toggle"
type="button"
aria-expanded="false"
aria-controls={tocId}
>
<span class="toc-global__title">{label}</span>
<span class="toc-global__chevron" aria-hidden="true">▾</span>
</button>
<ol class="toc-global__list">
{entries.map((e) => {
const active = e.slug === currentSlug;
return (
<li class={`toc-item ${active ? "is-active" : ""}`}>
<a class="toc-link" href={href(e.slug)} aria-current={active ? "page" : undefined}>
<span class="toc-link__row">
{active ? (
<span class="toc-active-indicator" aria-hidden="true">👉</span>
) : (
<span class="toc-active-spacer" aria-hidden="true"></span>
)}
<div class="toc-global__body-clip" id={tocId} hidden>
<div class="toc-global__body">
<ol class="toc-global__list">
{entries.map((e) => {
const slug = slugOf(e);
const active = slug === currentSlug;
<span class="toc-link__title">{e.data.title}</span>
return (
<li class={`toc-item ${active ? "is-active" : ""}`}>
<a class="toc-link" href={hrefOf(e)} aria-current={active ? "page" : undefined}>
<span class="toc-link__row">
<span class={`toc-active-mark ${active ? "is-on" : ""}`} aria-hidden="true">
<span class="toc-active-mark__dot"></span>
</span>
{active && (
<span class="toc-badge" aria-label="Chapitre en cours">
En cours
<span class="toc-link__title">{e.data.title}</span>
{active && (
<span class="toc-badge" aria-label="Chapitre en cours">
En cours
</span>
)}
</span>
)}
</span>
{active && <span class="toc-underline" aria-hidden="true"></span>}
</a>
</li>
);
})}
</ol>
{active && <span class="toc-underline" aria-hidden="true"></span>}
</a>
</li>
);
})}
</ol>
</div>
</div>
</nav>
<style>
@@ -57,7 +85,22 @@ const href = (slug) => `${basePath}/${slug}/`;
background: rgba(127,127,127,0.06);
}
.toc-global__toggle{
width: 100%;
appearance: none;
border: 0;
background: transparent;
color: inherit;
text-align: left;
padding: 0;
cursor: pointer;
}
.toc-global__head{
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
margin-bottom: 10px;
padding-bottom: 10px;
border-bottom: 1px dashed rgba(127,127,127,0.25);
@@ -70,11 +113,36 @@ const href = (slug) => `${basePath}/${slug}/`;
opacity: .88;
}
.toc-global__chevron{
font-size: 12px;
opacity: .7;
transition: transform 180ms ease;
}
.toc-global__body-clip{
display: grid;
grid-template-rows: 1fr;
transition:
grid-template-rows 220ms ease,
opacity 160ms ease,
margin-top 220ms ease;
}
.toc-global__body{
min-height: 0;
overflow: hidden;
}
.toc-global__list{
list-style: none;
margin: 0;
padding: 0;
max-height: 44vh;
overflow: auto;
padding-right: 8px;
scrollbar-gutter: stable;
}
.toc-global__list li::marker{ content: ""; }
.toc-item{ margin: 6px 0; }
@@ -100,13 +168,33 @@ const href = (slug) => `${basePath}/${slug}/`;
align-items: center;
}
.toc-active-indicator{
font-size: 14px;
line-height: 1;
.toc-active-mark{
width: 14px;
height: 14px;
display: inline-grid;
place-items: center;
border-radius: 999px;
border: 1px solid transparent;
opacity: .55;
}
.toc-active-spacer{
width: 14px;
.toc-active-mark__dot{
width: 5px;
height: 5px;
border-radius: 999px;
background: currentColor;
opacity: .65;
}
.toc-active-mark.is-on{
border-color: rgba(127,127,127,0.34);
opacity: 1;
}
.toc-active-mark.is-on .toc-active-mark__dot{
width: 6px;
height: 6px;
opacity: 1;
}
.toc-link__title{
@@ -144,11 +232,70 @@ const href = (slug) => `${basePath}/${slug}/`;
border-radius: 999px;
}
.toc-global__list{
max-height: 44vh;
overflow: auto;
padding-right: 8px;
scrollbar-gutter: stable;
@media (max-width: 980px){
.toc-global{
padding: 10px 12px;
border-radius: 14px;
}
.toc-global__head{
margin-bottom: 0;
padding-bottom: 0;
border-bottom: 0;
min-height: 28px;
}
.toc-global__title{
font-size: 13px;
}
.toc-global__body-clip{
margin-top: 10px;
}
.toc-global.is-collapsed .toc-global__body-clip{
grid-template-rows: 0fr;
opacity: 0;
margin-top: 0;
}
.toc-global__body{
min-height: 0;
overflow: hidden;
transition: opacity 180ms ease;
}
.toc-global.is-collapsed .toc-global__body{
opacity: 0;
}
.toc-global.is-collapsed .toc-global__chevron{
transform: rotate(-90deg);
}
.toc-link{
padding: 7px 9px;
border-radius: 12px;
}
.toc-link__title{
font-size: 12.5px;
line-height: 1.22;
}
.toc-badge{
font-size: 10px;
padding: 2px 7px;
}
.toc-global__list{
max-height: min(42vh, 360px);
padding-right: 4px;
}
.toc-global__body-clip[hidden]{
display: none !important;
}
}
@media (prefers-color-scheme: dark){
@@ -156,12 +303,95 @@ const href = (slug) => `${basePath}/${slug}/`;
.toc-link:hover{ background: rgba(255,255,255,0.06); }
.toc-item.is-active .toc-link{ background: rgba(255,255,255,0.06); }
.toc-badge{ background: rgba(255,255,255,0.06); }
.toc-active-mark.is-on{ border-color: rgba(255,255,255,0.22); }
}
</style>
<script is:inline>
(() => {
const active = document.querySelector(".toc-global .toc-item.is-active");
if (active) active.scrollIntoView({ block: "nearest" });
function init() {
document.querySelectorAll("[data-toc-global]").forEach((nav) => {
if (nav.dataset.tocReady === "1") return;
nav.dataset.tocReady = "1";
const toggle = nav.querySelector(".toc-global__toggle");
const bodyClip = nav.querySelector(".toc-global__body-clip");
const active = nav.querySelector(".toc-item.is-active");
const mq = window.matchMedia("(max-width: 980px)");
const key = `archicratie:${nav.dataset.tocKey || "toc-global"}`;
if (!toggle || !bodyClip) return;
const read = () => {
try {
const v = localStorage.getItem(key);
if (v === "open") return true;
if (v === "closed") return false;
} catch {}
return null;
};
const write = (open) => {
try { localStorage.setItem(key, open ? "open" : "closed"); } catch {}
};
const setOpen = (open, { persist = true } = {}) => {
const isMobile = mq.matches;
const effectiveOpen = isMobile ? open : true;
nav.classList.toggle("is-collapsed", isMobile && !effectiveOpen);
toggle.setAttribute("aria-expanded", effectiveOpen ? "true" : "false");
if (bodyClip) {
bodyClip.hidden = isMobile && !effectiveOpen;
}
if (persist && isMobile) write(effectiveOpen);
};
const initState = () => {
if (!mq.matches) {
setOpen(true, { persist: false });
if (active) active.scrollIntoView({ block: "nearest" });
return;
}
const stored = read();
const open = stored == null ? false : stored;
setOpen(open, { persist: false });
if (open && active) active.scrollIntoView({ block: "nearest" });
};
toggle.addEventListener("click", () => {
const open = toggle.getAttribute("aria-expanded") !== "true";
setOpen(open);
if (open && active) active.scrollIntoView({ block: "nearest" });
if (open) {
window.dispatchEvent(new CustomEvent("archicratie:tocGlobalOpen"));
}
});
window.addEventListener("archicratie:tocLocalOpen", () => {
if (!mq.matches) return;
setOpen(false);
});
if (mq.addEventListener) {
mq.addEventListener("change", initState);
} else if (mq.addListener) {
mq.addListener(initState);
}
initState();
});
}
if (document.readyState === "loading") {
window.addEventListener("DOMContentLoaded", init, { once: true });
} else {
init();
}
})();
</script>

View File

@@ -0,0 +1,529 @@
---
import {
getGlossaryEntryAsideData,
getGlossaryPortalLinks,
hrefOfGlossaryEntry,
slugOfGlossaryEntry,
} from "../lib/glossary";
const {
currentEntry,
allEntries = [],
} = Astro.props;
const currentSlug = slugOfGlossaryEntry(currentEntry);
const {
displayFamily,
displayDomain,
displayLevel,
showNoyau,
showSameFamily,
fondamentaux,
sameFamilyTitle,
sameFamilyEntries,
relationSections,
contextualTheory,
} = getGlossaryEntryAsideData(currentEntry, allEntries);
const portalLinks = getGlossaryPortalLinks();
---
<nav class="glossary-aside" aria-label="Navigation du glossaire">
<div class="glossary-aside__block glossary-aside__block--intro">
<a class="glossary-aside__back" href="/glossaire/">← Retour au glossaire</a>
<div class="glossary-aside__title">Glossaire archicratique</div>
<div class="glossary-aside__pills" aria-label="Repères de lecture">
<span class="glossary-aside__pill glossary-aside__pill--family">
{displayFamily}
</span>
{displayDomain && (
<span class="glossary-aside__pill">{displayDomain}</span>
)}
{displayLevel && (
<span class="glossary-aside__pill">{displayLevel}</span>
)}
</div>
</div>
<details class="glossary-aside__block glossary-aside__disclosure">
<summary class="glossary-aside__summary">
<span class="glossary-aside__heading">Portails</span>
<span class="glossary-aside__chevron" aria-hidden="true">▾</span>
</summary>
<div class="glossary-aside__panel">
<ul class="glossary-aside__list">
{portalLinks.map((item) => (
<li><a href={item.href}>{item.label}</a></li>
))}
</ul>
</div>
</details>
{showNoyau && (
<details class="glossary-aside__block glossary-aside__disclosure">
<summary class="glossary-aside__summary">
<span class="glossary-aside__heading">Noyau archicratique</span>
<span class="glossary-aside__chevron" aria-hidden="true">▾</span>
</summary>
<div class="glossary-aside__panel">
<ul class="glossary-aside__list">
{fondamentaux.map((entry) => {
const active = slugOfGlossaryEntry(entry) === currentSlug;
return (
<li>
<a
href={hrefOfGlossaryEntry(entry)}
aria-current={active ? "page" : undefined}
class={active ? "is-active" : undefined}
>
{entry.data.term}
</a>
</li>
);
})}
</ul>
</div>
</details>
)}
{showSameFamily && (
<details class="glossary-aside__block glossary-aside__disclosure">
<summary class="glossary-aside__summary">
<span class="glossary-aside__heading">{sameFamilyTitle}</span>
<span class="glossary-aside__chevron" aria-hidden="true">▾</span>
</summary>
<div class="glossary-aside__panel">
<ul class="glossary-aside__list">
{sameFamilyEntries.map((entry) => {
const active = slugOfGlossaryEntry(entry) === currentSlug;
return (
<li>
<a
href={hrefOfGlossaryEntry(entry)}
aria-current={active ? "page" : undefined}
class={active ? "is-active" : undefined}
>
{entry.data.term}
</a>
</li>
);
})}
</ul>
</div>
</details>
)}
{relationSections.length > 0 && (
<details class="glossary-aside__block glossary-aside__disclosure">
<summary class="glossary-aside__summary">
<span class="glossary-aside__heading">Autour de cette fiche</span>
<span class="glossary-aside__chevron" aria-hidden="true">▾</span>
</summary>
<div class="glossary-aside__panel">
{relationSections.map((section) => (
<>
<h3 class="glossary-aside__subheading">{section.title}</h3>
<ul class="glossary-aside__list">
{section.items.map((entry) => (
<li><a href={hrefOfGlossaryEntry(entry)}>{entry.data.term}</a></li>
))}
</ul>
</>
))}
</div>
</details>
)}
{contextualTheory.length > 0 && (
<details class="glossary-aside__block glossary-aside__disclosure">
<summary class="glossary-aside__summary">
<span class="glossary-aside__heading">Paysage théorique</span>
<span class="glossary-aside__chevron" aria-hidden="true">▾</span>
</summary>
<div class="glossary-aside__panel">
<ul class="glossary-aside__list">
{contextualTheory.map((entry) => (
<li><a href={hrefOfGlossaryEntry(entry)}>{entry.data.term}</a></li>
))}
</ul>
</div>
</details>
)}
</nav>
<style>
.glossary-aside{
display: flex;
flex-direction: column;
gap: 14px;
min-width: 0;
}
.glossary-aside__block{
border: 1px solid rgba(127,127,127,0.22);
border-radius: 16px;
padding: 14px;
background: rgba(127,127,127,0.05);
min-width: 0;
}
.glossary-aside__block--intro{
padding-top: 13px;
padding-bottom: 13px;
}
.glossary-aside__back{
display: inline-block;
margin-bottom: 10px;
font-size: 14px;
font-weight: 700;
line-height: 1.35;
text-decoration: none;
}
.glossary-aside__title{
font-size: 18px;
font-weight: 850;
letter-spacing: .1px;
line-height: 1.22;
}
.glossary-aside__pills{
display: flex;
flex-wrap: wrap;
gap: 7px;
margin-top: 10px;
}
.glossary-aside__pill{
display: inline-flex;
align-items: center;
padding: 5px 10px;
border: 1px solid rgba(127,127,127,0.24);
border-radius: 999px;
background: rgba(127,127,127,0.04);
font-size: 13px;
line-height: 1.35;
opacity: .92;
min-width: 0;
}
.glossary-aside__pill--family{
border-color: rgba(127,127,127,0.38);
font-weight: 800;
}
.glossary-aside__disclosure{
padding: 0;
overflow: hidden;
}
.glossary-aside__summary{
list-style: none;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 14px;
cursor: pointer;
user-select: none;
}
.glossary-aside__summary::-webkit-details-marker{
display: none;
}
.glossary-aside__summary:hover{
background: rgba(127,127,127,0.035);
}
.glossary-aside__heading{
margin: 0;
font-size: 16px;
font-weight: 850;
line-height: 1.28;
opacity: .97;
}
.glossary-aside__chevron{
flex: 0 0 auto;
font-size: 14px;
line-height: 1;
opacity: .72;
transform: rotate(0deg);
transition: transform 160ms ease, opacity 160ms ease;
}
.glossary-aside__disclosure[open] .glossary-aside__chevron{
transform: rotate(180deg);
opacity: .96;
}
.glossary-aside__panel{
padding: 0 14px 14px;
}
.glossary-aside__subheading{
margin: 13px 0 8px;
font-size: 12.5px;
font-weight: 800;
line-height: 1.35;
opacity: .82;
text-transform: uppercase;
letter-spacing: .04em;
}
.glossary-aside__list{
list-style: none;
margin: 0;
padding: 0;
}
.glossary-aside__list li{
margin: 7px 0;
}
.glossary-aside__list a{
text-decoration: none;
font-size: 14px;
line-height: 1.4;
word-break: break-word;
}
.glossary-aside__list a.is-active{
font-weight: 800;
}
@media (max-width: 860px){
.glossary-aside{
gap: 10px;
}
.glossary-aside__block{
border-radius: 14px;
}
.glossary-aside__block--intro{
padding: 12px;
}
.glossary-aside__back{
margin-bottom: 8px;
font-size: 13px;
line-height: 1.28;
}
.glossary-aside__title{
font-size: 19px;
line-height: 1.18;
}
.glossary-aside__pills{
gap: 6px;
margin-top: 8px;
}
.glossary-aside__pill{
padding: 4px 9px;
font-size: 12px;
line-height: 1.26;
}
.glossary-aside__summary{
padding: 12px;
}
.glossary-aside__heading{
font-size: 17px;
line-height: 1.2;
}
.glossary-aside__panel{
padding: 0 12px 12px;
}
.glossary-aside__subheading{
margin: 10px 0 6px;
font-size: 11.5px;
line-height: 1.26;
}
.glossary-aside__list li{
margin: 5px 0;
}
.glossary-aside__list a{
font-size: 14px;
line-height: 1.34;
}
.glossary-aside__disclosure:not([open]) .glossary-aside__panel{
display: none;
}
}
@media (max-width: 860px){
.glossary-aside__disclosure{
background: rgba(127,127,127,0.045);
}
.glossary-aside__disclosure[open] .glossary-aside__summary{
border-bottom: 1px solid rgba(127,127,127,0.12);
}
}
@media (orientation: landscape) and (max-width: 920px) and (max-height: 520px){
.glossary-aside{
gap: 8px;
}
.glossary-aside__block{
border-radius: 12px;
}
.glossary-aside__block--intro{
padding: 10px 11px;
}
.glossary-aside__back{
margin-bottom: 6px;
font-size: 12px;
line-height: 1.2;
}
.glossary-aside__title{
font-size: 16px;
line-height: 1.14;
}
.glossary-aside__pills{
gap: 5px;
margin-top: 7px;
}
.glossary-aside__pill{
padding: 3px 8px;
font-size: 11px;
line-height: 1.2;
}
.glossary-aside__summary{
padding: 10px 11px;
}
.glossary-aside__heading{
font-size: 15px;
line-height: 1.16;
}
.glossary-aside__panel{
padding: 0 11px 10px;
}
.glossary-aside__subheading{
margin: 8px 0 5px;
font-size: 11px;
line-height: 1.18;
}
.glossary-aside__list li{
margin: 4px 0;
}
.glossary-aside__list a{
font-size: 13px;
line-height: 1.28;
}
}
@media (orientation: portrait) and (max-width: 1024px) and (pointer: coarse){
.glossary-aside{
gap: 10px;
}
.glossary-aside__disclosure{
background: rgba(127,127,127,0.045);
}
.glossary-aside__disclosure:not([open]) .glossary-aside__panel{
display: none;
}
.glossary-aside__summary{
cursor: pointer;
}
.glossary-aside__chevron{
display: inline;
}
}
@media (min-width: 861px) and (hover: hover) and (pointer: fine){
.glossary-aside__summary{
cursor: default;
}
.glossary-aside__chevron{
display: none;
}
}
@media (prefers-color-scheme: dark){
.glossary-aside__block,
.glossary-aside__pill{
background: rgba(255,255,255,0.04);
}
.glossary-aside__summary:hover{
background: rgba(255,255,255,0.03);
}
}
</style>
<script is:inline>
(() => {
const syncMobileDisclosure = () => {
const mobile = window.matchMedia(
"(max-width: 860px), ((orientation: portrait) and (max-width: 1024px) and (pointer: coarse))"
).matches;
const smallLandscape = window.matchMedia(
"(orientation: landscape) and (max-width: 920px) and (max-height: 520px)"
).matches;
const compact = mobile || smallLandscape;
document
.querySelectorAll(".glossary-aside__disclosure")
.forEach((el, index) => {
if (!(el instanceof HTMLDetailsElement)) return;
if (compact) {
if (!el.dataset.mobileInit) {
el.open = false;
el.dataset.mobileInit = "true";
}
} else {
el.open = true;
}
});
};
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", syncMobileDisclosure, { once: true });
} else {
syncMobileDisclosure();
}
window.addEventListener("resize", syncMobileDisclosure);
window.addEventListener("pageshow", syncMobileDisclosure);
})();
</script>

View File

@@ -0,0 +1,110 @@
---
import { hrefOfGlossaryEntry, type GlossaryEntry } from "../lib/glossary";
export interface Props {
entries?: GlossaryEntry[];
wide?: boolean;
}
const {
entries = [],
wide = false,
} = Astro.props;
---
<div class="glossary-cards">
{entries.map((entry) => (
<a
class:list={[
"glossary-card",
wide && "glossary-card--wide",
]}
href={hrefOfGlossaryEntry(entry)}
>
<strong>{entry.data.term}</strong>
<span>{entry.data.definitionShort}</span>
</a>
))}
</div>
<style>
.glossary-cards{
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 12px;
margin-top: 12px;
}
.glossary-card{
display: flex;
flex-direction: column;
gap: 7px;
padding: 13px 14px;
border: 1px solid var(--glossary-border);
border-radius: 16px;
background: var(--glossary-bg-soft);
text-decoration: none;
transition: transform 120ms ease, background 120ms ease, border-color 120ms ease;
}
.glossary-card:hover{
transform: translateY(-1px);
background: var(--glossary-bg-soft-strong);
border-color: rgba(0,217,255,0.16);
text-decoration: none;
}
.glossary-card--wide{
grid-column: 1 / -1;
}
.glossary-card strong{
color: var(--glossary-accent);
font-size: 1.02rem;
line-height: 1.24;
}
.glossary-card span{
color: inherit;
font-size: .98rem;
line-height: 1.46;
opacity: .94;
}
@media (max-width: 760px){
.glossary-cards{
grid-template-columns: 1fr;
gap: 10px;
margin-top: 10px;
}
.glossary-card{
gap: 6px;
padding: 12px 12px;
border-radius: 14px;
}
.glossary-card strong{
font-size: .98rem;
}
.glossary-card span{
font-size: .94rem;
line-height: 1.42;
}
.glossary-card--wide{
grid-column: auto;
}
}
@media (prefers-color-scheme: dark){
.glossary-card{
background: rgba(255,255,255,0.04);
}
.glossary-card:hover{
background: rgba(255,255,255,0.07);
}
}
</style>

View File

@@ -0,0 +1,26 @@
<div class="glossary-entry-body">
<slot />
</div>
<style>
.glossary-entry-body{
margin-bottom: 16px;
}
.glossary-entry-body > :last-child{
margin-bottom: 0;
}
@media (max-width: 760px){
.glossary-entry-body{
margin-bottom: 12px;
}
}
:global(.glossary-entry-body h2),
:global(.glossary-entry-body h3),
:global(.glossary-relations h2),
:global(.glossary-relations h3){
scroll-margin-top: calc(var(--sticky-offset-px, 96px) + 18px);
}
</style>

View File

@@ -0,0 +1,264 @@
---
interface Props {
term: string;
definitionShort: string;
displayFamily: string;
displayDomain?: string;
displayLevel?: string;
mobilizedAuthors?: string[];
comparisonTraditions?: string[];
}
const {
term,
definitionShort,
displayFamily,
displayDomain = "",
displayLevel = "",
mobilizedAuthors = [],
comparisonTraditions = [],
} = Astro.props;
const hasScholarlyMeta =
mobilizedAuthors.length > 0 ||
comparisonTraditions.length > 0;
---
<header class="glossary-entry-head" data-ge-hero>
<div class="glossary-entry-head__title">
<h1>{term}</h1>
</div>
<div class="glossary-entry-summary">
<p class="glossary-entry-dek">
<em>{definitionShort}</em>
</p>
<div class="glossary-entry-signals" aria-label="Repères de lecture">
<span class="glossary-pill glossary-pill--family">
<strong>Famille :</strong> {displayFamily}
</span>
{displayDomain && (
<span class="glossary-pill">
<strong>Domaine :</strong> {displayDomain}
</span>
)}
{displayLevel && (
<span class="glossary-pill">
<strong>Niveau :</strong> {displayLevel}
</span>
)}
</div>
{hasScholarlyMeta && (
<div class="glossary-entry-meta">
{mobilizedAuthors.length > 0 && (
<p>
<strong>Auteurs mobilisés :</strong> {mobilizedAuthors.join(" / ")}
</p>
)}
{comparisonTraditions.length > 0 && (
<p>
<strong>Traditions de comparaison :</strong> {comparisonTraditions.join(" / ")}
</p>
)}
</div>
)}
</div>
</header>
<style>
.glossary-entry-head{
position: sticky;
top: var(--sticky-header-h, 0px);
z-index: 11;
margin: 0 0 22px;
border: 1px solid rgba(127,127,127,0.18);
border-radius: 24px;
background:
linear-gradient(180deg, rgba(0,0,0,0.60), rgba(0,0,0,0.92)),
radial-gradient(900px 240px at 20% 0%, rgba(0,217,255,0.08), transparent 60%);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
overflow: hidden;
transition:
border-radius 180ms ease,
box-shadow 180ms ease,
border-color 180ms ease;
}
.glossary-entry-head__title{
padding:
var(--entry-hero-pad-top, 18px)
var(--entry-hero-pad-x, 18px)
calc(var(--entry-hero-pad-top, 18px) - 2px);
transition: padding 180ms ease;
}
.glossary-entry-head h1{
margin: 0;
font-size: var(--entry-hero-h1-size, clamp(2.2rem, 4vw, 3.15rem));
line-height: 1.02;
letter-spacing: -.04em;
font-weight: 850;
transition: font-size 180ms ease;
}
.glossary-entry-summary{
display: grid;
gap: var(--entry-hero-gap, 14px);
padding:
calc(var(--entry-hero-pad-bottom, 18px) - 2px)
var(--entry-hero-pad-x, 18px)
var(--entry-hero-pad-bottom, 18px);
border-top: 1px solid rgba(127,127,127,0.14);
background: rgba(255,255,255,0.02);
transition: gap 180ms ease, padding 180ms ease;
}
.glossary-entry-dek{
margin: 0;
max-width: var(--entry-hero-dek-maxw, 76ch);
font-size: var(--entry-hero-dek-size, 1.04rem);
line-height: var(--entry-hero-dek-lh, 1.55);
opacity: .94;
transition:
max-width 180ms ease,
font-size 180ms ease,
line-height 180ms ease;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 4;
overflow: hidden;
}
.glossary-entry-signals{
display: flex;
flex-wrap: wrap;
gap: 7px;
margin: 0;
transition: gap 180ms ease;
}
.glossary-pill{
display: inline-flex;
align-items: center;
gap: 5px;
padding: 5px 9px;
border: 1px solid rgba(127,127,127,0.24);
border-radius: 999px;
background: rgba(127,127,127,0.05);
font-size: 12.5px;
line-height: 1.28;
transition:
padding 180ms ease,
font-size 180ms ease,
background 120ms ease,
border-color 120ms ease;
}
.glossary-pill--family{
border-color: rgba(127,127,127,0.36);
font-weight: 700;
}
.glossary-entry-meta{
margin: 0;
padding: 10px 12px;
border: 1px solid rgba(127,127,127,0.18);
border-radius: 12px;
background: rgba(127,127,127,0.04);
max-height: var(--entry-hero-meta-max-h, 12rem);
opacity: var(--entry-hero-meta-opacity, 1);
overflow: hidden;
transition:
max-height 180ms ease,
opacity 140ms ease,
padding 180ms ease,
border-color 180ms ease;
}
.glossary-entry-meta p{
margin: 0;
font-size: 13.5px;
line-height: 1.45;
}
.glossary-entry-meta p + p{
margin-top: 6px;
}
@media (max-width: 860px){
.glossary-entry-head{
position: static;
border-radius: 18px;
margin-bottom: 16px;
}
.glossary-entry-head__title{
padding: 12px 12px 10px;
}
.glossary-entry-summary{
gap: 9px;
padding: 10px 12px 12px;
}
.glossary-entry-dek{
max-width: none;
-webkit-line-clamp: 3;
}
.glossary-entry-signals{
gap: 6px;
}
.glossary-pill{
font-size: 12px;
padding: 4px 8px;
}
}
@media (max-width: 520px){
.glossary-entry-head{
border-radius: 16px;
margin-bottom: 14px;
}
.glossary-entry-head__title{
padding: 10px 10px 9px;
}
.glossary-entry-summary{
gap: 9px;
padding: 9px 10px 11px;
}
.glossary-entry-dek{
display: block;
max-width: none;
overflow: visible;
-webkit-line-clamp: unset;
-webkit-box-orient: unset;
}
.glossary-pill{
font-size: 11.5px;
padding: 3px 7px;
}
}
@media (prefers-color-scheme: dark){
.glossary-entry-meta{
background: rgba(255,255,255,0.03);
}
.glossary-pill{
background: rgba(255,255,255,0.04);
}
}
</style>

View File

@@ -0,0 +1,31 @@
---
interface Props {
canonicalHref: string;
term: string;
}
const { canonicalHref, term } = Astro.props;
---
<p class="glossary-legacy-note">
Cette entrée a été renommée. Lintitulé canonique est :
<a href={canonicalHref}>{term}</a>.
</p>
<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;
margin-bottom: 18px;
}
@media (prefers-color-scheme: dark){
.glossary-legacy-note{
background: rgba(255,255,255,0.04);
}
}
</style>

View File

@@ -0,0 +1,291 @@
<script is:inline>
(() => {
const boot = () => {
const body = document.body;
const root = document.documentElement;
const hero = document.querySelector("[data-ge-hero]");
const follow = document.getElementById("reading-follow");
const mqMobile = window.matchMedia("(max-width: 860px)");
const mqSmallLandscape = window.matchMedia(
"(orientation: landscape) and (max-width: 920px) and (max-height: 520px)"
);
if (!body || !root || !hero || !follow) return;
const BODY_CLASS = "is-glossary-entry-page";
const FOLLOW_ON_CLASS = "glossary-entry-follow-on";
let lastHeight = -1;
let lastFollowOn = null;
let raf = 0;
body.classList.add(BODY_CLASS);
const isCompactViewport = () =>
mqMobile.matches || mqSmallLandscape.matches;
const heroHeight = () => {
const rect = hero.getBoundingClientRect();
return Math.max(0, Math.round(rect.height || 0));
};
const neutralizeGlobalFollowIfCompact = () => {
if (!isCompactViewport()) {
follow.style.display = "";
return;
}
follow.classList.remove("is-on");
follow.setAttribute("aria-hidden", "true");
follow.style.display = "none";
root.style.setProperty("--followbar-h", "0px");
};
const computeFollowOn = () =>
!isCompactViewport() &&
follow.classList.contains("is-on") &&
follow.style.display !== "none" &&
follow.getAttribute("aria-hidden") !== "true";
const syncFollowState = () => {
const on = computeFollowOn();
if (on) {
if (lastFollowOn === true) return;
lastFollowOn = true;
body.classList.add(FOLLOW_ON_CLASS);
return;
}
if (lastFollowOn === false) return;
lastFollowOn = false;
body.classList.remove(FOLLOW_ON_CLASS);
};
const stripLocalSticky = () => {
document
.querySelectorAll(
".glossary-entry-body h2, .glossary-entry-body h3, .glossary-relations h2, .glossary-relations h3"
)
.forEach((el) => {
el.classList.remove("is-sticky");
el.removeAttribute("data-sticky-active");
});
};
const applyLocalStickyHeight = () => {
const h = isCompactViewport() ? 0 : heroHeight();
if (h === lastHeight) return;
lastHeight = h;
if (typeof window.__archiSetLocalStickyHeight === "function") {
window.__archiSetLocalStickyHeight(h);
} else {
root.style.setProperty("--glossary-local-sticky-h", `${h}px`);
}
};
const syncAll = () => {
neutralizeGlobalFollowIfCompact();
stripLocalSticky();
syncFollowState();
applyLocalStickyHeight();
};
const schedule = () => {
if (raf) return;
raf = requestAnimationFrame(() => {
raf = 0;
syncAll();
});
};
const followObserver = new MutationObserver(schedule);
followObserver.observe(follow, {
attributes: true,
attributeFilter: ["class", "style", "aria-hidden"],
subtree: false,
});
const heroResizeObserver =
typeof ResizeObserver !== "undefined"
? new ResizeObserver(schedule)
: null;
heroResizeObserver?.observe(hero);
window.addEventListener("resize", schedule);
window.addEventListener("pageshow", schedule);
if (document.fonts?.ready) {
document.fonts.ready.then(schedule).catch(() => {});
}
if (mqMobile.addEventListener) {
mqMobile.addEventListener("change", schedule);
} else if (mqMobile.addListener) {
mqMobile.addListener(schedule);
}
if (mqSmallLandscape.addEventListener) {
mqSmallLandscape.addEventListener("change", schedule);
} else if (mqSmallLandscape.addListener) {
mqSmallLandscape.addListener(schedule);
}
schedule();
};
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", boot, { once: true });
} else {
boot();
}
})();
</script>
<style>
:global(body.is-glossary-entry-page #reading-follow){
z-index: 10;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-head h1){
letter-spacing: -.03em;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-summary){
gap: 8px;
padding-top: 10px;
padding-bottom: 8px;
border-top-color: rgba(127,127,127,0.10);
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-dek){
display: block;
-webkit-line-clamp: unset;
overflow: visible;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-signals){
gap: 5px;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-pill){
gap: 4px;
padding: 3px 7px;
font-size: 11px;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-meta){
padding: 0;
border-color: transparent;
max-height: 0;
opacity: 0;
overflow: hidden;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on #reading-follow){
transform: none;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on #reading-follow .reading-follow__inner){
margin-top: 0;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
:global(body.is-glossary-entry-page .glossary-entry-body h2.is-sticky),
:global(body.is-glossary-entry-page .glossary-entry-body h2[data-sticky-active="true"]),
:global(body.is-glossary-entry-page .glossary-entry-body h3.is-sticky),
:global(body.is-glossary-entry-page .glossary-entry-body h3[data-sticky-active="true"]),
:global(body.is-glossary-entry-page .glossary-relations h2.is-sticky),
:global(body.is-glossary-entry-page .glossary-relations h2[data-sticky-active="true"]),
:global(body.is-glossary-entry-page .glossary-relations h3.is-sticky),
:global(body.is-glossary-entry-page .glossary-relations h3[data-sticky-active="true"]){
position: static !important;
top: auto !important;
z-index: auto !important;
padding: 0 !important;
border: 0 !important;
background: transparent !important;
box-shadow: none !important;
backdrop-filter: none !important;
-webkit-backdrop-filter: none !important;
}
@media (max-width: 860px){
:global(body.is-glossary-entry-page #reading-follow),
:global(body.is-glossary-entry-page #reading-follow .reading-follow__inner){
display: none !important;
opacity: 0 !important;
pointer-events: none !important;
visibility: hidden !important;
}
:global(body.is-glossary-entry-page){
--followbar-h: 0px !important;
--sticky-offset-px: calc(var(--sticky-header-h, 0px) + var(--page-gap, 12px)) !important;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-head){
margin-bottom: 18px;
border-radius: 20px;
box-shadow: none;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-summary){
gap: 6px;
padding-top: 8px;
padding-bottom: 8px;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-dek){
display: block;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-signals){
gap: 5px;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-pill){
padding: 3px 6px;
font-size: 10.5px;
}
}
@media (orientation: landscape) and (max-width: 920px) and (max-height: 520px){
:global(body.is-glossary-entry-page #reading-follow),
:global(body.is-glossary-entry-page #reading-follow .reading-follow__inner){
display: none !important;
opacity: 0 !important;
pointer-events: none !important;
visibility: hidden !important;
}
:global(body.is-glossary-entry-page){
--followbar-h: 0px !important;
--sticky-offset-px: calc(var(--sticky-header-h, 0px) + var(--page-gap, 12px)) !important;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-head){
margin-bottom: 14px;
border-radius: 16px;
box-shadow: none;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-summary){
gap: 5px;
padding-top: 6px;
padding-bottom: 6px;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-entry-dek){
display: none;
}
:global(body.is-glossary-entry-page.glossary-entry-follow-on .glossary-pill){
padding: 2px 6px;
font-size: 10px;
}
}
</style>

View File

@@ -0,0 +1,384 @@
---
import {
getFondamentaux,
getGlossaryHomeStats,
getGlossaryPortalLinks,
hrefOfGlossaryEntry,
} from "../lib/glossary";
const {
allEntries = [],
} = Astro.props;
const fondamentaux = getFondamentaux(allEntries);
const portalLinks = getGlossaryPortalLinks();
const {
totalEntries,
paradigmesCount,
doctrinesCount,
metaRegimesCount,
} = getGlossaryHomeStats(allEntries);
---
<nav class="glossary-home-aside" aria-label="Navigation du portail du glossaire">
<div class="glossary-home-aside__block glossary-home-aside__block--intro">
<div class="glossary-home-aside__title">Glossaire archicratique</div>
<div class="glossary-home-aside__meta">
portail de lecture · cartographie conceptuelle
</div>
<div class="glossary-home-aside__pills" aria-label="Repères de navigation">
<span class="glossary-home-aside__pill">{totalEntries} entrées</span>
<span class="glossary-home-aside__pill">{metaRegimesCount} méta-régimes</span>
<span class="glossary-home-aside__pill">
{doctrinesCount} doctrine{doctrinesCount > 1 ? "s" : ""} · {paradigmesCount} paradigme{paradigmesCount > 1 ? "s" : ""}
</span>
</div>
</div>
<details class="glossary-home-aside__block glossary-home-aside__disclosure" open>
<summary class="glossary-home-aside__summary">
<span class="glossary-home-aside__heading">Parcours du glossaire</span>
<span class="glossary-home-aside__chevron" aria-hidden="true">▾</span>
</summary>
<div class="glossary-home-aside__panel">
<ul class="glossary-home-aside__list">
{portalLinks.map((item) => (
<li><a href={item.href}>{item.label}</a></li>
))}
</ul>
</div>
</details>
{fondamentaux.length > 0 && (
<details class="glossary-home-aside__block glossary-home-aside__disclosure" open>
<summary class="glossary-home-aside__summary">
<span class="glossary-home-aside__heading">Noyau archicratique</span>
<span class="glossary-home-aside__chevron" aria-hidden="true">▾</span>
</summary>
<div class="glossary-home-aside__panel">
<ul class="glossary-home-aside__list">
{fondamentaux.map((entry) => (
<li><a href={hrefOfGlossaryEntry(entry)}>{entry.data.term}</a></li>
))}
</ul>
</div>
</details>
)}
</nav>
<style>
.glossary-home-aside{
display: flex;
flex-direction: column;
gap: 14px;
min-width: 0;
}
.glossary-home-aside__block{
border: 1px solid rgba(127,127,127,0.22);
border-radius: 16px;
padding: 14px;
background: rgba(127,127,127,0.05);
min-width: 0;
}
.glossary-home-aside__block--intro{
padding-top: 13px;
padding-bottom: 13px;
}
.glossary-home-aside__title{
font-size: 18px;
font-weight: 850;
letter-spacing: .1px;
line-height: 1.22;
}
.glossary-home-aside__meta{
margin-top: 8px;
font-size: 13px;
line-height: 1.4;
opacity: .8;
}
.glossary-home-aside__pills{
display: flex;
flex-wrap: wrap;
gap: 7px;
margin-top: 11px;
}
.glossary-home-aside__pill{
display: inline-flex;
align-items: center;
padding: 5px 10px;
border: 1px solid rgba(127,127,127,0.24);
border-radius: 999px;
background: rgba(127,127,127,0.04);
font-size: 13px;
line-height: 1.35;
opacity: .92;
min-width: 0;
}
.glossary-home-aside__disclosure{
padding: 0;
overflow: hidden;
}
.glossary-home-aside__summary{
list-style: none;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 14px;
cursor: pointer;
user-select: none;
}
.glossary-home-aside__summary::-webkit-details-marker{
display: none;
}
.glossary-home-aside__summary:hover{
background: rgba(127,127,127,0.035);
}
.glossary-home-aside__heading{
margin: 0;
font-size: 16px;
font-weight: 850;
line-height: 1.28;
opacity: .97;
}
.glossary-home-aside__chevron{
flex: 0 0 auto;
font-size: 14px;
line-height: 1;
opacity: .72;
transform: rotate(0deg);
transition: transform 160ms ease, opacity 160ms ease;
}
.glossary-home-aside__disclosure[open] .glossary-home-aside__chevron{
transform: rotate(180deg);
opacity: .96;
}
.glossary-home-aside__panel{
padding: 0 14px 14px;
}
.glossary-home-aside__list{
list-style: none;
margin: 0;
padding: 0;
}
.glossary-home-aside__list li{
margin: 7px 0;
}
.glossary-home-aside__list a{
text-decoration: none;
font-size: 14px;
line-height: 1.42;
word-break: break-word;
}
@media (max-width: 980px){
.glossary-home-aside{
gap: 8px;
margin-bottom: 12px;
}
.glossary-home-aside__block{
border-radius: 13px;
}
.glossary-home-aside__block--intro{
padding: 10px 12px;
}
.glossary-home-aside__title{
font-size: 15px;
line-height: 1.15;
}
.glossary-home-aside__meta{
display: none;
}
.glossary-home-aside__pills{
gap: 5px;
margin-top: 7px;
}
.glossary-home-aside__pill{
padding: 3px 8px;
font-size: 11px;
line-height: 1.18;
}
.glossary-home-aside__summary{
padding: 9px 11px;
}
.glossary-home-aside__heading{
font-size: 14px;
line-height: 1.15;
}
.glossary-home-aside__panel{
padding: 0 11px 10px;
}
.glossary-home-aside__list li{
margin: 4px 0;
}
.glossary-home-aside__list a{
font-size: 13px;
line-height: 1.28;
}
.glossary-home-aside__disclosure:not([open]) .glossary-home-aside__panel{
display: none;
}
}
@media (max-width: 980px){
.glossary-home-aside__disclosure{
background: rgba(127,127,127,0.045);
}
.glossary-home-aside__disclosure[open] .glossary-home-aside__summary{
border-bottom: 1px solid rgba(127,127,127,0.12);
}
}
@media (orientation: landscape) and (max-width: 920px) and (max-height: 520px){
.glossary-home-aside{
gap: 7px;
margin-bottom: 10px;
}
.glossary-home-aside__block{
border-radius: 12px;
}
.glossary-home-aside__block--intro{
padding: 9px 10px;
}
.glossary-home-aside__title{
font-size: 14px;
line-height: 1.12;
}
.glossary-home-aside__meta{
display: none;
}
.glossary-home-aside__pills{
gap: 4px;
margin-top: 6px;
}
.glossary-home-aside__pill{
padding: 2px 7px;
font-size: 10.5px;
line-height: 1.16;
}
.glossary-home-aside__summary{
padding: 8px 10px;
}
.glossary-home-aside__heading{
font-size: 13px;
line-height: 1.12;
}
.glossary-home-aside__panel{
padding: 0 10px 9px;
}
.glossary-home-aside__list li{
margin: 3px 0;
}
.glossary-home-aside__list a{
font-size: 12px;
line-height: 1.22;
}
}
@media (min-width: 981px){
.glossary-home-aside__summary{
cursor: default;
}
.glossary-home-aside__chevron{
display: none;
}
}
@media (prefers-color-scheme: dark){
.glossary-home-aside__block,
.glossary-home-aside__pill{
background: rgba(255,255,255,0.04);
}
.glossary-home-aside__summary:hover{
background: rgba(255,255,255,0.03);
}
}
</style>
<script is:inline>
(() => {
let wasCompact = null;
const syncMobileDisclosure = () => {
const stackedLayout = window.matchMedia("(max-width: 980px)").matches;
const smallLandscape = window.matchMedia(
"(orientation: landscape) and (max-width: 920px) and (max-height: 520px)"
).matches;
const compact = stackedLayout || smallLandscape;
const enteringCompact = compact && wasCompact !== true;
document
.querySelectorAll(".glossary-home-aside__disclosure")
.forEach((el) => {
if (!(el instanceof HTMLDetailsElement)) return;
if (compact) {
if (enteringCompact) {
el.open = false;
}
} else {
el.open = true;
}
});
wasCompact = compact;
};
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", syncMobileDisclosure, { once: true });
} else {
syncMobileDisclosure();
}
window.addEventListener("resize", syncMobileDisclosure);
window.addEventListener("pageshow", syncMobileDisclosure);
})();
</script>

View File

@@ -0,0 +1,748 @@
---
export interface Props {
kicker?: string;
title?: string;
intro?: string;
}
const {
kicker = "Référentiel terminologique",
title = "Glossaire archicratique",
intro = "Ce glossaire nest pas seulement un index de définitions. Il constitue une porte dentrée dans la pensée archicratique : une cartographie raisonnée des concepts fondamentaux, des scènes, des dynamiques et des méta-régimes à partir desquels une société peut être décrite comme organisation de tensions et recherche de co-viabilité.",
} = Astro.props;
---
<header class="glossary-hero" id="glossary-hero">
<p class="glossary-kicker">{kicker}</p>
<h1>{title}</h1>
<div class="glossary-hero__collapsible">
<p
class="glossary-intro"
id="glossary-hero-intro"
aria-hidden="false"
>
{intro}
</p>
<button
class="glossary-hero__toggle"
id="glossary-hero-toggle"
type="button"
aria-controls="glossary-hero-intro"
aria-expanded="false"
hidden
>
lire la suite
</button>
</div>
<h2
class="glossary-hero-follow"
id="glossary-hero-follow"
aria-hidden="true"
></h2>
</header>
<style>
.glossary-hero{
position: sticky;
top: var(--glossary-sticky-top);
z-index: 12;
margin-bottom: 28px;
padding: 14px 16px 18px;
border: 1px solid rgba(127,127,127,0.18);
border-radius: 28px;
background:
linear-gradient(180deg, rgba(0,0,0,0.60), rgba(0,0,0,0.90)),
radial-gradient(900px 240px at 20% 0%, rgba(0,217,255,0.08), transparent 60%);
transition:
padding 220ms cubic-bezier(.22,.8,.22,1),
border-radius 220ms cubic-bezier(.22,.8,.22,1),
background 300ms cubic-bezier(.22,.8,.22,1),
border-color 300ms cubic-bezier(.22,.8,.22,1),
box-shadow 300ms cubic-bezier(.22,.8,.22,1);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
display: grid;
row-gap: 12px;
min-width: 0;
overflow: clip;
}
.glossary-kicker{
margin: 0;
font-size: 12px;
letter-spacing: .12em;
text-transform: uppercase;
opacity: .72;
}
.glossary-hero h1{
margin: 0;
font-size: clamp(2.2rem, 4vw, 3.15rem);
line-height: 1.02;
letter-spacing: -.04em;
font-weight: 850;
transition:
font-size 220ms cubic-bezier(.22,.8,.22,1),
line-height 220ms cubic-bezier(.22,.8,.22,1);
min-width: 0;
}
.glossary-hero__collapsible{
display: grid;
row-gap: 6px;
min-width: 0;
}
.glossary-intro{
margin: 0;
max-width: 72ch;
font-size: 1.05rem;
line-height: 1.55;
opacity: .94;
min-width: 0;
transition:
font-size 220ms cubic-bezier(.22,.8,.22,1),
line-height 220ms cubic-bezier(.22,.8,.22,1),
max-height 220ms cubic-bezier(.22,.8,.22,1),
opacity 180ms ease;
}
:global(body[data-edition-key="glossaire"] .glossary-hero p#glossary-hero-intro){
padding-right: 0;
scroll-margin-top: 0;
}
.glossary-hero__toggle{
display: inline-flex;
align-items: center;
justify-content: center;
width: fit-content;
min-height: 30px;
padding: 3px 0;
border: 0;
border-radius: 0;
background: transparent;
color: inherit;
font-size: 12px;
line-height: 1.2;
letter-spacing: .01em;
opacity: .72;
cursor: pointer;
text-decoration: underline;
text-decoration-thickness: 1px;
text-underline-offset: 2px;
transition:
opacity 120ms ease,
transform 120ms ease;
}
.glossary-hero__toggle:hover{
opacity: .92;
transform: translateY(-1px);
}
.glossary-hero__toggle:focus-visible{
outline: 2px solid rgba(0,217,255,0.24);
outline-offset: 4px;
border-radius: 4px;
}
.glossary-hero__toggle[hidden]{
display: none !important;
}
.glossary-hero-follow{
margin: 2px 0 0;
min-height: var(--glossary-follow-height);
display: block;
max-width: min(100%, 22ch);
opacity: 0;
transform: translateY(10px) scale(.985);
filter: blur(6px);
transition:
opacity 220ms cubic-bezier(.22,1,.36,1),
transform 320ms cubic-bezier(.22,1,.36,1),
filter 320ms cubic-bezier(.22,1,.36,1);
pointer-events: none;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
will-change: opacity, transform, filter;
min-width: 0;
}
.glossary-hero-follow.is-visible{
opacity: 1;
transform: translateY(0) scale(1);
filter: blur(0);
}
:global(body.glossary-home-follow-on) .glossary-hero{
padding: 12px 14px 14px;
border-bottom-left-radius: 18px;
border-bottom-right-radius: 18px;
}
:global(body.glossary-home-follow-on) .glossary-hero h1{
font-size: clamp(1.7rem, 3.2vw, 2.2rem);
line-height: 1.02;
}
:global(body.glossary-home-follow-on:not(.glossary-home-hero-expanded)) .glossary-intro{
font-size: .94rem;
line-height: 1.34;
max-height: 2.7em;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
:global(body.glossary-home-follow-on:not(.glossary-home-hero-expanded)) .glossary-hero__toggle{
display: inline-flex;
}
@media (max-width: 760px){
.glossary-hero{
top: calc(var(--glossary-sticky-top) - 2px);
padding: 12px 14px 16px;
border-radius: 22px;
row-gap: 10px;
}
.glossary-hero h1{
font-size: clamp(1.9rem, 8vw, 2.45rem);
line-height: 1.02;
letter-spacing: -.03em;
}
.glossary-hero__collapsible{
row-gap: 7px;
}
.glossary-intro{
max-width: 100%;
width: 100%;
font-size: .98rem;
line-height: 1.44;
}
:global(body.glossary-home-follow-on) .glossary-hero{
padding: 10px 13px 12px;
border-radius: 18px;
}
:global(body.glossary-home-follow-on) .glossary-hero h1{
font-size: clamp(1.45rem, 6vw, 1.8rem);
}
:global(body.glossary-home-follow-on:not(.glossary-home-hero-expanded)) .glossary-intro{
max-width: 100%;
width: 100%;
font-size: .86rem;
line-height: 1.24;
max-height: 2.48em;
-webkit-line-clamp: 2;
opacity: .9;
}
.glossary-hero__toggle{
min-height: 28px;
font-size: 11.5px;
}
.glossary-hero-follow{
max-width: min(100%, 24ch);
}
}
@media (max-width: 520px){
.glossary-hero{
padding: 11px 12px 14px;
border-radius: 20px;
}
.glossary-intro{
max-width: 100%;
width: 100%;
font-size: .94rem;
line-height: 1.4;
}
:global(body.glossary-home-follow-on) .glossary-hero{
padding: 9px 11px 11px;
}
:global(body.glossary-home-follow-on:not(.glossary-home-hero-expanded)) .glossary-intro{
max-width: 100%;
width: 100%;
font-size: .84rem;
line-height: 1.22;
}
}
@media (orientation: landscape) and (max-width: 920px) and (max-height: 520px){
.glossary-hero{
padding: 10px 12px 12px;
border-radius: 16px;
row-gap: 8px;
}
.glossary-kicker{
font-size: 10px;
letter-spacing: .1em;
}
.glossary-hero h1{
font-size: clamp(1.35rem, 4vw, 1.8rem);
line-height: 1;
}
.glossary-intro{
font-size: .84rem;
line-height: 1.24;
}
:global(body.glossary-home-follow-on) .glossary-hero{
padding: 9px 11px 10px;
border-radius: 16px;
}
:global(body.glossary-home-follow-on) .glossary-hero h1{
font-size: clamp(1.1rem, 3vw, 1.35rem);
}
:global(body.glossary-home-follow-on:not(.glossary-home-hero-expanded)) .glossary-intro{
font-size: .8rem;
line-height: 1.18;
max-height: 2.36em;
-webkit-line-clamp: 2;
opacity: .88;
}
.glossary-hero__toggle{
min-height: 24px;
font-size: 11px;
}
.glossary-hero-follow{
max-width: min(100%, 26ch);
}
}
@media (max-width: 860px){
.glossary-hero{
position: static !important;
top: auto !important;
z-index: auto !important;
margin-bottom: 18px !important;
}
.glossary-hero-follow{
display: none !important;
min-height: 0 !important;
opacity: 0 !important;
transform: none !important;
filter: none !important;
}
}
@media (orientation: landscape) and (max-width: 920px) and (max-height: 520px){
.glossary-hero{
position: static !important;
top: auto !important;
z-index: auto !important;
margin-bottom: 14px !important;
}
.glossary-hero-follow{
display: none !important;
min-height: 0 !important;
opacity: 0 !important;
transform: none !important;
filter: none !important;
}
}
/* Neutralisation mobile/tablette : le hero n'est plus sticky, donc aucun état condensé. */
@media (max-width: 860px){
.glossary-hero{
position: static !important;
top: auto !important;
z-index: auto !important;
margin-bottom: 18px !important;
padding: 12px 14px 16px !important;
border-radius: 22px !important;
row-gap: 8px !important;
}
.glossary-hero h1,
:global(body.glossary-home-follow-on) .glossary-hero h1{
font-size: clamp(2rem, 6.2vw, 2.75rem) !important;
line-height: 1.04 !important;
letter-spacing: -.035em !important;
max-width: 100%;
overflow-wrap: normal;
word-break: normal;
hyphens: none;
text-wrap: balance;
}
.glossary-intro,
:global(body.glossary-home-follow-on:not(.glossary-home-hero-expanded)) .glossary-intro{
max-width: 100% !important;
width: 100% !important;
max-height: none !important;
overflow: visible !important;
display: block !important;
-webkit-line-clamp: unset !important;
-webkit-box-orient: unset !important;
font-size: .94rem !important;
line-height: 1.4 !important;
opacity: .94 !important;
padding-right: 0 !important;
scroll-margin-top: 0 !important;
}
.glossary-hero__toggle,
.glossary-hero-follow{
display: none !important;
}
}
/* Mobile paysage compact : même logique, mais plus dense. */
@media (orientation: landscape) and (max-width: 920px) and (max-height: 520px){
.glossary-hero{
padding: 8px 10px 9px !important;
border-radius: 14px !important;
row-gap: 5px !important;
margin-bottom: 10px !important;
}
.glossary-kicker{
font-size: 9px !important;
letter-spacing: .11em !important;
}
.glossary-hero h1,
:global(body.glossary-home-follow-on) .glossary-hero h1{
font-size: clamp(1.55rem, 4.2vw, 1.9rem) !important;
line-height: 1.03 !important;
letter-spacing: -.025em !important;
}
.glossary-intro,
:global(body.glossary-home-follow-on:not(.glossary-home-hero-expanded)) .glossary-intro{
font-size: .72rem !important;
line-height: 1.18 !important;
}
}
/* Tablette large / iPad landscape : le follow reste lisible, jamais tronqué brutalement. */
@media (min-width: 861px) and (max-width: 1240px){
.glossary-hero h1{
font-size: clamp(2.35rem, 4.2vw, 3.05rem) !important;
line-height: 1.03 !important;
}
.glossary-hero-follow{
max-width: 100% !important;
white-space: normal !important;
overflow: visible !important;
text-overflow: clip !important;
font-size: clamp(1.55rem, 3.1vw, 2.05rem) !important;
line-height: 1.08 !important;
}
}
/* =========================================================
Glossaire home — états du hero sticky
========================================================= */
/*
Principe :
- le follow peut respirer sans ellipsis brutal ;
- lintro reste strictement clampée en mode collapsed ;
- lintro ne redevient complète quen mode expanded ;
- mobile/tablette <= 860px reste neutralisé plus haut.
*/
.glossary-hero-follow{
height: auto;
max-height: none;
max-width: min(100%, 34ch);
overflow: visible;
white-space: normal;
text-overflow: clip;
line-height: 1.08;
}
:global(body.glossary-home-follow-on) .glossary-hero{
min-height: auto;
height: auto;
}
:global(body.glossary-home-follow-on) .glossary-hero h1{
white-space: normal;
overflow: visible;
text-overflow: clip;
}
/*
État collapsed :
lintro DOIT rester compactée. Cette règle doit gagner contre
les anciennes règles anti-troncature du follow.
*/
:global(body.glossary-home-follow-on:not(.glossary-home-hero-expanded)) .glossary-hero p#glossary-hero-intro{
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
line-clamp: 2;
max-height: calc(2 * 1.34em);
overflow: hidden;
white-space: normal;
text-overflow: clip;
}
:global(body.glossary-home-follow-on:not(.glossary-home-hero-expanded)) .glossary-hero__toggle{
display: inline-flex;
margin-top: 2px;
align-self: start;
}
/*
État expanded :
lutilisateur a explicitement demandé à lire la suite,
donc lintro redevient complète.
*/
:global(body.glossary-home-hero-expanded) .glossary-hero p#glossary-hero-intro{
display: block;
-webkit-line-clamp: unset;
line-clamp: unset;
-webkit-box-orient: unset;
max-height: none;
overflow: visible;
white-space: normal;
text-overflow: clip;
}
:global(body.glossary-home-hero-expanded) .glossary-hero__toggle{
display: none !important;
}
@media (min-width: 861px) and (max-width: 1240px){
.glossary-hero-follow{
max-width: min(100%, 36ch);
font-size: clamp(1.55rem, 3.1vw, 2.05rem);
line-height: 1.08;
}
}
/* =========================================================
Glossaire home — sticky compact mobile/tablette avec H2 local
========================================================= */
@media (max-width: 980px){
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"]) .glossary-hero{
position: sticky !important;
top: calc(var(--sticky-header-h, 0px) + 8px) !important;
z-index: 8 !important;
transform: none !important;
overflow: hidden !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"].glossary-home-follow-on) .glossary-hero{
padding: 8px 10px 9px !important;
row-gap: 4px !important;
border-radius: 16px !important;
margin-bottom: 10px !important;
box-shadow: 0 12px 30px rgba(0,0,0,.22) !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"].glossary-home-follow-on) .glossary-kicker{
font-size: 9px !important;
line-height: 1.05 !important;
letter-spacing: .11em !important;
opacity: .72 !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"].glossary-home-follow-on) .glossary-hero h1{
font-size: clamp(1.35rem, 5.1vw, 1.72rem) !important;
line-height: 1.02 !important;
letter-spacing: -.03em !important;
white-space: normal !important;
overflow: visible !important;
text-overflow: clip !important;
max-width: 100% !important;
margin: 0 !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"].glossary-home-follow-on:not(.glossary-home-hero-expanded)) .glossary-hero p#glossary-hero-intro{
display: -webkit-box !important;
-webkit-box-orient: vertical !important;
-webkit-line-clamp: 2 !important;
line-clamp: 2 !important;
max-height: calc(2 * 1.12em) !important;
overflow: hidden !important;
white-space: normal !important;
text-overflow: clip !important;
font-size: .72rem !important;
line-height: 1.12 !important;
opacity: .78 !important;
margin: 0 !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"]) .glossary-hero__toggle{
display: none !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"]) .glossary-hero-follow{
display: none !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"].glossary-home-follow-on) .glossary-hero-follow.is-visible{
display: block !important;
width: 100% !important;
max-width: 100% !important;
min-height: 0 !important;
margin-top: 4px !important;
padding-top: 6px !important;
border-top: 1px solid rgba(127,127,127,.18) !important;
opacity: .98 !important;
transform: none !important;
filter: none !important;
white-space: normal !important;
overflow: hidden !important;
text-overflow: clip !important;
color: inherit !important;
}
}
@media (min-width: 761px) and (max-width: 980px){
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"].glossary-home-follow-on) .glossary-hero{
padding: 10px 14px 11px !important;
row-gap: 5px !important;
border-radius: 18px !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"].glossary-home-follow-on) .glossary-hero h1{
font-size: clamp(1.65rem, 3.4vw, 2.1rem) !important;
line-height: 1.02 !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"].glossary-home-follow-on:not(.glossary-home-hero-expanded)) .glossary-hero p#glossary-hero-intro{
font-size: .82rem !important;
line-height: 1.18 !important;
max-height: calc(2 * 1.18em) !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"].glossary-home-follow-on) .glossary-hero-follow.is-visible{
margin-top: 5px !important;
padding-top: 7px !important;
}
}
@media (orientation: landscape) and (max-width: 920px) and (max-height: 520px){
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"].glossary-home-follow-on) .glossary-hero{
top: calc(var(--sticky-header-h, 0px) + 6px) !important;
padding: 6px 9px 7px !important;
row-gap: 3px !important;
border-radius: 13px !important;
margin-bottom: 8px !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"].glossary-home-follow-on) .glossary-kicker{
font-size: 8px !important;
line-height: 1 !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"].glossary-home-follow-on) .glossary-hero h1{
font-size: clamp(1.08rem, 3.2vw, 1.34rem) !important;
line-height: 1 !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"].glossary-home-follow-on:not(.glossary-home-hero-expanded)) .glossary-hero p#glossary-hero-intro{
-webkit-line-clamp: 1 !important;
line-clamp: 1 !important;
max-height: 1.08em !important;
font-size: .64rem !important;
line-height: 1.08 !important;
opacity: .72 !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"].glossary-home-follow-on) .glossary-hero-follow.is-visible{
margin-top: 3px !important;
padding-top: 4px !important;
font-size: .86rem !important;
line-height: 1.04 !important;
}
}
/* =========================================================
Glossaire home — polish premium fluidité sticky
========================================================= */
@media (max-width: 980px){
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"]) .glossary-hero{
transition:
padding 180ms ease,
border-radius 180ms ease,
box-shadow 180ms ease,
background 180ms ease,
margin-bottom 180ms ease;
will-change: padding, border-radius, box-shadow;
backface-visibility: hidden;
transform: translateZ(0) !important;
background: rgba(0,0,0,.92) !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"]) .glossary-hero h1,
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"]) .glossary-kicker,
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"]) .glossary-hero p#glossary-hero-intro{
transition:
font-size 180ms ease,
line-height 180ms ease,
opacity 180ms ease,
max-height 180ms ease;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"]) .glossary-hero-follow{
display: block !important;
max-height: 0 !important;
margin-top: 0 !important;
padding-top: 0 !important;
border-top: 0 !important;
opacity: 0 !important;
visibility: hidden !important;
overflow: hidden !important;
transform: translateY(-4px) !important;
transition:
max-height 180ms ease,
opacity 180ms ease,
transform 180ms ease,
padding-top 180ms ease,
margin-top 180ms ease;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"].glossary-home-follow-on) .glossary-hero-follow.is-visible{
max-height: 3.2em !important;
opacity: .98 !important;
visibility: visible !important;
transform: translateY(0) !important;
border-top: 1px solid rgba(127,127,127,.18) !important;
}
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"].glossary-home-follow-on) .glossary-hero{
background: rgba(0,0,0,.96) !important;
}
}
@media (orientation: landscape) and (max-width: 920px) and (max-height: 520px){
:global(body[data-edition-key="glossaire"][data-sticky-mode="glossary-home"].glossary-home-follow-on) .glossary-hero-follow.is-visible{
max-height: 2.4em !important;
}
}
</style>

View File

@@ -0,0 +1,133 @@
---
export interface Props {
id?: string;
title: string;
intro?: string;
followSection?: string;
ctaHref?: string;
ctaLabel?: string;
}
const {
id,
title,
intro,
followSection,
ctaHref,
ctaLabel,
} = Astro.props;
const resolvedFollowSection = (followSection || title || "").trim();
const showCta = Boolean(ctaHref && ctaLabel);
---
<section id={id} class="glossary-section">
<div class="glossary-section__head">
<div>
<h2 data-follow-section={resolvedFollowSection}>{title}</h2>
{intro && (
<p class="glossary-intro">{intro}</p>
)}
</div>
{showCta && (
<a class="glossary-cta" href={ctaHref}>
{ctaLabel}
</a>
)}
</div>
<slot />
</section>
<style>
.glossary-section{
margin-top: 34px;
scroll-margin-top: calc(var(--glossary-sticky-top) + 150px);
}
.glossary-section__head{
display: flex;
justify-content: space-between;
align-items: start;
gap: 14px;
flex-wrap: wrap;
margin-bottom: 12px;
}
.glossary-section h2{
margin: 0;
font-size: clamp(1.8rem, 3vw, 2.55rem);
line-height: 1.06;
letter-spacing: -.03em;
font-weight: 800;
}
.glossary-intro{
margin: 0;
max-width: 72ch;
font-size: 1rem;
line-height: 1.52;
opacity: .94;
}
.glossary-section__head .glossary-intro{
margin-top: 8px;
}
.glossary-cta{
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 38px;
border: 1px solid var(--glossary-border-strong);
border-radius: 999px;
padding: 6px 13px;
color: var(--glossary-accent);
text-decoration: none;
white-space: nowrap;
transition: transform 120ms ease, background 120ms ease;
}
.glossary-cta:hover{
background: var(--glossary-bg-soft-strong);
text-decoration: none;
transform: translateY(-1px);
}
@media (max-width: 760px){
.glossary-section{
margin-top: 24px;
scroll-margin-top: calc(var(--glossary-sticky-top) + 110px);
}
.glossary-section__head{
flex-direction: column;
align-items: stretch;
gap: 10px;
margin-bottom: 10px;
}
.glossary-section h2{
font-size: clamp(1.45rem, 6vw, 1.95rem);
line-height: 1.05;
}
.glossary-intro{
font-size: .95rem;
line-height: 1.42;
}
.glossary-section__head .glossary-intro{
margin-top: 6px;
}
.glossary-cta{
width: fit-content;
min-height: 35px;
padding: 5px 12px;
font-size: .95rem;
}
}
</style>

View File

@@ -0,0 +1,286 @@
---
interface LinkItem {
href: string;
label: string;
}
interface Props {
ariaLabel: string;
title: string;
meta?: string;
backHref?: string;
backLabel?: string;
pageItems?: LinkItem[];
usefulLinks?: LinkItem[];
}
const {
ariaLabel,
title,
meta,
backHref = "/glossaire/",
backLabel = "← Retour au glossaire",
pageItems = [],
usefulLinks = [],
} = Astro.props;
---
<nav class="glossary-portal-aside" aria-label={ariaLabel}>
<div class="glossary-portal-aside__block">
<a class="glossary-portal-aside__back" href={backHref}>{backLabel}</a>
<div class="glossary-portal-aside__title">{title}</div>
{meta && <div class="glossary-portal-aside__meta">{meta}</div>}
</div>
{pageItems.length > 0 && (
<details class="glossary-portal-aside__block glossary-portal-aside__disclosure">
<summary class="glossary-portal-aside__summary">
<span class="glossary-portal-aside__heading">Dans cette page</span>
<span class="glossary-portal-aside__chevron" aria-hidden="true">▾</span>
</summary>
<div class="glossary-portal-aside__panel">
<ul class="glossary-portal-aside__list">
{pageItems.map((item) => (
<li><a href={item.href}>{item.label}</a></li>
))}
</ul>
</div>
</details>
)}
{usefulLinks.length > 0 && (
<details class="glossary-portal-aside__block glossary-portal-aside__disclosure">
<summary class="glossary-portal-aside__summary">
<span class="glossary-portal-aside__heading">Renvois utiles</span>
<span class="glossary-portal-aside__chevron" aria-hidden="true">▾</span>
</summary>
<div class="glossary-portal-aside__panel">
<ul class="glossary-portal-aside__list">
{usefulLinks.map((item) => (
<li><a href={item.href}>{item.label}</a></li>
))}
</ul>
</div>
</details>
)}
</nav>
<style>
.glossary-portal-aside{
display: flex;
flex-direction: column;
gap: 14px;
}
.glossary-portal-aside__block{
border: 1px solid rgba(127,127,127,0.22);
border-radius: 16px;
padding: 14px;
background: rgba(127,127,127,0.05);
}
.glossary-portal-aside__back{
display: inline-block;
margin-bottom: 10px;
font-size: 14px;
font-weight: 700;
line-height: 1.35;
text-decoration: none;
}
.glossary-portal-aside__title{
font-size: 16px;
font-weight: 800;
letter-spacing: .2px;
line-height: 1.3;
}
.glossary-portal-aside__meta{
margin-top: 8px;
font-size: 13px;
line-height: 1.4;
opacity: .8;
}
.glossary-portal-aside__heading{
margin: 0 0 11px;
font-size: 14px;
font-weight: 800;
line-height: 1.35;
opacity: .94;
}
.glossary-portal-aside__list{
list-style: none;
margin: 0;
padding: 0;
}
.glossary-portal-aside__list li{
margin: 7px 0;
}
.glossary-portal-aside__list a{
text-decoration: none;
font-size: 14px;
line-height: 1.4;
}
@media (max-width: 980px){
.glossary-portal-aside{
gap: 12px;
}
.glossary-portal-aside__block{
padding: 12px;
border-radius: 14px;
}
}
@media (max-width: 760px){
.glossary-portal-aside{
gap: 10px;
}
.glossary-portal-aside__block{
padding: 11px 12px;
border-radius: 14px;
}
.glossary-portal-aside__back{
margin-bottom: 8px;
font-size: 13px;
}
.glossary-portal-aside__title{
font-size: 15px;
line-height: 1.22;
}
.glossary-portal-aside__meta{
margin-top: 6px;
font-size: 12px;
line-height: 1.32;
}
.glossary-portal-aside__heading{
margin-bottom: 8px;
font-size: 13px;
line-height: 1.22;
}
.glossary-portal-aside__list li{
margin: 5px 0;
}
.glossary-portal-aside__list a{
font-size: 12.5px;
line-height: 1.3;
}
}
@media (orientation: landscape) and (max-width: 920px) and (max-height: 520px){
.glossary-portal-aside{
gap: 8px;
}
.glossary-portal-aside__block{
padding: 9px 10px;
border-radius: 12px;
}
.glossary-portal-aside__back{
margin-bottom: 6px;
font-size: 12px;
}
.glossary-portal-aside__title{
font-size: 14px;
line-height: 1.18;
}
.glossary-portal-aside__meta{
margin-top: 4px;
font-size: 11px;
line-height: 1.24;
}
.glossary-portal-aside__heading{
margin-bottom: 6px;
font-size: 12px;
line-height: 1.18;
}
.glossary-portal-aside__list li{
margin: 4px 0;
}
.glossary-portal-aside__list a{
font-size: 11.5px;
line-height: 1.22;
}
}
@media (prefers-color-scheme: dark){
.glossary-portal-aside__block{
background: rgba(255,255,255,0.04);
}
}
.glossary-portal-aside__disclosure{
padding: 0;
overflow: hidden;
}
.glossary-portal-aside__summary{
list-style: none;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 14px;
cursor: pointer;
user-select: none;
}
.glossary-portal-aside__summary::-webkit-details-marker{
display: none;
}
.glossary-portal-aside__summary .glossary-portal-aside__heading{
margin: 0;
}
.glossary-portal-aside__disclosure:not([open]) .glossary-portal-aside__panel{
display: none;
}
.glossary-portal-aside__chevron{
flex: 0 0 auto;
font-size: 14px;
line-height: 1;
opacity: .72;
transition: transform 160ms ease, opacity 160ms ease;
}
.glossary-portal-aside__disclosure[open] .glossary-portal-aside__chevron{
transform: rotate(180deg);
opacity: .96;
}
.glossary-portal-aside__panel{
padding: 0 14px 14px;
}
@media (max-width: 980px){
.glossary-portal-aside__summary{
padding: 12px;
}
.glossary-portal-aside__panel{
padding: 0 12px 12px;
}
}
</style>

View File

@@ -0,0 +1,67 @@
---
export interface Props {
href: string;
label: string;
icon?: string;
className?: string;
}
const {
href,
label,
icon = "↗",
className,
} = Astro.props;
---
<a class:list={["glossary-portal-cta", className]} href={href}>
<span>{label}</span>
<span aria-hidden="true">{icon}</span>
</a>
<style>
.glossary-portal-cta{
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 40px;
padding: 7px 14px;
border: 1px solid rgba(127,127,127,0.24);
border-radius: 999px;
background: rgba(127,127,127,0.05);
text-decoration: none;
line-height: 1.2;
transition:
transform 120ms ease,
background 120ms ease,
border-color 120ms ease;
}
.glossary-portal-cta:hover{
transform: translateY(-1px);
background: rgba(127,127,127,0.08);
border-color: rgba(0,217,255,0.18);
text-decoration: none;
}
.glossary-portal-cta:focus-visible{
outline: 2px solid rgba(0,217,255,0.28);
outline-offset: 3px;
}
@media (max-width: 760px){
.glossary-portal-cta{
min-height: 36px;
padding: 6px 12px;
font-size: 12px;
}
}
@media (orientation: landscape) and (max-width: 920px) and (max-height: 520px){
.glossary-portal-cta{
min-height: 32px;
padding: 5px 10px;
font-size: 11px;
}
}
</style>

View File

@@ -0,0 +1,118 @@
---
export type GlossaryPortalGridItem = {
href: string;
title: string;
description: string;
meta: string;
};
export interface Props {
items?: GlossaryPortalGridItem[];
secondary?: boolean;
}
const {
items = [],
secondary = false,
} = Astro.props;
---
<div
class:list={[
"glossary-portals",
secondary && "glossary-portals--secondary",
]}
>
{items.map((item) => (
<a class="glossary-portal-card" href={item.href}>
<strong>{item.title}</strong>
<span>{item.description}</span>
<small>{item.meta}</small>
</a>
))}
</div>
<style>
.glossary-portals{
display: grid;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
gap: 12px;
margin-top: 12px;
}
.glossary-portal-card{
display: flex;
flex-direction: column;
gap: 7px;
padding: 14px 15px;
border: 1px solid var(--glossary-border);
border-radius: 16px;
background: var(--glossary-bg-soft);
text-decoration: none;
transition: transform 120ms ease, background 120ms ease, border-color 120ms ease;
}
.glossary-portal-card:hover{
transform: translateY(-1px);
background: var(--glossary-bg-soft-strong);
border-color: rgba(0,217,255,0.16);
text-decoration: none;
}
.glossary-portal-card strong{
color: var(--glossary-accent);
font-size: 1.04rem;
line-height: 1.24;
}
.glossary-portal-card span{
color: inherit;
font-size: .98rem;
line-height: 1.46;
opacity: .94;
}
.glossary-portal-card small{
color: var(--glossary-accent);
font-size: .9rem;
line-height: 1.28;
opacity: .9;
}
@media (max-width: 760px){
.glossary-portals{
grid-template-columns: 1fr;
gap: 10px;
margin-top: 10px;
}
.glossary-portal-card{
padding: 12px 12px;
border-radius: 14px;
gap: 6px;
}
.glossary-portal-card strong{
font-size: .98rem;
}
.glossary-portal-card span{
font-size: .94rem;
line-height: 1.42;
}
.glossary-portal-card small{
font-size: .85rem;
}
}
@media (prefers-color-scheme: dark){
.glossary-portal-card{
background: rgba(255,255,255,0.04);
}
.glossary-portal-card:hover{
background: rgba(255,255,255,0.07);
}
}
</style>

View File

@@ -0,0 +1,260 @@
---
interface Props {
prefix: string;
kicker: string;
title: string;
intro: string;
moreParagraphs?: string[];
introMaxWidth?: string;
followIntroMaxWidth?: string;
moreMaxHeight?: string;
}
const {
prefix,
kicker,
title,
intro,
moreParagraphs = [],
introMaxWidth = "70ch",
followIntroMaxWidth = "62ch",
moreMaxHeight = "18rem",
} = Astro.props;
---
<div
class="glossary-portal-hero glossary-page-hero"
data-glossary-portal-hero
style={`--portal-hero-intro-max-w:${introMaxWidth}; --portal-hero-follow-intro-max-w:${followIntroMaxWidth}; --portal-hero-secondary-max-h:${moreMaxHeight};`}
>
<p class="glossary-portal-hero__kicker">{kicker}</p>
<h1>{title}</h1>
<p class="glossary-portal-hero__intro glossary-portal-hero__intro--lead">
{intro}
</p>
{moreParagraphs.length > 0 && (
<div class="glossary-portal-hero__collapsible">
<div
class="glossary-portal-hero__more"
id={`${prefix}-hero-more`}
data-glossary-portal-more
aria-hidden="false"
>
{moreParagraphs.map((paragraph) => (
<p class="glossary-portal-hero__intro glossary-portal-hero__intro--more">
{paragraph}
</p>
))}
</div>
<button
class="glossary-portal-hero__toggle"
id={`${prefix}-hero-toggle`}
data-glossary-portal-toggle
type="button"
aria-controls={`${prefix}-hero-more`}
aria-expanded="false"
hidden
>
lire la suite
</button>
</div>
)}
</div>
<style>
.glossary-portal-hero{
position: sticky;
top: var(--glossary-sticky-top);
z-index: 12;
margin-bottom: var(--portal-hero-margin-bottom, 28px);
padding:
var(--portal-hero-pad-top, 20px)
var(--portal-hero-pad-x, 18px)
var(--portal-hero-pad-bottom, 22px);
border: 1px solid rgba(127,127,127,0.18);
border-radius: 28px;
background:
linear-gradient(180deg, rgba(0,0,0,0.60), rgba(0,0,0,0.92)),
radial-gradient(980px 260px at 18% 0%, rgba(0,217,255,0.08), transparent 60%);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
display: grid;
row-gap: var(--portal-hero-gap, 16px);
min-width: 0;
overflow: hidden;
transition:
background 280ms cubic-bezier(.22,.8,.22,1),
border-color 220ms cubic-bezier(.22,.8,.22,1),
box-shadow 220ms cubic-bezier(.22,.8,.22,1),
border-radius 220ms ease,
padding 220ms ease,
row-gap 220ms ease,
margin-bottom 220ms ease;
box-shadow:
inset 0 1px 0 rgba(255,255,255,0.02),
0 10px 26px rgba(0,0,0,0.08);
}
.glossary-portal-hero__kicker{
margin: 0;
font-size: var(--portal-kicker-size, 12px);
line-height: var(--portal-kicker-lh, 1.2);
letter-spacing: var(--portal-kicker-spacing, .14em);
text-transform: uppercase;
font-weight: 650;
opacity: .74;
}
.glossary-portal-hero h1{
margin: 0;
font-size: var(--portal-hero-h1-size, clamp(3rem, 4.8vw, 4.15rem));
line-height: var(--portal-hero-h1-lh, .98);
letter-spacing: var(--portal-hero-h1-spacing, -.045em);
font-weight: 850;
text-wrap: balance;
transition:
font-size 180ms ease,
line-height 180ms ease,
letter-spacing 180ms ease;
}
.glossary-portal-hero__intro{
margin: 0;
max-width: var(--portal-hero-intro-max-w, 70ch);
font-size: var(--portal-hero-intro-size, 1.06rem);
line-height: var(--portal-hero-intro-lh, 1.6);
text-wrap: pretty;
transition:
font-size 180ms ease,
line-height 180ms ease,
max-width 180ms ease,
opacity 180ms ease;
}
.glossary-portal-hero__intro--lead{ opacity: .95; }
.glossary-portal-hero__intro--more{ opacity: .89; }
.glossary-portal-hero__collapsible{
display: grid;
row-gap: 8px;
min-width: 0;
}
.glossary-portal-hero__more{
display: grid;
gap: 12px;
max-height: var(--portal-hero-secondary-max-h, 20em);
overflow: hidden;
opacity: var(--portal-hero-secondary-opacity, .92);
min-width: 0;
transition:
max-height 220ms ease,
opacity 180ms ease;
}
.glossary-portal-hero__toggle{
display: inline-flex;
align-items: center;
justify-content: center;
width: fit-content;
min-height: 34px;
padding: 5px 0;
border: 0;
border-radius: 0;
background: transparent;
color: inherit;
font-size: 12.5px;
line-height: 1.2;
letter-spacing: .01em;
opacity: .72;
cursor: pointer;
text-decoration: underline;
text-decoration-thickness: 1px;
text-underline-offset: 2px;
transition:
opacity 120ms ease,
transform 120ms ease;
}
.glossary-portal-hero__toggle:hover{
opacity: .92;
transform: translateY(-1px);
}
.glossary-portal-hero__toggle:focus-visible{
outline: 2px solid rgba(0,217,255,0.24);
outline-offset: 4px;
border-radius: 4px;
}
.glossary-portal-hero__toggle[hidden]{
display: none !important;
}
@media (max-width: 980px){
.glossary-portal-hero{
border-radius: 24px;
}
.glossary-portal-hero h1{
text-wrap: pretty;
}
.glossary-portal-hero__more{
gap: 10px;
}
}
@media (max-width: 860px){
.glossary-portal-hero{
position: static !important;
top: auto !important;
z-index: auto !important;
margin-bottom: 18px !important;
width: 100% !important;
max-width: 100% !important;
min-width: 0 !important;
}
.glossary-portal-hero h1,
.glossary-portal-hero__intro,
.glossary-portal-hero__more,
.glossary-portal-hero__collapsible{
min-width: 0 !important;
max-width: 100% !important;
}
}
@media (orientation: landscape) and (max-width: 920px) and (max-height: 520px){
.glossary-portal-hero{
position: static !important;
top: auto !important;
z-index: auto !important;
margin-bottom: 14px !important;
width: 100% !important;
max-width: 100% !important;
min-width: 0 !important;
border-radius: 16px !important;
}
.glossary-portal-hero h1,
.glossary-portal-hero__intro,
.glossary-portal-hero__more,
.glossary-portal-hero__collapsible{
min-width: 0 !important;
max-width: 100% !important;
}
}
@media (prefers-color-scheme: dark){
.glossary-portal-hero{
box-shadow:
inset 0 1px 0 rgba(255,255,255,0.02),
0 14px 34px rgba(0,0,0,0.16);
}
}
</style>

View File

@@ -0,0 +1,127 @@
---
export interface Props {
id?: string;
title: string;
count?: string;
intro?: string;
surface?: boolean;
className?: string;
}
const {
id,
title,
count,
intro,
surface = false,
className,
} = Astro.props;
---
<div
class:list={[
"glossary-portal-panel",
surface && "glossary-portal-panel--surface",
className,
]}
>
<div class="glossary-portal-panel__head">
<h3 id={id}>{title}</h3>
{count && <span class="glossary-portal-panel__count">{count}</span>}
</div>
{intro && <p class="glossary-portal-panel__intro">{intro}</p>}
<slot />
</div>
<style>
.glossary-portal-panel{
display: grid;
gap: 10px;
}
.glossary-portal-panel--surface{
padding:
var(--portal-panel-pad-y, 16px)
var(--portal-panel-pad-x, 16px);
border: 1px solid var(--glossary-border, rgba(127,127,127,0.18));
border-radius: var(--portal-panel-radius, 18px);
background:
var(--glossary-bg-soft, rgba(127,127,127,0.035));
}
.glossary-portal-panel__head{
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 10px;
flex-wrap: wrap;
}
.glossary-portal-panel__head h3{
margin: 0;
font-size: var(--portal-local-h3-size, clamp(1.35rem, 2vw, 1.7rem));
line-height: var(--portal-local-h3-lh, 1.15);
letter-spacing: -.02em;
}
.glossary-portal-panel__count{
display: inline-flex;
align-items: center;
min-height: 26px;
padding: 0 9px;
border: 1px solid rgba(127,127,127,0.20);
border-radius: 999px;
background: rgba(127,127,127,0.04);
font-size: 11.5px;
line-height: 1.2;
opacity: .8;
white-space: nowrap;
}
.glossary-portal-panel__intro{
margin: 0;
font-size: var(--portal-card-text-size, 14px);
line-height: var(--portal-card-text-lh, 1.45);
opacity: .92;
}
@media (max-width: 760px){
.glossary-portal-panel{
gap: 8px;
}
.glossary-portal-panel__head{
gap: 8px;
}
.glossary-portal-panel__count{
min-height: 23px;
padding: 0 8px;
font-size: 10.5px;
}
}
@media (orientation: landscape) and (max-width: 920px) and (max-height: 520px){
.glossary-portal-panel{
gap: 6px;
}
.glossary-portal-panel__head{
gap: 6px;
}
.glossary-portal-panel__count{
min-height: 21px;
padding: 0 7px;
font-size: 10px;
}
}
@media (prefers-color-scheme: dark){
.glossary-portal-panel--surface{
background: rgba(255,255,255,0.04);
}
}
</style>

View File

@@ -0,0 +1,143 @@
---
interface Props {
id: string;
title: string;
count?: string;
intro?: string;
final?: boolean;
className?: string;
}
const {
id,
title,
count,
intro,
final = false,
className,
} = Astro.props;
---
<section class:list={["glossary-portal-section", final && "glossary-portal-section--final", className]}>
<div class="glossary-portal-section__head">
<h2 id={id}>{title}</h2>
{count && <span class="glossary-portal-section__count">{count}</span>}
</div>
{intro && <p class="glossary-portal-section__intro">{intro}</p>}
<slot />
</section>
<style>
.glossary-portal-section{
margin-top: 30px;
}
.glossary-portal-section h2{
margin: 0;
font-size: clamp(1.8rem, 3vw, 2.35rem);
line-height: 1.05;
letter-spacing: -.03em;
font-weight: 800;
}
.glossary-portal-section__head{
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 12px;
flex-wrap: wrap;
margin-bottom: 10px;
}
.glossary-portal-section__count{
display: inline-flex;
align-items: center;
min-height: 28px;
padding: 0 10px;
border: 1px solid rgba(127,127,127,0.20);
border-radius: 999px;
background: rgba(127,127,127,0.04);
font-size: 12px;
line-height: 1.2;
opacity: .8;
white-space: nowrap;
}
.glossary-portal-section__intro{
margin: 0;
max-width: 76ch;
font-size: var(--portal-body-size, 1rem);
line-height: var(--portal-body-lh, 1.55);
opacity: .94;
}
.glossary-portal-section--final{
margin-top: 34px;
}
@media (max-width: 980px){
.glossary-portal-section{
margin-top: 24px;
}
.glossary-portal-section h2{
font-size: clamp(1.6rem, 4.4vw, 2rem);
line-height: 1.04;
}
}
@media (max-width: 760px){
.glossary-portal-section{
margin-top: 20px;
}
.glossary-portal-section__head{
gap: 8px;
margin-bottom: 8px;
}
.glossary-portal-section h2{
font-size: clamp(1.34rem, 6.5vw, 1.72rem);
line-height: 1.04;
letter-spacing: -.022em;
}
.glossary-portal-section__count{
min-height: 24px;
padding: 0 8px;
font-size: 11px;
}
.glossary-portal-section--final{
margin-top: 24px;
}
}
@media (orientation: landscape) and (max-width: 920px) and (max-height: 520px){
.glossary-portal-section{
margin-top: 16px;
}
.glossary-portal-section__head{
gap: 6px;
margin-bottom: 6px;
}
.glossary-portal-section h2{
font-size: clamp(1.12rem, 4.2vw, 1.34rem);
line-height: 1.02;
}
.glossary-portal-section__count{
min-height: 22px;
padding: 0 7px;
font-size: 10px;
}
.glossary-portal-section--final{
margin-top: 18px;
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,132 @@
---
import type { GlossaryRelationBlock } from "../lib/glossary";
import { hrefOfGlossaryEntry } from "../lib/glossary";
interface Props {
relationBlocks: GlossaryRelationBlock[];
}
const { relationBlocks = [] } = Astro.props;
const relationsHeadingId = "relations-conceptuelles";
---
{relationBlocks.length > 0 && (
<section
class="glossary-relations"
aria-labelledby={relationsHeadingId}
>
<h2 id={relationsHeadingId}>Relations conceptuelles</h2>
<div class="glossary-relations-grid">
{relationBlocks.map((block) => (
<section class={`glossary-relations-card ${block.className}`}>
<h3>{block.title}</h3>
<ul>
{block.items.map((item) => (
<li>
<a href={hrefOfGlossaryEntry(item)}>{item.data.term}</a>
<span> — {item.data.definitionShort}</span>
</li>
))}
</ul>
</section>
))}
</div>
</section>
)}
<style>
.glossary-relations{
margin-top: 14px;
padding-top: 14px;
border-top: 1px solid rgba(127,127,127,0.18);
}
@media (max-width: 760px){
.glossary-relations{
margin-top: 12px;
padding-top: 12px;
}
}
.glossary-relations h2{
margin: 0 0 12px;
font-size: clamp(1.35rem, 3vw, 1.8rem);
line-height: 1.08;
}
.glossary-relations-grid{
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 10px;
}
.glossary-relations-card{
border: 1px solid rgba(127,127,127,0.20);
border-radius: 14px;
padding: 12px 13px;
background: rgba(127,127,127,0.05);
}
.glossary-relations-card h3{
margin: 0 0 8px;
font-size: 14px;
line-height: 1.3;
}
.glossary-relations-card ul{
margin: 0;
padding-left: 16px;
}
.glossary-relations-card li{
margin-bottom: 7px;
font-size: 13.5px;
line-height: 1.42;
}
.glossary-relations-card li:last-child{
margin-bottom: 0;
}
.glossary-relations-card span{
opacity: .88;
}
@media (max-width: 760px){
.glossary-relations{
margin-top: 18px;
padding-top: 12px;
}
.glossary-relations h2{
margin-bottom: 10px;
font-size: 1.3rem;
}
.glossary-relations-grid{
grid-template-columns: 1fr;
gap: 8px;
}
.glossary-relations-card{
padding: 11px 11px;
border-radius: 13px;
}
.glossary-relations-card h3{
font-size: 13px;
margin-bottom: 7px;
}
.glossary-relations-card li{
font-size: 13px;
line-height: 1.38;
}
}
@media (prefers-color-scheme: dark){
.glossary-relations-card{
background: rgba(255,255,255,0.04);
}
}
</style>

View File

@@ -0,0 +1,307 @@
---
import type { GlossarySmartNavigation } from "../lib/glossary";
import { hrefOfGlossaryEntry } from "../lib/glossary";
interface Props {
smartNavigation?: GlossarySmartNavigation;
}
const { smartNavigation } = Astro.props;
const hasPrimary = Boolean(smartNavigation?.primaryNext);
const paths = smartNavigation?.paths ?? [];
const flows = smartNavigation?.flows ?? [];
const hasPaths = paths.length > 0;
const hasFlows = flows.length > 0;
---
{(hasPrimary || hasPaths || hasFlows) && (
<section class="glossary-smart-nav" aria-label="Navigation guidée du glossaire">
<div class="glossary-smart-nav__eyebrow">Explorer les prolongements</div>
{smartNavigation?.primaryNext && (
<div class="glossary-smart-nav__primary">
<span class="glossary-smart-nav__label">Étape suivante</span>
<a href={hrefOfGlossaryEntry(smartNavigation.primaryNext)}>
{smartNavigation.primaryNext.data.term}
</a>
{smartNavigation.primaryReason && (
<p>{smartNavigation.primaryReason}</p>
)}
</div>
)}
{hasFlows && (
<div class="glossary-smart-nav__flows" aria-label="Parcours contextuels">
<span class="glossary-smart-nav__label">Parcours contextuels</span>
<div class="glossary-smart-nav__flow-list">
{flows.map((flow) => (
flow.primaryNext && (
<a class="glossary-smart-nav__flow" href={hrefOfGlossaryEntry(flow.primaryNext)}>
<span class="glossary-smart-nav__flow-label">{flow.label}</span>
<strong>{flow.primaryNext.data.term}</strong>
{flow.primaryReason && <span>{flow.primaryReason}</span>}
</a>
)
))}
</div>
</div>
)}
{hasPaths && (
<div class="glossary-smart-nav__paths" aria-label="Parcours de lecture">
{paths.map((path) => {
const panelId = `smart-nav-${path.key}`;
return (
<div class="glossary-smart-nav__path">
<button
class="glossary-smart-nav__path-button"
type="button"
aria-expanded="false"
aria-controls={panelId}
>
<span>{path.label}</span>
<span class="glossary-smart-nav__chevron" aria-hidden="true">▾</span>
</button>
<ul id={panelId} class="glossary-smart-nav__path-panel" hidden>
{path.entries.map((entry) => (
<li>
<a href={hrefOfGlossaryEntry(entry)}>{entry.data.term}</a>
</li>
))}
</ul>
</div>
);
})}
</div>
)}
</section>
)}
<style>
.glossary-smart-nav{
margin: 14px 0 18px;
padding: 14px;
border: 1px solid rgba(127,127,127,0.20);
border-radius: 18px;
background: rgba(127,127,127,0.045);
}
.glossary-smart-nav__primary{
display: grid;
gap: 5px;
margin-bottom: 10px;
}
.glossary-smart-nav__label{
font-size: 13px;
font-weight: 800;
opacity: .76;
}
.glossary-smart-nav__primary a{
width: fit-content;
font-size: clamp(1.05rem, 2vw, 1.22rem);
font-weight: 900;
line-height: 1.18;
text-decoration: none;
}
.glossary-smart-nav__primary p{
max-width: 72ch;
margin: 0;
font-size: 14px;
line-height: 1.45;
opacity: .88;
}
.glossary-smart-nav__paths{
display: flex;
flex-wrap: wrap;
align-items: flex-start;
gap: 8px;
margin-top: 12px;
}
.glossary-smart-nav__path{
align-self: flex-start;
min-width: min(180px, 100%);
border: 1px solid rgba(127,127,127,0.18);
border-radius: 14px;
background: rgba(127,127,127,0.035);
overflow: hidden;
}
.glossary-smart-nav__path-button{
width: 100%;
border: 1px solid rgba(127,127,127,0.18);
background: rgba(127,127,127,0.06);
color: inherit;
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
padding: 8px 12px;
cursor: pointer;
font: inherit;
font-size: 13px;
font-weight: 850;
line-height: 1.25;
text-align: left;
user-select: none;
border-radius: 999px;
}
.glossary-smart-nav__path-button:hover{
background: rgba(127,127,127,0.10);
}
.glossary-smart-nav__path-button:active{
transform: scale(0.98);
}
.glossary-smart-nav__chevron{
flex: 0 0 auto;
font-size: 13px;
line-height: 1;
opacity: .72;
transform: rotate(0deg);
transition: transform 160ms ease, opacity 160ms ease;
}
.glossary-smart-nav__path-button[aria-expanded="true"] .glossary-smart-nav__chevron{
transform: rotate(180deg);
opacity: .96;
}
.glossary-smart-nav__path-panel{
margin: 0;
padding: 0 11px 10px 24px;
}
.glossary-smart-nav__path-panel[hidden]{
display: none;
}
.glossary-smart-nav__path-panel li{
margin: 5px 0;
font-size: 13px;
line-height: 1.32;
}
.glossary-smart-nav__path-panel a{
text-decoration: none;
}
.glossary-smart-nav__flows{
display: grid;
gap: 8px;
margin-top: 12px;
margin-bottom: 6px;
}
.glossary-smart-nav__flow-list{
display: grid;
gap: 8px;
}
.glossary-smart-nav__flow{
display: grid;
gap: 3px;
padding: 10px 11px;
border: 1px solid rgba(127,127,127,0.18);
border-radius: 14px;
background: rgba(127,127,127,0.035);
text-decoration: none;
}
.glossary-smart-nav__flow-label{
font-size: 12px;
font-weight: 850;
letter-spacing: .04em;
text-transform: uppercase;
opacity: .72;
}
.glossary-smart-nav__flow strong{
font-size: 14px;
line-height: 1.25;
}
.glossary-smart-nav__flow span:last-child{
font-size: 13px;
line-height: 1.35;
opacity: .84;
}
.glossary-smart-nav__eyebrow{
margin-bottom: 8px;
font-size: 12px;
font-weight: 850;
letter-spacing: .08em; /* légèrement augmenté */
text-transform: uppercase;
opacity: .78; /* un poil plus visible */
}
@media (max-width: 760px){
.glossary-smart-nav{
margin: 12px 0 16px;
padding: 12px;
border-radius: 16px;
}
.glossary-smart-nav__paths{
display: grid;
grid-template-columns: 1fr;
gap: 7px;
}
.glossary-smart-nav__path{
width: 100%;
}
}
@media (prefers-color-scheme: dark){
.glossary-smart-nav{
background: rgba(255,255,255,0.04);
}
.glossary-smart-nav__path{
background: rgba(255,255,255,0.035);
}
.glossary-smart-nav__flow{
background: rgba(255,255,255,0.035);
}
}
</style>
<script is:inline>
(() => {
document.querySelectorAll(".glossary-smart-nav").forEach((nav) => {
nav
.querySelectorAll(".glossary-smart-nav__path-button")
.forEach((button) => {
button.addEventListener("click", () => {
const panelId = button.getAttribute("aria-controls");
const panel = panelId ? document.getElementById(panelId) : null;
if (!panel || !nav.contains(panel)) return;
const expanded = button.getAttribute("aria-expanded") === "true";
const nextExpanded = !expanded;
button.setAttribute("aria-expanded", nextExpanded ? "true" : "false");
panel.hidden = !nextExpanded;
button
.closest(".glossary-smart-nav__path")
?.classList.toggle("is-open", nextExpanded);
});
});
});
})();
</script>

View File

@@ -68,7 +68,6 @@ const { initialLevel = 1 } = Astro.props;
} catch {}
}
// init : storage > initialLevel
let start = clampLevel(initialLevel);
try {
const stored = localStorage.getItem(KEY);
@@ -77,13 +76,11 @@ const { initialLevel = 1 } = Astro.props;
applyLevel(start, { persist: false });
// clicks
wrap.addEventListener("click", (ev) => {
const btn = ev.target?.closest?.("button[data-level]");
if (!btn) return;
ev.preventDefault();
// ✅ crucial : on capture la position AVANT le reflow lié au changement de niveau
captureBeforeLevelSwitch();
applyLevel(btn.dataset.level);
});
@@ -95,6 +92,8 @@ const { initialLevel = 1 } = Astro.props;
display: inline-flex;
gap: 8px;
align-items: center;
flex-wrap: wrap;
max-width: 100%;
}
.level-btn{
@@ -106,6 +105,7 @@ const { initialLevel = 1 } = Astro.props;
cursor: pointer;
user-select: none;
transition: filter .12s ease, transform .12s ease, background .12s ease, border-color .12s ease;
white-space: nowrap;
}
.level-btn:hover{
@@ -125,4 +125,21 @@ const { initialLevel = 1 } = Astro.props;
.level-btn:active{
transform: translateY(1px);
}
</style>
@media (max-width: 980px){
.level-toggle{
gap: 6px;
}
.level-btn{
padding: 5px 9px;
font-size: 12px;
}
}
@media (max-width: 760px){
.level-toggle{
display: none;
}
}
</style>

View File

@@ -3,49 +3,128 @@ const { headings } = Astro.props;
// H2/H3 seulement
const items = (headings || []).filter((h) => h.depth >= 2 && h.depth <= 3);
const tocId = `toc-local-${Math.random().toString(36).slice(2, 9)}`;
---
{items.length > 0 && (
<nav class="toc-local" aria-label="Dans ce chapitre">
<div class="toc-local__title">Dans ce chapitre</div>
<nav class="toc-local" aria-label="Dans ce chapitre" data-toc-local data-mobile-default="closed">
<button
class="toc-local__head toc-local__toggle"
type="button"
aria-expanded="false"
aria-controls={tocId}
>
<span class="toc-local__title">Dans ce chapitre</span>
<span class="toc-local__chevron" aria-hidden="true">▾</span>
</button>
<ol class="toc-local__list">
{items.map((h) => (
<li
class={`toc-local__item d${h.depth}`}
data-toc-item
data-depth={h.depth}
data-id={h.slug}
>
<a href={`#${h.slug}`} data-toc-link data-slug={h.slug}>
{h.text}
</a>
</li>
))}
</ol>
<div class="toc-local__body-clip" id={tocId} hidden>
<div class="toc-local__body">
<ol class="toc-local__list">
{items.map((h) => (
<li
class={`toc-local__item d${h.depth}`}
data-toc-item
data-depth={h.depth}
data-id={h.slug}
>
<a href={`#${h.slug}`} data-toc-link data-slug={h.slug}>
<span class="toc-local__mark" aria-hidden="true"></span>
<span class="toc-local__text">{h.text}</span>
</a>
</li>
))}
</ol>
</div>
</div>
</nav>
)}
<script is:inline>
(() => {
function init() {
const toc = document.querySelector(".toc-local");
if (!toc) return;
const toc = document.querySelector(".toc-local[data-toc-local]");
if (!toc || toc.dataset.tocReady === "1") return;
toc.dataset.tocReady = "1";
const toggle = toc.querySelector(".toc-local__toggle");
const bodyClip = toc.querySelector(".toc-local__body-clip");
const mq = window.matchMedia("(max-width: 980px)");
const KEY = `archicratie:toc-local:${window.location.pathname}`;
if (!toggle || !bodyClip) return;
const readState = () => {
try {
const v = localStorage.getItem(KEY);
if (v === "open") return true;
if (v === "closed") return false;
} catch {}
return null;
};
const writeState = (open) => {
try { localStorage.setItem(KEY, open ? "open" : "closed"); } catch {}
};
const setOpen = (open, { persist = true, emit = true } = {}) => {
const isMobile = mq.matches;
const effectiveOpen = isMobile ? open : true;
toc.classList.toggle("is-collapsed", isMobile && !effectiveOpen);
toggle.setAttribute("aria-expanded", effectiveOpen ? "true" : "false");
if (bodyClip) {
bodyClip.hidden = isMobile && !effectiveOpen;
}
if (persist && isMobile) writeState(effectiveOpen);
if (emit && effectiveOpen && isMobile) {
window.dispatchEvent(new CustomEvent("archicratie:tocLocalOpen"));
}
};
const initAccordion = () => {
if (!mq.matches) {
setOpen(true, { persist: false, emit: false });
return;
}
const stored = readState();
setOpen(stored == null ? false : stored, { persist: false, emit: false });
};
toggle.addEventListener("click", () => {
const next = toggle.getAttribute("aria-expanded") !== "true";
setOpen(next);
});
if (mq.addEventListener) {
mq.addEventListener("change", initAccordion);
} else if (mq.addListener) {
mq.addListener(initAccordion);
}
const itemEls = Array.from(toc.querySelectorAll("[data-toc-item]"));
if (!itemEls.length) return;
if (!itemEls.length) {
initAccordion();
return;
}
const ordered = itemEls
.map((li) => {
const a = li.querySelector("a[data-toc-link]");
const id = li.getAttribute("data-id") || a?.dataset.slug || "";
const depth = Number(li.getAttribute("data-depth") || "0");
const el = id ? document.getElementById(id) : null; // span.details-anchor OU h3[id]
const el = id ? document.getElementById(id) : null;
return (a && id && el) ? { id, depth, li, a, el } : null;
})
.filter(Boolean);
if (!ordered.length) return;
if (!ordered.length) {
initAccordion();
return;
}
const clear = () => {
for (const t of ordered) {
@@ -55,14 +134,29 @@ const items = (headings || []).filter((h) => h.depth >= 2 && h.depth <= 3);
};
const openDetailsIfNeeded = (el) => {
const d = el?.closest?.("details");
if (d && !d.open) d.open = true;
try {
if (!el) return;
let d = el.closest?.("details") || null;
if (!d && el.classList?.contains("details-anchor")) {
const n = el.nextElementSibling;
if (n && n.tagName === "DETAILS") d = n;
}
if (!d) {
const s = el.closest?.("summary");
if (s && s.parentElement && s.parentElement.tagName === "DETAILS") d = s.parentElement;
}
if (d && d.tagName === "DETAILS" && !d.open) d.open = true;
} catch {}
};
let current = "";
const setCurrent = (id) => {
if (!id || id === current) return;
const setCurrent = (id, { autoOpen = true } = {}) => {
if (!id) return;
const t = ordered.find((x) => x.id === id);
if (!t) return;
@@ -74,17 +168,22 @@ const items = (headings || []).filter((h) => h.depth >= 2 && h.depth <= 3);
t.a.setAttribute("aria-current", "true");
t.li.classList.add("is-current");
// ✅ IMPORTANT: plus de scrollIntoView ici
// sinon ça scroll l'aside pendant le scroll du reading => TOC global “disparaît”.
// Sur mobile/tablette, le suivi actif ne doit pas rouvrir automatiquement la TOC.
if (!mq.matches && autoOpen && toc.classList.contains("is-collapsed")) {
setOpen(true);
}
window.dispatchEvent(
new CustomEvent("archicratie:tocLocalActive", { detail: { id } })
);
};
const computeActive = () => {
const visible = ordered.filter((t) => {
const d = t.el.closest?.("details");
if (d && !d.open) {
// Si l'élément est dans <summary>, il reste visible même details fermé
const inSummary = !!t.el.closest?.("summary");
if (!inSummary) return false;
if (!inSummary && !t.el.classList?.contains("details-anchor")) return false;
}
return true;
});
@@ -102,7 +201,7 @@ const items = (headings || []).filter((h) => h.depth >= 2 && h.depth <= 3);
}
if (!best) best = visible[0];
setCurrent(best.id);
if (best && best.id !== current) setCurrent(best.id, { autoOpen: true });
};
let ticking = false;
@@ -117,11 +216,14 @@ const items = (headings || []).filter((h) => h.depth >= 2 && h.depth <= 3);
const syncFromHash = () => {
const id = (location.hash || "").slice(1);
if (!id) { computeActive(); return; }
if (!id) {
computeActive();
return;
}
const el = document.getElementById(id);
if (el) openDetailsIfNeeded(el);
setCurrent(id);
setCurrent(id, { autoOpen: false });
};
toc.addEventListener("click", (ev) => {
@@ -133,13 +235,14 @@ const items = (headings || []).filter((h) => h.depth >= 2 && h.depth <= 3);
const el = document.getElementById(id);
if (el) openDetailsIfNeeded(el);
setCurrent(id);
setCurrent(id, { autoOpen: true });
});
window.addEventListener("scroll", onScroll, { passive: true });
window.addEventListener("resize", onScroll);
window.addEventListener("hashchange", syncFromHash);
initAccordion();
syncFromHash();
onScroll();
}
@@ -153,30 +256,187 @@ const items = (headings || []).filter((h) => h.depth >= 2 && h.depth <= 3);
</script>
<style>
.toc-local{margin-top:12px;border:1px solid rgba(127,127,127,.25);border-radius:16px;padding:12px}
.toc-local__title{font-size:13px;opacity:.85;margin-bottom:8px}
.toc-local__list{list-style:none;margin:0;padding:0}
.toc-local__item::marker{content:""}
.toc-local__item{margin:6px 0}
.toc-local__item.d3{margin-left:12px;opacity:.9}
.toc-local__item.is-current > a{
font-weight: 750;
text-decoration: underline;
.toc-local{
margin-top: 12px;
border: 1px solid rgba(127,127,127,.25);
border-radius: 16px;
padding: 12px;
background: rgba(127,127,127,0.03);
}
.toc-local a{
display:inline-block;
max-width:100%;
text-decoration:none;
.toc-local__toggle{
width: 100%;
appearance: none;
border: 0;
background: transparent;
color: inherit;
text-align: left;
padding: 0;
cursor: pointer;
}
.toc-local a:hover{ text-decoration: underline; }
.toc-local__head{
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
margin-bottom: 8px;
}
.toc-local__title{
font-size: 13px;
opacity: .85;
}
.toc-local__chevron{
font-size: 12px;
opacity: .72;
transition: transform 180ms ease;
}
.toc-local__body-clip{
display: grid;
grid-template-rows: 1fr;
transition:
grid-template-rows 220ms ease,
opacity 160ms ease,
margin-top 220ms ease;
}
.toc-local__body{
min-height: 0;
overflow: hidden;
}
.toc-local__list{
list-style: none;
margin: 0;
padding: 0;
max-height: 44vh;
overflow: auto;
padding-right: 8px;
scrollbar-gutter: stable;
}
</style>
.toc-local__item::marker{ content:""; }
.toc-local__item{ margin: 6px 0; }
.toc-local__item.d3{
margin-left: 14px;
opacity: .94;
}
.toc-local a{
display: grid;
grid-template-columns: auto 1fr;
gap: 8px;
align-items: start;
max-width: 100%;
text-decoration: none;
}
.toc-local a:hover{
text-decoration: none;
}
.toc-local__mark{
width: 10px;
height: 10px;
margin-top: .36em;
border-radius: 999px;
border: 1px solid rgba(127,127,127,.34);
background: transparent;
opacity: .68;
}
.toc-local__text{
line-height: 1.28;
}
.toc-local__item.is-current > a{
font-weight: 760;
}
.toc-local__item.is-current > a .toc-local__mark{
background: currentColor;
border-color: currentColor;
box-shadow: 0 0 0 3px rgba(127,127,127,.10);
opacity: 1;
}
@media (max-width: 980px){
.toc-local{
padding: 10px 12px;
border-radius: 14px;
}
.toc-local__head{
margin-bottom: 0;
min-height: 28px;
}
.toc-local__body-clip{
margin-top: 10px;
}
.toc-local.is-collapsed .toc-local__body-clip{
grid-template-rows: 0fr;
opacity: 0;
margin-top: 0;
}
.toc-local__body{
min-height: 0;
overflow: hidden;
transition: opacity 180ms ease;
}
.toc-local.is-collapsed .toc-local__body{
opacity: 0;
}
.toc-local.is-collapsed .toc-local__chevron{
transform: rotate(-90deg);
}
.toc-local__title{
font-size: 13px;
}
.toc-local__list{
max-height: min(42vh, 360px);
padding-right: 4px;
}
.toc-local__item{
margin: 5px 0;
}
.toc-local__item.d2 > a .toc-local__text{
font-size: 12.9px;
line-height: 1.24;
font-weight: 680;
}
.toc-local__item.d3{
margin-left: 12px;
}
.toc-local__item.d3 > a .toc-local__text{
font-size: 12.1px;
line-height: 1.22;
opacity: .95;
}
.toc-local__item.d3 > a .toc-local__mark{
width: 8px;
height: 8px;
margin-top: .42em;
opacity: .55;
}
.toc-local__body-clip[hidden]{
display: none !important;
}
}
</style>

View File

@@ -382,7 +382,7 @@
return;
}
if (Array.isArray(data.authors) && data.authors.length) {
if (Array.isArray(data.mobilizedAuthors) && data.mobilizedAuthors.length) {
const h = document.createElement("h3");
h.className = "panel-subtitle";
h.textContent = "Auteurs";
@@ -390,7 +390,7 @@
const ul = document.createElement("ul");
ul.className = "panel-list";
for (const a of data.authors) {
for (const a of data.mobilizedAuthors) {
const li = document.createElement("li");
li.textContent = esc(a);
ul.appendChild(li);

View File

@@ -1,17 +1,27 @@
---
const path = Astro.url.pathname;
const isActive = (href: string) => {
if (href === "/") return path === "/";
return path === href || path.startsWith(href);
};
---
<nav class="site-nav" aria-label="Navigation principale">
<a href="/" aria-current={isActive("/") ? "page" : undefined}>Accueil</a>
<span aria-hidden="true"> · </span>
<a href="/">Accueil</a>
<span aria-hidden="true"> · </span>
<a href="/manifeste/" aria-current={isActive("/manifeste/") ? "page" : undefined}>Manifeste</a>
<span aria-hidden="true"> · </span>
<a href="/archicrat-ia/">Essai-thèse</a>
<span aria-hidden="true"> · </span>
<a href="/archicrat-ia/" aria-current={isActive("/archicrat-ia/") ? "page" : undefined}>Essai-thèse</a>
<span aria-hidden="true"> · </span>
<a href="/cas-ia/">Cas IA</a>
<span aria-hidden="true"> · </span>
<a href="/cas-ia/" aria-current={isActive("/cas-ia/") ? "page" : undefined}>Gouvernance IA</a>
<span aria-hidden="true"> · </span>
<a href="/glossaire/">Glossaire</a>
<span aria-hidden="true"> · </span>
<a href="/recherche/">Recherche</a>
<a href="/glossaire/" aria-current={isActive("/glossaire/") ? "page" : undefined}>Glossaire</a>
<span aria-hidden="true"> · </span>
<a href="/recherche/" aria-current={isActive("/recherche/") ? "page" : undefined}>Recherche</a>
</nav>

View File

@@ -47,6 +47,36 @@ const archicratIa = defineCollection({
})
});
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",
@@ -54,12 +84,56 @@ const glossaire = defineCollection({
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([])
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()
})
});

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,251 +1,471 @@
---
title: "Conclusion — ArchiCraT-IA"
edition: "archicratie"
status: "modele_sociopolitique"
title: Conclusion — Lexigence archicratique
edition: archicrat-ia
status: essai_these
level: 1
version: "0.1.0"
version: 0.1.0
concepts: []
links: []
order: 70
summary: ""
summary: ''
source:
kind: docx
path: "sources/docx/archicrat-ia/Conclusion-Archicrat-IA-version_officielle.docx"
path: sources/docx/archicrat-ia/ConclusionArchicratie-La_tenue_des_mondes-version_resserree.docx
---
Nous nassistons ni à un retour primordial du désordre ni à une raréfaction du pouvoir. Nous assistons à autre chose, plus discret et plus décisif : la montée en régime dune régulation sans scène, où la plupart des décisions qui engagent nos vies sont prises et appliquées sans lieu institué dénonciation, sans temps de différé, sans exposition reconnaissable de leurs auteurs. La conflictualité ne disparaît pas, elle est déportée : reconfigurée en flux, en scores, en interfaces, en procédures qui se présentent comme de simples enchaînements techniques, alors même quelles opèrent des choix normatifs massifs.
Ce manque nest pas un vide. Il ne signifie ni labsence de normes, ni leffondrement du pouvoir, mais ce que nous avons appelé, dans cet essai-thèse, une *oblitération archicratique* : le recouvrement progressif de la scène par la seule *cratialité*, cest-à-dire par des dispositifs dexécution qui se substituent à la mise en débat des fondements et des effets. Ce nest pas le pouvoir qui manque, cest la possibilité de le voir, de le nommer, de ladresser. La régulation se donne alors comme évidence fonctionnelle, là où elle devrait apparaître comme ce quelle est toujours : un ordre situé, contestable et révisable en respect des promesses démocratiques.
La thèse défendue ici nest pas que toute scène aurait disparu, ni que lhistoire se réduirait à un glissement univoque vers lautomatisation intégrale. Elle est plus précise et plus falsifiable : dans les principaux dispositifs contemporains sociaux, écologiques, numériques , les conditions dexistence dune scène archicrative sont systématiquement affaiblies, fragmentées, reléguées à la marge. Là où lon pouvait autrefois identifier un lieu, un temps, des personnes et des procédures pour organiser et mettre à lépreuve les décisions, nous rencontrons désormais, de manière récurrente, des agencements où lénonciation sefface derrière la mesure, la simulation, la plateformisation et lautomatisation.
Cest pourquoi nous avons forgé la notion d*oblitération archicratique* : non pas labsence de tout recours, mais la tendance structurelle à produire de la norme hors scène, à démultiplier les dispositifs auto-référés architectures, algorithmes, barèmes, chaînes logistiques les supports dune régulation qui se déclare purement opératoire, *autarchicratique*. Cette hypothèse est réfutable : elle serait démentie si lon observait, de façon durable, que les grandes décisions collectives demeurent adossées à des scènes dépreuve robustes, effectives, où les fondements et les effets peuvent être mis en discussion. Elle gagnerait, inversement, en pertinence si des enquêtes empiriques mettent en évidence linaccessibilité des recours, lineffectivité des délibérations politiques, la surdétermination des décisions par des scripts non publics protégés par le droit des affaires.
Dans cette perspective, l*archicratie* nest ni un idéal abstrait, ni un type de régime supplémentaire quil sagirait dajouter à la liste déjà longue des formes politiques. Elle désigne la *condition minimale pour que la régulation soit habitable* : la possibilité, pour une société, dinstituer et de maintenir un seuil où l*arcalité* (ce qui fonde et justifie), la *cratialité* (ce qui opère et exécute) et l*archicration* (ce qui met en épreuve, suspend, requalifie) demeurent distinctes, articulées et exposées. Un ordre est archicratique en ce sens précis : non parce quil serait juste ou égalitaire par essence, mais parce quil se laisse amener en scène, devant des instances où ses prétentions peuvent être critiquées, ses instruments retravaillés, ses effets révisés.
Lenjeu de cette conclusion est de formuler une hypothèse régulatrice : la *co-viabilité* des collectifs humains et non-humains dépend de la capacité à maintenir, à rouvrir, à inventer des scènes dépreuve où lon puisse adresser le pouvoir qui nous affecte. En nommant l*archicratie*, nous ne sacralisons pas un modèle ; nous désignons un seuil au-dessous duquel la régulation se dégrade en pure opération, et au-dessus duquel elle devient au moins discutable, opposable, révisable, modifiable, différant.
Cest là seulement que prend sens le projet dune “cinquième révolution régulatrice”. Non pas un nouvel âge dor, ni une résolution miraculeuse des contradictions, mais un changement de régime dans la manière même de fabriquer la régulation : un tournant où la scène longtemps tenue pour « simple décor du pouvoir », ou pour « luxe démocratique » redeviendrait son opérateur central. Lambition de ce texte nest pas de prédire cette révolution, et moins encore de la prescrire. Il sagit de montrer en quel sens elle est pensable, souhaitable, et sous quelles conditions elle pourrait être mise à lépreuve et mise en pratique.
Ce que nous observons nest ni une défaillance accidentelle du cadre démocratique, ni une déviation autoritaire des gouvernances contemporaines, mais une mutation profonde des formes de régulation effective qui tendent à se configurer hors-scène démocratique instituée. Dans ce modèle, le pouvoir tend à se déporter hors scène instituée : privatisé, déterritorialisé, encapsulé, automatisé, rendu algorithme, crypté, incompréhensible et incritiquable du fait de sa propre efficacité. Il ne sexplique plus, il fonctionne. Il ne sadresse plus, il déclenche. Il ne fonde plus, il applique. Et la régulation tend à se déporter hors scène instituée, tandis que persistent des scènes partielles, alternatives ou multilatérales quil faut reconnaître et saluer. Que ce soit la méta-fédération des soulèvements de la Terre, ou linitiative internationale PauseIA, pour ne nommer que ces deux, leurs discours et leurs expertises apportent informations et discernements sur les enjeux écologiques et les développements dintelligences artificielles.
Le processus est dautant plus difficile à saisir quil est continu, fonctionnel, présenté comme neutre. Les interfaces remplacent les guichets, les tableaux de bord supplantent les délibérations, les retours algorithmiques prennent la place de la justification publique. Le conflit est désamorcé au nom de la fluidité. Le délai est perçu comme dysfonction. Lexposition est dégradée en transparence visuelle sans énoncé.
Le terme doblitération archicratique, proposé et conceptualisé dans les chapitres précédents, désigne exactement cette dynamique : une substitution douce, mais décisive, de la scène par lexécution, du différé par lautomaticité, de lénonciation par la trace, de lépreuve par la donnée. Cette oblitération ne se donne pas comme rupture, mais comme évidence : elle agit dans la logique même des dispositifs, dans leur conception, leur design, leur temporalité.
Il faut ici refuser toute simplification. Si la scène instituée se raréfie, des scènes latérales, résiduelles ou émergentes persistent (communautés locales, contre-institutions, pratiques rituelles), il est grand temps de les reconnaître et de les légitimer au lieu de les folkloriser. Ce monde sans scène nest ni totalement anarchique, ni totalement chaotique, ni même nécessairement injuste dans ses effets immédiats. Il est, en revanche, injustifiable. Il est insoutenable dans le temps, car il est aveugle à sa propre normativité. Il ne dispose daucun espace dans lequel ses propres décisions peuvent être rejouées, exposées, interrogées, rediscutées ou reformulées.
Cette régulation sans scène est une régulation sans mémoire, sans récit, sans réversibilité. Elle fonctionne, et souvent très efficacement. Mais elle ne critique rien, ne se confronte à rien, ne se relance jamais à partir de ses propres limites. Elle produit de la norme sans fondement énoncé, du pilotage sans institution, de la gouvernance sans fondation, un pouvoir simulé à tout moment proche du simulacre.
Les conséquences sont majeures. On croit pouvoir protester, mais linterlocuteur est absent. On tente un recours, mais le délai est dépassé avant même davoir commencé. On cherche le fondement dune décision, mais on ne trouve quun critère, un score, une règle dapplication sans justification. Derrière la façade defficacité, ce qui sinstalle, cest un monde post-scénique, dans lequel les gouvernés nont plus despace institué pour adresser la régulation qui les constitue.
Ce diagnostic nest pas une vérité révélée, mais une hypothèse régulatrice : il postule que, dans les principaux dispositifs contemporains (sociaux, écologiques, numériques), linstance scénique a été reléguée au profit dune *cratialité autarcique*. Il pourrait être réfuté par des recherches qui montreraient linverse, par exemple des domaines où des scènes archicratives fortes subsistent et structurent réellement les décisions. Il serait confirmé, au contraire, par des enquêtes qui objectiveraient linaccessibilité des scènes, lineffectivité des recours, la pure performativité des algorithmes.
Et cest précisément là que souvre une nécessité, celle de refonder la scène comme condition première de toute co-viabilité. Une scène véritable : espace différé, public, opposable, fondé — nullement décorative ni consultative. Une scène où la décision peut être relancée. Où le fondement peut être demandé. Où le délai est un droit. Où lépreuve est reconnue comme condition de la légitimité.
Cette scène, cest ce que nous avons nommé, construit, modélisé et mis à lépreuve : l*archicration*. Et cest depuis son absence — criante et tout à la fois quasi imperceptible — que la cinquième révolution régulatrice devient pensable et indispensable.
Au seuil dune ère où la capacité à ordonner, à segmenter, à attribuer ou à refuser se maintient sans que jamais ces gestes soient exposés à une scène dépreuve instituée, la nécessité dun concept opératoire, capable de désigner la forme régulatrice minimale dun monde habitable, simpose. Ce concept, l*archicratie*, nous lavons forgé, au-delà de la nécessité dinvention lexicale, comme condensation critique dun constat systémique.
L*archicratie* ne renvoie ni à un type de régime spécifique, ni à une forme de gouvernement, ni même à une institution particulière. Elle ne se laisse classer dans aucune catégorie traditionnelle de la philosophie politique, car elle opère en amont des structures représentatives, et en-deça et au-delà des appareils juridiques. Elle est le mode de consistance scénique dune régulation soutenable, cest-à-dire dun ordre qui accepte dêtre mis en épreuve, dêtre différé dans son exécution, dêtre reconfiguré à partir de sa propre exposition sous critères de viabilité. Il sagit donc du régime dapparition du pouvoir fondé, là où une décision peut être tenue, dans le temps et dans lespace, devant ceux quelle affecte, au sein dune scène constituée pour quelle puisse être questionnée, retardée, amendée, voire annulée.
Dans cette perspective, l*archicratie* nest ni utopie ni abstraction : elle fixe la condition de viabilité de tout dispositif qui prétend réguler — affecter des conduites, orienter des possibles, ouvrir/fermer des accès — sans se refermer sur une logique exclusivement opératoire. Il ne sagit pas ici de défendre une figure morale du pouvoir, mais de poser une exigence structurelle : aucune régulation nest légitime si elle ne peut être exposée à son propre fondement. Et aucune scène dexposition nest opérante si elle ne permet pas la convocation des énonciateurs, la traçabilité des instruments, la suspension des effets, la confrontation des justifications et la reconfiguration des décisions.
L*archicratie* devient ainsi le seuil entre une régulation purement fonctionnelle, capable dexécuter des procédures, de reproduire des normes, de gérer des flux automatisés et une régulation fondée, visible, opposable, justifiable, révisable — cest-à-dire co-viable décidée par des humains.
Comme annoncé dans le Prologue, cette conclusion opère la remontée critique à partir des cinq épreuves de notre essai-thèse : (1) lépreuve de détectabilité des régimes (chapitre 1), (2) larchéogenèse des formes scéniques de régulation (chapitre 2), (3) la morphologie des régimes de pouvoir (chapitre 3), (4) la généalogie des révolutions régulatrices (chapitre 4), et (5) les tensions de co-viabilité au sein des dispositifs contemporains (chapitre 5).
Pour penser ce seuil, notre essai-thèse a posé les conditions de détection dune régulation minimale, structurée autour de trois prises fondamentales, dont la coprésence différenciée et articulée constitue la grammaire de toute régulation habitée. Ces trois prises — *arcalité, cratialité, archicration* — ne sont pas des dimensions logiques. Elles sont des formes dexistence différenciées de lordre régulateur.
Comme nous lavons vu, l*arcalité* désigne la condition dénonciation du pouvoir. Elle ne se réduit pas à une source légale ou à une tradition instituée. Elle renvoie à la capacité dun dispositif à exposer son propre fondement comme fondement, à dire : "voici sur quoi nous agissons, pourquoi, selon quelle vision du monde, selon quelle fiction ou axiome opératoire". Dans une régulation archicratique, l*arcalité* est convoquée, nommée, rendue visible, tenue.
La *cratialité*, quant à elle, nest pas simplement lopérativité technique. Elle est lensemble des vecteurs concrets dapplication du pouvoir, quil sagisse de normes, dalgorithmes, de barèmes, de codes juridiques, de métriques ou dinterfaces. Cest le pouvoir dans sa matérialité dexécution. Loin de nêtre quun détail de mise en œuvre, la *cratialité* constitue une scène en elle-même : celle où les affects se traduisent en effets, celle où le monde se divise, sorganise, se hiérarchise. Toute *cratialité* rendue opaque tend à devenir *hypertopique*.
Enfin, l*archicration* désigne la scène elle-même : lespace-temps de lépreuve régulatrice. Il ne se réduit pas à un dispositif de concertation ou à un droit de recours formel, mais bien plus à une scène effective, où le délai est institué, où les énoncés sont exposés, où les décisions sont suspendues, et où les parties affectées peuvent agir sur les termes mêmes de la régulation. Une *archicration* est une scène fondée, différée, ouverte, documentée, capable de transformer ce quelle expose. Elle se doit donc dêtre publique et aucunement privée.
Ces trois prises ne sont jamais données demblée. Elles sont inégalement distribuées, plus ou moins visibles, plus ou moins consolidées. Ce que permet l*archicratie*, cest den faire un modèle danalyse différentielle, capable dévaluer non ce que les institutions disent delles-mêmes, mais ce quelles rendent effectivement détectable, contestable, modifiable.
Cest à ce titre que nous avons élaboré une axiomatique de la détectabilité régulatrice, qui ne repose pas sur la conformité juridique, mais sur des critères structurels : la coprésence des prises ; leur différenciation fonctionnelle ; la publicité du fondement ; lopposabilité des normes ; la révision périodique ; le droit au différé contradictoire.
Ce modèle ne soppose pas aux régimes existants. Il les requalifie selon une grammaire de viabilité. Il ne dit pas ce qui est souhaitable. Il indique ce qui est soutenable.
Au terme de ce parcours, notre essai-thèse propose dabord une *grammaire minimale de la régulation habitable*, en distinguant rigoureusement *arcalité, cratialité* et *archicration* comme trois prises irréductibles mais articulables du pouvoir. Il offre ensuite une archéogenèse comparée des méta-régimes régulateurs, qui permet de lire des configurations très hétérogènes proto-symboliques, scripturaires, marchandes, guerrières, techno-logistiques sans les rabattre sur le seul État, le seul marché ou la seule souveraineté. Il recompose en outre les “révolutions industrielles” comme des *révolutions régulatrices*, cest-à-dire comme des histoires différentielles de la scène et de son oblitération, jusquau diagnostic contemporain d*autarchicratie* et de *régulation hors scène*. Enfin, il élabore une politique des épreuves viables, en substituant à la fiction de la durabilité le paradigme de la *co-viabilité archicratique*, et en proposant quelques gestes concrets par lesquels cette exigence pourrait être mise à lépreuve dans les institutions, les territoires et les dispositifs numériques.
Là réside le geste décisif : faire de l*archicratie* une condition de lisibilité du pouvoir, dans un monde où les décisions sont de plus en plus produites sans fondement explicité, en accès et décision privés, appliquées sans seuil dentrée et exécutées sans scène dexposition explicite (algorithmes de recommandations, IA générative, etc.).
En nommant l*archicratie*, ce que nous faisons, ce nest pas inventer une utopie : cest dégager, à partir des marges critiques de la modernité régulatrice, un principe de consistance qui permet de discerner ce qui peut encore être appelé régulation — et ce qui ne relève plus que de lautomatisation du monde, son *autarchicratie*.
Comme lécrivait Claude Lefort, “le lieu du pouvoir est vide, et le pouvoir est un lieu duquel personne ne peut sarroger la propriété” : cest ce vide fondateur qui, sans scène, devient mutisme algorithmique. Larchicration ne cherche pas à combler ce vide, mais à en réinstituer ladresse. Car l*archicratie* nest pas lalternative à un système. Elle est ce qui rend possible le fait même quun système puisse tenir, mais aussi être interrompu, contesté et refondé. Elle est la condition minimale de tout ordre qui ne veut pas être sa propre clôture et sa pure et propre reproduction sociale.
Ce que nous avons appelé scène nest ni une métaphore théâtrale, ni un artifice rhétorique, ni un dispositif de communication. Elle nest pas le lieu décoratif du pouvoir. Elle nest pas ce que lon ajoute, une fois la régulation pensée, pour en valider symboliquement lacceptabilité. Elle est, à linverse, la matrice originaire doù émerge toute forme de régulation vivable, bien avant lÉtat, bien avant le droit, et en dehors des grammaires modernes du gouvernement.
Lhistoire politique des sociétés humaines ne commence pas avec linstitution étatique. Elle commence par lapparition de lieux différés dans lesquels le pouvoir se donne à voir, se laisse convoquer, se met en épreuve. Partout où lon observe la mise en forme de relations collectives durables, on trouve, en amont de la codification, des scènes dajournement et de dispute — des espaces de rituel, de conseil, de circulation de paroles, de suspension du geste immédiat.
Les premières figures de la régulation ne sont pas des lois, mais des cercles. Ce sont des feux autour desquels on raconte ce qui a été fait, ce qui pourrait être fait autrement, ce qui doit être décidé ensemble. Ce sont des seuils marqués, des temps de deuil ou de conflit ajourné, des prises de parole dans lépure, où lévénement est reconvoqué dans un espace plus grand que lui. Cest ici que sinstitue, sans formalisation juridique, la première *archicration* : une scène anthropologique de différé, de dispute et de co-présence du conflit.
Larchéogenèse de la scène, telle que nous lavons retracé, ne vise pas à plaquer une origine sur le concept d*archicratie*. Elle permet de montrer que lexposition du pouvoir au regard des autres nest pas un luxe moderne, mais une fonction vitale de toute organisation collective. On ne fonde pas une cité parce que lon a établi une loi ; on fonde une cité parce que lon a produit un lieu dans lequel des lois pouvaient être explicitées, différées, adressées et même révisées.
Les régimes que nous considérons comme proto-politiques ne reposent pas sur des appareils coercitifs permanents, mais sur des dispositifs de régulation publique des différends. Ce que lon appelait jadis “conseil des anciens”, “assemblée des vivants”, “place de palabres”, “moment du jugement”, sont autant de scènes dans lesquelles une communauté suspend lexécution brute des normes pour produire, en commun, un réexamen des conditions du vivre-ensemble.
Il y a ici un renversement majeur : ce nest pas la violence qui précède lordre, mais la scène qui ajourne la violence par son existence et son efficience. Loin dêtre un ornement cérémoniel, la scène permet de transformer une décision en acte politique, en la soumettant à un espace dapparition partagé. On ne gouverne pas parce quon détient un pouvoir, on gouverne parce que lon accepte dexposer le pouvoir dans un lieu où il peut être contes.
Et ce geste ne disparaît pas avec la modernité : il se déplace, se reconfigure, parfois se cache. Les formes scéniques de lépoque moderne — parlements, tribunaux, conseils, consultations — ne sont pas des innovations *ex nihilo*, mais des transpositions institutionnelles dune exigence anthropologique fondamentale : rendre le pouvoir visible dans un espace différé, public, contradictoire pour le légitimer dans son autorité.
Ce que nous appelons aujourdhui *archicratie*, à travers le triptyque *arcalité-cratialité-archicration*, ne naît donc pas avec la gouvernance algorithmique, ni avec la crise contemporaine des institutions : cest le nom que nous donnons à une exigence anthropologique longue — rendre le pouvoir visible dans un espace différé, public, contradictoire — que les mutations modernes ont partiellement codifiée, mais jamais totalement effacée. Même les régimes autoritaires, même les appareils technocratiques les plus opaques, tentent de simuler la scène, den mimer les apparences, comme si toute régulation devait, dune manière ou dune autre, sappuyer sur une forme scénique minimale, fût-elle falsifiée, spectaculaire, dé-saisissante ou accablante.
Leffondrement actuel, tel que nous le décrivons, ne réside pas dans une rupture historique absolue, mais dans une disjonction cumulative, où la régulation devient performative, prédictive, auto-exécutive, tout en prétendant conserver lapparence de la scène. Ce que les plateformes administratives, les interfaces de recours, les simulateurs dopinion, les visualisations de données simulent, ce nest pas la norme — cest le différé. Ce nest pas la décision — cest la contestation.
En ce sens, réinstituer la scène aujourdhui revient à réactiver une fonction anthropologique enfouie, plutôt quà restaurer une forme passée enfouie sous les couches technocratiques, une fonction sans laquelle aucun ordre collectif ne peut être su, ajusté, ni corrigé, ni habité. Nous ne parlons pas ici de restauration, plutôt dun geste de fondation renouvelé : retrouver la capacité de construire des espaces différés dapparition du pouvoir, où la norme peut être visible, où la décision peut être suspendue, où leffet peut être discuté, et où le fondement peut être relancé.
Lhistoire de la scène est celle de lajournement du pouvoir brut au nom dune *co-présence* instituée du conflit. Et cest à cette hauteur anthropologique que l*archicratie* trouve son origine : non dans une forme constitutionnelle, mais dans la structure même du fait politique, dès lors quil accepte de sexposer à autre chose que sa propre exécution.
Ce que nous appelons *co-viabilité* nest pensable que dans cette tension : entre un pouvoir qui affecte, et un espace où cette affectation peut être exposée. La scène est le seul lieu où cette tension devient habitable, cest-à-dire vivable, réformable, traversable. Sans scène, ce sont alors des processus, des opérations, des machines qui dominent.
Cest pourquoi, dans notre essai-thèse, l*archicration* nest jamais une solution institutionnelle, ni une forme de gouvernement. Elle est la condition minimale dun monde capable de sinterrompre pour se refonder. Elle est ce qui permet, encore et toujours, de revenir sur ce qui est en train de simposer. Elle est le lieu de surgissement de la viabilité.
Et cest à partir de cette scène — non comme décor, mais comme forme originaire de la dispute différée — que peut se penser la cinquième révolution régulatrice, non comme innovation technologique, mais comme retour conscient à une exigence anthropologique que lhistoire na jamais pu dissoudre.
Il nest désormais plus possible danalyser la question de la régulation sans la confronter à ses deux périls contemporains les plus massifs, les plus urgents, les plus irréversibles : la désintégration sociale et linhabitation écologique. Ces deux lignes de fracture ne constituent pas des petits “sujets” parmi dautres, ni même des crises externes au champ de la régulation. Elles sont les lieux mêmes où se joue la soutenabilité du monde commun, et à partir desquels se manifeste avec la plus grande intensité la nécessité dune scène archicratique instituée.
Dun côté, les sociétés contemporaines sont travaillées par une fragmentation socio-économique accélérée, où les droits, les protections, les accès aux ressources, à la santé, à lhabitat, au travail, à la dignité même, sont de plus en plus conditionnés par des régimes de critères invisibles, des barèmes automatisés, des normes silencieuses dont la contestation na ni lieu ni délai. Ce que produit cette fragmentation, ce nest pas simplement de linjustice cest une dés-institution du social, un abandon de la possibilité de fonder lordre sur une scène où les règles peuvent être exposées, comprises, opposées, amendées.
De lautre côté, lenvironnement planétaire est soumis à un processus de désintégration physique, chimique, biologique, systémique, dont les causes sont connues, mesurées, modélisées — mais dont la régulation demeure hors scène. Les grands instruments du pilotage écologique (quotas carbone, marché de droits démission, régulations incitatives, taxonomies vertes, solutions technologiques à haute intensité énergétique) ne répondent pas à une scène fondée de délibération environnementale. Ils opèrent à partir dindicateurs pré-déterminés, de modèles économétriques rendus irréfutables, dinstitutions fermées dont les critères ne sont ni exposés, ni opposables.
Dans les deux cas, ce que lon appelle régulation nest souvent rien dautre quun régime dadministration automatique de la catastrophe, une façon de moduler les seuils dacceptabilité de linacceptable, de stabiliser temporairement des déséquilibres massifs sans jamais exposer les choix, les arbitrages, les priorités, à une scène dépreuve collective.
Le mot “durabilité”, en ce sens, est devenu lun des opérateurs les plus puissants de cette fiction régulatrice. Il donne à croire quun monde peut être maintenu dans son état actuel par lajustement de ses paramètres sans refondation, sans débat, sans conflit institué. On parle de transition, mais sans définir qui en décide, selon quels délais, avec quelles conséquences, sur quels critères effectifs et crédibles. On évoque lempreinte carbone, sans jamais dire ce que cela signifie politiquement, historiquement, anthropologiquement. Le terme de “durabilité” produit ainsi un effet de clôture : il neutralise la conflictualité fondatrice de toute scène régulatrice, en la remplaçant par un récit doptimisation continue, une fable pseudo-scientifique.
Ce que notre essai-thèse oppose à cette fiction, ce nest pas une autre gestion du risque, ni une autre version du développement : cest une refondation de la question régulatrice à partir du paradigme de la co-viabilité. Et cette refondation ne peut sopérer que dans une configuration archicratique, cest-à-dire dans une scène fondée où la viabilité ne se décrète pas, mais séprouve, se dispute, se rejoue, se transforme.
Celle-ci ne peut être réduite à la compatibilité des intérêts humains et non-humains, ni à une coexistence pacifiée entre agents différenciés. Elle nest pas un horizon harmonique. Elle est un régime dépreuves instituées, dans lequel les formes du vivant, des milieux, des infrastructures, des symboles, peuvent être convoquées dans des scènes de régulation explicite, différée, révisable.
Ce que cela signifie, très concrètement, cest que les arbitrages sur leau, lénergie, la mobilité, le territoire, la réparation, le soin, ne peuvent plus être externalisés dans des modèles dimpact ou des courbes defficacité. Ils doivent être rapportés à une scène, où lon peut interroger non seulement les effets des décisions, mais leurs fondements, leurs seuils, leurs instruments, leurs alternatives.
L*archicration* écologique prend corps dans des scènes territoriales où les habitants font apparaître les conditions dhabitabilité, contestent les infrastructures et proposent des configurations de subsistance — bien au-delà des conférences quinquennales et des tableaux de bord numériques dobjectifs carbone ; elle suppose une arcalisation du vivant (reconnaissance des entités existantes), une cratialisation des milieux (identification des champs de forces et dagissements), une archicration du conflit, autrement dit une politisation complète de ce qui, trop longtemps, a été traité comme données environnementales inertes.
Sur le plan social, la logique est la même. Là où les critères dattribution des droits deviennent des scripts inaccessibles, là où les plateformes daccès remplacent les guichets, là où les aides sociales sont suspendues sans énoncé, là où les publics fragiles sont évalués par des algorithmes de “comportement à risque”, le droit sautomatise, la scène disparaît, la dignité sefface.
Ce nest pas une question dinefficacité, ni même dinjustice procédurale : cest une désactivation du régime de reconnaissance. Car un droit qui ne peut plus être justifié publiquement, réclamé dans une scène, opposé dans un délai, contesté par une présence, nest plus un droit. Cest une variable. Une allocation. Un flux à tout moment suspensif.
Réinstituer l*archicration* sociale, cest donc reconstruire la scène de laccès au droit — non pas à travers des démarches participatives formelles, mais à travers des dispositifs dexposition des critères, des formes de visibilité des seuils, des délais contradictoires obligatoires, des lieux de confrontation réels, soutenus, équipés, où lon peut dire : “Ce nest pas acceptable. Voici pourquoi. Voici ce que je propose.” Cest là, dans ces scènes de linterpellation, que la co-viabilité sociale devient pensable.
Il ne sagit donc pas de “réconcilier” social et écologie, mais de comprendre quils sont deux effets dune même oblitération scénique, et que leur relance ne peut passer que par la reconstruction des conditions archicratiques du désaccord institué.
Cest ici que lhypothèse archicratique devient non plus un outil critique, mais une proposition civilisationnelle. Car un monde durablement privé de scènes archicratives tend à devenir aveugle à sa propre destinée. Un monde incapable de suspendre ce quil fait. Incapable den répondre. Incapable de sajuster depuis elles et ceux quil affecte.
À cette cécité organisée, la *co-viabilité* oppose la lumière rugueuse de lexposition et du différé, la présence irréductible des vivants, la scène ouverte des conflits fondateurs canalisés par les récits de vie. Et cest à partir de cette tension — vitale et irréductible — que peut encore sinventer un devenir commun concerté fondé sur nos vulnérabilités, nos résiliences et nos robustesses conscientisées et politisées.
La régulation contemporaine, dans sa formulation dominante, se présente sous les atours rassurants dun horizon consensuel : celui de la durabilité. Ce terme, devenu mantra technico-politique, irrigue désormais lintégralité des champs du discours institutionnel — des traités internationaux aux chartes locales, des stratégies dentreprise aux programmes éducatifs, des plans daction gouvernementaux aux critères dinvestissement privé. Il semble à la fois évident et indiscutable, fédérateur et apaisant. À son contact, les conflits seffacent, les alternatives se suspendent, la temporalité se normalise, et la gouvernance acquiert une forme de légitimité indolore, anesthésiante, presque tautologique. Au point que ce qui est durable est ce qui mérite de durer.
Sous sa surface consensuelle, la “durabilité” se ferme à lépreuve : elle transforme le dissensus en anomalie et recode la régulation en pilotage continu dindicateurs non révisables. Le problème nest pas lobjectif écologique en lui-même, mais la structure régulatrice qui limpose hors scène, et surtout, dans bien des cas, hors-sol, et bien plus, par cœur ou par calcul. Contre cette clôture, la politique des épreuves viables et soutenables substitue à loptimisation des variables la publicité des critères recevables, au pilotage continu automatisé le jeu et le différé contradictoire, à la gestion dimpacts et de risques lénonciation de leurs fondements pour éveiller les raisons — conditions pour que les décisions redeviennent adressables et opposables sous critères de discernement.
Car jusquà présent, les stratégies dites “durables” fonctionnent selon un régime algorithmique dautorité, où les seuils dacceptabilité sont déterminés en amont, les priorités dictées par les logiques defficience, les variables manipulées sans scène dexposition. On y parle de neutralité carbone, de trajectoires optimales, de plans de transition, mais jamais de fondement public de ces trajectoires, ni de scène dans laquelle elles pourraient être tenues devant ceux quelles affectent. Cest dans cette évacuation de la scène — plus encore que dans le contenu des politiques — que réside le cœur du problème. Ce nest pas lobjectif de durabilité qui est en cause, cest la structure régulatrice silencieuse qui le porte, le légitime et limpose.
Pour rendre ce mécanisme visible, rappelons-nous que toute régulation suppose deux opérations irréductibles : dune part, une *normativité explicite* (ce qui doit être régulé, pourquoi, selon quels principes) ; dautre part, une *opérativité outillée* (comment cette norme sapplique, à travers quels instruments, sur quels objets). Mais entre les deux, il faut une troisième instance, que la durabilité contemporaine tend précisément à effacer : la *scène dépreuve*. Cest cette scène — différée, fondée, contradictoire — qui permet aux décisions de ne pas sexécuter à labri du regard, aux critères dêtre rendus publics, aux seuils dêtre contestés, aux affects dêtre entendus, aux représentations de monde dêtre opposables contre tout arbitraire.
En ce sens, la durabilité nest pas quune fiction apolitique : elle est le récit qui permet lexécution sans scène, la régulation sans fondement, la gouvernance sans convocation. Elle naturalise les instruments, en les présentant comme neutres. Elle réduit les choix à des données. Elle transforme la dispute en friction technique. Et ce faisant, elle désarme les communautés, les privant du droit dajourner, de relancer, de reformuler ce qui les affecte.
La politique des épreuves viables, telle que nous la proposons ici, ne consiste pas à rejeter les impératifs écologiques et sociaux. Elle ne nie pas la nécessité de limites, ni lurgence de transformations structurelles. Elle refuse simplement que ces transformations soient imposées hors scène, dans le silence dune régulation désaffectée. Elle postule que toute décision ayant un impact majeur sur les conditions de vie, de subsistance, dhabitation, doit passer par une épreuve fondée, différée, partagée. Elle postule que ce qui nest pas disputé ne peut être dit durable.
Une politique des épreuves viables suppose donc une ré-institution intégrale des conditions archicratiques de la décision. Plutôt quune réforme des indicateurs, une amélioration des consultations ou une simple transparence des données, il faut une scénarisation complète de la régulation selon une grammaire fondée sur quatre principes irréductibles, que nous avons articulés dans le cadre de notre modèle archicratique.
Quatre exigences, déjà inscrites dans notre axiomatique, organisent la politique des épreuves viables : le *différé contradictoire*, qui rend lexécution ajournable ; la *publicité des critères*, qui reconduit tout seuil à son fondement ; l*opposabilité réelle*, qui ouvre la décision à lintervention des affectés avant, pendant et après son application ; la *révision périodique*, qui interdit la clôture. Ces exigences ne sont pas des ajouts déontologiques : elles matérialisent laxiome de détectabilité, confirment la disjonction fonctionnelle des prises arcales, cratiales et archicratiques et prolongent lépreuve critique comme norme de vitalité du régime.
Mais ces principes ne peuvent exister quà une condition : quil y ait une scène. Une scène qui ne se contente ni de spectacle, ni de consultation décorative, ni de simple mise en visibilité : mais bien une scène où le pouvoir se fonde en apparaissant, où lépreuve est instituée, où la transformation sengage réellement depuis ceux quelle affecte.
Lexemple des politiques climatiques lillustre avec une clarté glaçante. Les objectifs de réduction démissions sont fixés par des trajectoires macroéconomiques, sans fondement ontologique débattu. Les instruments de marché (droits démission, taxes, incitations) sont conçus dans des enceintes dexpertise, sans contre-scène démocratique. Les seuils sont négociés entre États et industries, sans présence des vivants affectés. Résultat : une régulation performante sur le papier, mais fondamentalement désarchicratique. Elle sexécute sans différé, sans dispute, sans publicité explicite des choix de monde. Là encore, la matrice daudit du chapitre 1 sapplique : hypotopies (prises faibles sous-déterminantes), hypertopies (prises surdéterminantes), atopies (pseudo-scènes indéterminées), permettant de situer les déficits scéniques des dispositifs climatiques.
Ce que nous appelons épreuve viable, cest ce qui manque ici : la possibilité dexposer les décisions à une scène où le fondement devient enjeu, où les milieux parlent, où les vivants contestent, où les représentations saffrontent, dans un cadre institué, soutenu, non clôturé.
Dans les politiques sociales, le mécanisme est identique. Les aides sont attribuées selon des barèmes automatisés, les exclusions sont déclenchées sans justification explicite, les critères de mérite, de comportement, de mobilité sont intégrés dans des scripts sans adresse. On parle dinsertion, dautonomie, de parcours. *Mais où est la scène ?* Où est lespace où une personne peut dire : « ce critère est inacceptable » ; « cette décision ne me reconnaît pas » ; « je demande une autre forme de régulation » ?
Dans bien des dispositifs sociaux, la scène formelle daccès au droit sest amincie ou sest déportée dans des circuits techniques ; elle persiste toutefois sous des formes intermittentes, fragiles ou latérales — commissions locales, permanences associatives, médiations juridictionnelles *ad hoc*. Le problème nest donc pas labsence pure et simple, mais la dégradation topologique de la scène : hypotopies (prises faibles ou non reliées), hypertopies (cratialité sur-déterminante) et atopies (simulacres participatifs). Comme nous lavons établi au chapitre 1, cette typologie ne renvoie pas à un argument dautorité mais à une matrice daudit : elle sert à objectiver les prises, à situer les déficits et à rouvrir la possibilité dune scène tenue, opposable et révisable.
Face à cela, une politique des épreuves viables implique une redéfinition complète de lacte régulateur : non plus lajustement dun système fermé, mais linstitution dune scène ouverte. Elle transforme le pouvoir de gouverner en obligation de se laisser apparaître. Elle transforme le savoir dexpert en condition de fondation publique. Elle transforme la gestion en exposition contradictoire.
Nous nommons *autarchicratie* la concrétisation achevée de la désarchicration : le méta-régime dans lequel la *cratialité se met en autarcie*. Il ne sagit pas dun gouvernement de la société par elle-même, mais dun *gouvernement de la régulation par elle-même* : indicateurs, modèles de risque, scripts algorithmiques et procédures de contrôle deviennent leurs propres critères de validité, sans plus devoir passer par des scènes dépreuve archicratives praticables. La *cratialité* sy auto-référence et sy auto-certifie, dans des boucles où tout fonctionne — calculs, audits, *reporting* — mais où plus rien ne se laisse vraiment contester ni même énoncer. Cette mise en autarcie de la régulation prolonge, jusquà son point de bascule, les tendances déjà repérées dans la gouvernementalité néolibérale, la rationalisation managériale et la numérisation intégrale des prises.
L*autarchicratie* nest donc pas une fiction dystopique : cest une destination possible, et déjà en partie à lœuvre, de nos régimes contemporains. Nous en avons suivi les lignes de force dans lhistoire des révolutions industrielles (chapitre 4), lorsque la scène archicrative se trouve progressivement oblitérée au profit de modèles prédictifs et de dispositifs dautomatisation normative. Nous en avons observé les manifestations concrètes dans les politiques climatiques, sociales et numériques (chapitre 5), sous la forme de *pseudo-archicrations fantômes* et de pilotages algorithmiques où les circuits de décision se suffisent à eux-mêmes. Dans tous ces cas, la régulation subsiste juridiquement et techniquement, mais elle se maintient hors seuil dopposabilité : scènes inaccessibles, délais inopérants, motifs indisponibles, paramètres non auditables. Tout fonctionne ; mais plus rien ne sexpose ni ne sexplique.
Dès lors, le péril nest pas l*archicratie* elle-même — qui institue la scène et rend contestables les effets —, mais sa disparition performative dans l*autarchicratie*. Ainsi, refaire monter la scène nest pas un supplément procédural : cest revenir au seuil où la décision cesse dêtre instrument et redevient fondation ; cest rétablir, contre lautarcie régulatrice, la possibilité dun différé, dune justification opposable, dune réversibilité des effets — conditions sans lesquelles il ny a plus de politique, mais seulement à terme des processus automatiques ou des pratiques machinales.
Or cest bien cela que permet encore le concept d*archicratie* — refonder la régulation comme scène, comme institution de linterruption, de la dispute, du différé, de la relance — puisquelle permet de nommer ce qui auparavant était pour bonne part occulté bien que présent. Les épreuves viables posent ainsi la question de ce qui fait tenir un monde — et à quelles conditions il mérite encore de tenir.
Si la scène constitue, comme nous lavons montré, la matrice fondamentale de toute régulation archicratique, alors son absence appelle autre chose quun tragique constat critique ou une nostalgie institutionnelle. Elle appelle un geste pleinement instituant, une projection agissante, un surgissement conceptuel doublé dun projet matériel. Il ne suffit pas de rappeler que les normes sappliquent aujourdhui sans exposition, que les seuils gouvernent sans adresse, que les décisions sexécutent sans différé. Il faut désormais concevoir les formes par lesquelles cette dérive peut être arrêtée, inversée, transformée depuis son propre cœur. Cela ne relève ni du réformisme, ni de lutopie, mais dun geste proprement archicratique : instituer une scène là où il ny a plus que des tentations de scripts ou de prompts.
Car labsence de scène ne signifie pas une absence de régulation. Celle-ci se manifeste au contraire par un trop-plein de formes technico-administratives, de logiques procédurales, de chaînes opératoires sans seuil de réflexivité. Elle ne manque pas darènes, de plateformes, de forums, de simulateurs. Par contre, elle manque de lieux où lon peut exprimer que ce pouvoir nest pas encore justifié ; que cette norme ne peut pas encore sappliquer ; que cette décision doit être suspendue tant quelle na pas été tenue devant celles et ceux quelle transforme. La scène nest donc pas une instance supplémentaire : elle est ce sans quoi toute instance devient violence déguisée et insidieuse. Elle ne sajoute pas au dispositif ; elle en est la condition de légitimité. Et pour cette raison, elle doit être conçue, pensée, projetée et instituée.
Toutefois, réinstituer les scènes ne consiste pas nécessairement à restaurer les formes dassemblée du passé. Il ne sagit pas non plus de réanimer les dispositifs dévitalisés de la représentation, ni de raviver des formes symboliques inertes. Il sagit de penser des espaces dans lesquels une décision devient apparente avant dêtre exécutoire, dans lesquels le temps retrouve sa densité, dans lesquels le pouvoir accepte dêtre différé, exposé, débattu, amendé, contredit. Cela implique une refondation des infrastructures de la régulation, dans leur matérialité comme dans leur temporalité.
Il faudra donc des lieux, des calendriers, des organisations, des compétences, des statuts, des rôles, des budgets, des procédures, mais aussi des rituels, des langues, des gestes, des seuils symboliques. Car la scène est un dispositif complexe : elle némerge pas delle-même, elle ne se décrète pas, elle sinstitue par un ensemble cohérent de formes, despaces, daffects et de récits. Et cest ce tissu quil faut aujourdhui remailler.
Là où les politiques publiques sélaborent aujourdhui dans les anti-chambres des ministères ou la clôture des cabinets daudit, il faudra ouvrir des délais formels et irréductibles à la consultation. Là où les plateformes déploient leurs standards dusage sur des populations entières sans épreuve fondatrice, il faudra bâtir des scènes où le code peut être ajourné, explicité, confronté. Là où les territoires sont remodelés par des logiques doptimisation, il faudra des lieux où lhabitabilité puisse être requalifiée, où les milieux puissent apparaître, où les formes de vie puissent être représentées dans leur altérité. Là où les seuils dattribution, de sanction, daccès ou daide sappliquent par automatisme, il faudra instituer des régimes où la décision elle-même devienne visible, révisable, reconductible à partir dune épreuve contradictoire menée par des humains. Et cela ne se fera pas par décret. Cela exigera de nouveaux dispositifs, de nouvelles instances, de nouvelles formes, à inventer depuis le cœur même de la crise scénique contemporaine, probablement au plus près des acteurs de léconomie sociale et solidaire et des professions intermédiaires.
Quon admette alors ceci : bien comprendre la scène dans lordonnancement archicratique nest pas une option procédurale. Elle est lun des opérateurs décisifs par lesquels une décision cesse dêtre purement instrumentale pour devenir fondatrice. Cest dans la scène que le pouvoir se redéploie en se laissant affecter. Cest dans la scène que la temporalité sépaissit, que les conséquences deviennent lisibles, que les fondements peuvent être relancés. Cest là que peut émerger une *co-viabilité régulatrice*. Il ne sagit donc pas dajouter de la transparence, de la participation ou de la communication. Il sagit de concevoir des scènes dans lesquelles lordre peut être temporairement suspendu, afin dêtre à nouveau institué depuis ceux quil affecte.
Ce travail dinstitution scénique ne peut être séparé de la question de léchelle. Il devra se jouer à tous les niveaux : au sein des écoles, des collectivités, des juridictions, des plateformes, des infrastructures, des régulations techniques, des politiques sociales, des gouvernances écologiques... Chaque strate et lieu de l*archicratie* doit trouver sa scène dapparition, adaptée à sa texture propre, mais reliée par une même exigence : qu*aucune décision structurante et agissante ne puisse advenir sans être tenue devant celles et ceux quelle engage.* Cela implique un effort considérable de conception, de financement, de formation, mais surtout un déplacement ontologique de ce quon appelle “gouverner”. Gouverner ne consistera plus à appliquer avec justesse des normes bien conçues, mais à rendre ces normes ajournables, discutables, contestables, et davantage réformables sous conditions de *co-viabilité* sociale et écologique.
Il faudra, pour cela, concevoir de nouveaux lieux : des espaces où lon entre sans savoir ce qui va en sortir, mais où chacun peut venir avec ses preuves, ses objections, ses propositions, ses arguments. Des scènes sans clôture prédéterminée, mais avec un cadre fort. Des scènes traversées par les conflits, mais équipées pour les soutenir. Des scènes lentes, où lon prend le temps de tout reprendre. Des scènes modestes, parfois, mais constantes. Des scènes qui ne soient pas des moments exceptionnels, mais des rythmes dinstitution continue. Des scènes enfin que lon peut convoquer, non pour donner son avis, mais pour rouvrir le monde.
Et plus encore que des lieux, il faudra forger une culture. Une culture du différé, une culture de la justification, une culture de lapparition fondée. Il faudra former à la convocation des énonciateurs, à la reconstruction des axiomes, à la mise en tension des critères. Il faudra réapprendre à interrompre sans détruire, à disputer sans humilier, à exposer sans désincarner. Il faudra bâtir des formes dans lesquelles le pouvoir naura plus peur dêtre vu, entendu, relancé. Mais cela, aucun règlement ne pourra le prescrire. Ce sera lœuvre dune génération entière, qui ne se contentera pas de revendiquer des droits, mais qui acceptera de se constituer comme puissance politique — non dans léclat du spectaculaire, mais dans la densité fondatrice dun monde à relancer avant effondrement déjà annoncée.
À ce niveau, réinstituer la scène nest plus un programme. Cest un appel. Un appel à cesser de gérer les régulations comme si elles pouvaient sauto-référencer indéfiniment. Un appel à rouvrir lespace du pouvoir comme espace dépreuve, non de domination. Un appel à instituer un régime dans lequel les décisions cessent dêtre des faits pour redevenir des actes. Cest ainsi que l*archicratie* prendra sens comme projet. Non comme forme de gouvernement, mais comme respiration de toute société qui veut encore se gouverner elle-même dans son évolution pour assurer son avenir.
Toute régulation sinscrit dans une histoire. Non seulement dans lhistoire des régimes politiques ou des institutions juridiques, mais dans une histoire plus profonde encore : celle des formes darticulation entre pouvoir, savoir, énergie et monde, autrement dit, celle des configurations systémiques au sein desquelles lhumain, le vivant, le milieu, la technique et le symbolique se tiennent dans un certain rapport. Ce que nous appelons ici “révolution régulatrice” ne renvoie donc pas à un événement politique localisé, ni à une invention technologique isolée, mais à une transformation systémique de la manière dont un monde se produit, se reproduit, se règle et se légitime.
Les quatre grandes révolutions qui scandent la modernité industrielle mécanisation disciplinaire, organisation taylorienne-fordiste, cybernétisation néolibérale, numérisation généralisée ne sont pas seulement des séquences techniques. Chacune a reconfiguré, à sa manière, le rapport entre *arcalité*, *cratialité* et *archicration* : nouvelles promesses de légitimation, nouveaux dispositifs dexécution, nouvelles formes ou nouvelles défausses de scène. La quatrième, celle de la numérisation intégrale des systèmes de décision, pousse à lextrême un mouvement amorcé de longue date : la possibilité de faire fonctionner la régulation sans passer par des lieux reconnaissables dépreuve.
Cest précisément contre cette clôture systémique que se dessine ce que nous proposons dappeler, par convention, une cinquième révolution régulatrice. Elle ne consisterait pas en un supplément dautomatisation ni en une sophistication accrue des instruments. Elle tiendrait dans un déplacement plus radical : le fait de considérer que linstance décisive nest plus loutil, ni le flux, ni la procédure, mais la scène où ces éléments deviennent adressables, critiquables, reconfigurables. Là où les révolutions précédentes ont privilégié lextension des capacités de calcul, de production ou de circulation, celle-ci privilégierait la capacité à exposer ces capacités, à en faire lobjet dune épreuve publique.
Dire quil sagit dune “cinquième révolution” ne signifie pas que lhistoire suivrait un cours nécessaire et linéaire. Le terme na ici quune valeur heuristique : il sert à concentrer, sous un même nom, des processus multiples, hétérochrones et dispersés luttes pour la transparence effective des algorithmes, revendications de recours opposables, demandes de traçabilité des décisions, inventions de nouvelles assemblées scéniques. Il serait erroné de croire que cette révolution viendra sajouter, comme une étape finale, à une série déjà écrite. Elle pourrait tout aussi bien rester avortée, partielle, récupérée par les dispositifs quelle prétend contraindre.
Cest pourquoi lidée de cinquième révolution doit être explicitement soumise à épreuve. Elle serait infirmée si lon constatait que les scènes existantes continuent de se vider de toute capacité effective, que les espaces de recours se réduisent à des simulacres sans impact sur les décisions, que les tentatives de réinstitutions scéniques se réduisent à des mises en récit sans prise sur les cratialités. Elle gagnerait en consistance, au contraire, si des pratiques, même locales, montraient que la création de nouvelles scènes dans les hôpitaux, les écoles, les plateformes, les politiques écologiques modifie réellement la manière dont les décisions sont justifiées, prises et requalifiées pour assurer la co-viabilité.
Nous parlons donc de “cinquième révolution” moins comme dun avenir promis que comme dun horizon de travail : une invitation à relire les conflits présents à partir de la question scénique. Chaque fois quun collectif lutte pour un délai, pour un droit au différé, pour la présence dénonciateurs identifiables, pour un droit de regard sur les paramètres qui le gouvernent, quelque chose de cette révolution est mis en jeu. Chaque fois quil sen remet au contraire à la seule fluidité des ajustements automatiques, il sen éloigne. Le paradigme archicratique propose de tenir ensemble ces expériences, de les comparer, de les instruire, sans décider à lavance de leur issue.
Cette cinquième révolution nest pas un futur abstrait : elle advient chaque fois quun seuil est suspendu, quun fondement est reconvoqué, quun recours devient opérant, quune voix exclue trouve scène, délai et adresse ; chaque fois que la transparence cesse dêtre visualisation pour redevenir publicité des critères, que la participation quitte la consultation pour rejoindre lépreuve, que la gouvernance sefface devant la fondation.
Nous parlons de “cinquième révolution” par convention, en pleine conscience que lhistoire effective procède par recompositions régulatrices hétérochrones, stratifiées, feuilletées, sérialisées, désynchronisées selon les régimes symboliques et techniques ; de sorte que l“événement” est devenu une prise de pouvoir de la scène dans larchitecture des dispositifs industriels.
Dans un monde où les infrastructures et les superstructures établissent les nouvelles normes, où les plateformes sont devenues de nouveaux territoires de nos êtres, où les systèmes dintelligence artificielle sinventent comme nouveaux gouvernants, seule une révolution scénique permettrait au politique de ne pas seffacer. Mais celle-ci ne se décrète pas : elle se sculpte par des décisions, des dispositifs, des pratiques et des langages ; elle requiert des artisans, des architectes, des dramaturges du politique ; elle accepte de perdre en fluidité ce quelle gagne en légitimité. Et cest cela, précisément, que nomme l*archicration* : une révolution régulatrice en acte, bien plus que le modèle institutionnel quelle instaurerait en conscience — l*archicratie*.
Il faut aujourdhui prononcer un appel ancré dans le vivant, là où les institutions ne font plus apparaître les polémiques, là où les discordes tendent à se faire taire. Un appel qui ne soit ni un cri, ni un mot dordre, ni un acte de foi, mais une *archicration vivante* : cest-à-dire lapparition dénoncés fondés, publics, discutables, adressables, révisables — une parole instituante, dans ce sens précis et exigeant que nous redonnons au mot “politique”. Le droit de vivre ! De tous vivre ! De chacun selon ses capacités, et à chacun selon ses besoins…
Car ce que notre monde ne sait plus faire advenir, ce ne sont pas les règles ou les normes en elles-mêmes, mais la capacité populaire à les exposer, à les critiquer, à les instituer grâce à des formes collectives constituées par celles et ceux qui les subissent en premier lieu. Cette incapacité nest ni technique, ni conjoncturelle. Elle est le symptôme dun effondrement structurel qui au-delà de produire de linjustice, nous conduit à une crise de viabilité civilisationnelle.
Nous vivons dans un monde où lhumain et le non-humain sont liés par une même absence de considération. Le vivant, dans son immense diversité de formes, dagencements, de langages, de résistances, est soustrait à la parole, au temps et à la forme. Et ce que notre thèse a permis de penser, cest que ce processus dinvisibilisation nest pas un effet secondaire des logiques économiques, mais une conséquence directe de la disparition de la scène de confrontation. Là où il ny a plus de scène, il ne peut y avoir ni représentant, ni interpellation, ni suspension, ni réparation. Le vivant devient bruit, excès, variable et externalité à occulter.
Il faut donc le dire avec toute la solennité nécessaire. Un monde sans *archicration* rend le vivant politiquement illisible, donc indéfendable : le conflit perd sa scène et le temps son droit de retour ; or le vivant a besoin dun lieu dapparition où les règles qui le concernent sont convoquées, tenues et différées. Parce quil a besoin dune scène comme condition de reconnaissance mutuelle inscrite dans le temps. Parce quil ne peut être gouverné sans être dabord entendu, représenté, institué dans la durée de conflits assumés, dans la densité dun désaccord soutenu qui permette tout de même la *co-viabilité*.
Ce nest pas tant un supplément de conscience écologique que requiert notre temps, quune réinscription du vivant dans le cœur même de la procédure régulatrice. Il faut que le vivant retrouve la capacité de faire épreuve comme acteur instituant. Cela implique de convoquer de nouveaux formats dapparition, de nouvelles figures de représentation, de nouvelles juridictions du milieu, de nouveaux porte-paroles, mais aussi de nouvelles scènes, de nouveaux délais et de nouveaux seuils. Et cest là que l*archicration*, en tant que forme dinstitution de la régulation, redevient notre outil premier, notre geste inaugural, notre obligation radicale.
Mais ce ne sont pas uniquement les vivants non-humains qui exigent ce retour à la scène. Ce sont les humains eux-mêmes, dans leur diversité traversée de douleurs, de silences, de disparitions, de récits corrompus ou interrompus. Ce sont les corps précarisés, expulsés, captés, mécanisés, racisés, discriminés. Ce sont les voix sans adresse, les luttes étouffées, les demandes restées lettres mortes, les souffrances converties en statistiques, les communautés disqualifiées ou reléguées. Là encore, ce nest pas un “plus de participation” quil faut : cest un *acte fondateur de refondation*. Ce nest pas une réforme du droit daccès à la parole : cest linstitution dun droit dépreuve et de reconnaissance. Encore une fois d*archicrations* !
Et ce droit nest pas métaphysique. Il est scénique. Il sinscrit dans des formes précises, différées, structurées. Il suppose des lieux, des interlocuteurs, des procédures, des archives, des délais, des énonciateurs. Il suppose des scènes que lon peut habiter, relancer, réinterroger. Il suppose que la parole soit tenue, mais aussi reçue, exposée, contredite, reformulée. Il suppose, enfin, que cette parole soit retenue dans larchitecture même de la régulation. Quil ne soit pas juste documenté, mais quil puisse reconfigurer le pouvoir sous condition de recevabilité.
Nous appelons donc, à ce stade ultime de notre œuvre, à un réarmement du commun par la scène. Rien dun théâtre idéologique bien plutôt une architecture du vivre-ensemble, régulatrice, opposable, fondée. Car il ne peut y avoir de monde commun sans scène, pas de scène sans différé, et pas de différé sans pouvoir qui accepte de suspendre son exécution pour se reformuler devant celles et ceux quil engage. Ce geste — si simple en apparence, si révolutionnaire en pratique — est le cœur de toute *archicration*. Et cest à ce titre probablement à tout le moins lune des rares voies régulatrices encore tenables et viables à nos yeux.
À ce point de saturation du monde — saturation des flux, des normes, des récits, des simulacres de participation — une respiration possible reste celle du moratoire et du différé. La seule densité politique entendable est celle de lépreuve et des preuves. La seule fondation encore pensable est celle qui accepte de se laisser instituer à nouveau, à se laisser revisiter, en pleine conscience. Cest cela, notre appel : reconvoquer le vivant dans la scène, refaire de lapparition, de linformation, de lopinion un droit, refonder la régulation politique en processus d*archicrations*. Il ne sagit pas dajouter un modèle de plus, mais de rendre à lhistoire ce dont elle a été amputée, faute doccultation et faute dimpensé : ses scènes fondatrices, émancipatrices et régulatrices qui font tenir les mondes.
Ce que notre époque appelle, est bien plus quun ajustement marginal des politiques existantes, bien plus quune moralisation incrémentale des comportements individuels. Cest une réinvention des conditions mêmes dapparition et de mobilisation du pouvoir : des lieux, des temps, des procédures, des mémoires où les décisions qui nous engagent puissent être amenées en scène, instruites, contestées, requalifiées. Les dix gestes qui suivent nont pas valeur de programme clos ni de plan de réforme. Ils constituent des hypothèses archicratiques : des propositions de formes scéniques minimales, destinées à être discutées, expérimentées, corrigées. Ils nont de sens que sils deviennent eux-mêmes objets dépreuve.
Premier geste : *instaurer un droit universel au différé contradictoire*. Un tel droit ne viserait pas à ralentir indistinctement toute décision, mais à garantir que toute mesure qui affecte substantiellement une existence allocation, sanction, fermeture, expulsion, tri automatique puisse être suspendue dans un temps institué, devant une instance capable den reconsidérer les motifs et les effets. Ce droit ne se confond pas avec un simple droit au recours individuel : il institue le temps scénique comme composante non négociable de la régulation.
Deuxième geste : *fonder, pour chaque grand dispositif de régulation, un journal de justification*. Il ne sagirait pas dajouter un rapport de plus aux archives administratives, mais dexiger que toute décision structurante (création dun algorithme, dun barème, dun standard) soit accompagnée dun récit argumenté de ses raisons, des alternatives écartées, des effets anticipés. Ce journal ne sanctifie pas la décision ; il la rend adressable. Il crée une mémoire publique du fondement, à partir de laquelle critiques, révisions et contre-propositions peuvent être formulées.
Troisième geste : *instituer un visa daffectation pour les principaux instruments de calcul et de qualification*. Chaque indicateur, chaque score, chaque seuil ne serait plus un simple paramètre technique, mais devrait porter trace de ses finalités déclarées et des collectifs qui en ont débattu. Ce visa nautorise pas seulement lutilisation dun outil ; il inscrit loutil dans une adresse éthique et politique : qui décide que telle métrique est légitime pour mesurer telle réalité, avec quelles garanties, pour combien de temps ?
Quatrième geste : *instaurer un coupe-circuit citoyen*. Il sagirait de prévoir, dans les dispositifs institutionnels, des mécanismes par lesquels des collectifs citoyens, usagers, travailleurs, habitants puissent suspendre temporairement lapplication dune décision lorsque des contradictions graves, des effets non prévus ou des injustices manifestes apparaissent. Ce geste nest pas un droit dobstruction généralisée ; il est la traduction procédurale du principe selon lequel aucune *cratialité* ne doit se déployer sans possibilité dinterruption scénique.
Cinquième geste : *instituer un tribunal de lalgorithme*. Non pas un organe chargé de valider ou dinterdire abstraitement la technique, mais une scène dépreuve où les architectures computationnelles qui organisent laccès aux droits, à linformation, aux ressources, soient rendues comparables, critiquables, reformulables. Un tel tribunal devrait être doté de compétences mixtes juridiques, techniques, sociales et travailler à partir de cas concrets. Il ne sagit pas dajouter une couche de contrôle symbolique ; il sagit de ramener lalgorithme en scène.
Sixième geste : *rétablir des assemblées daffectation là où les décisions sont aujourdhui dispersées dans des chaînes opaques*. Dans les hôpitaux, les écoles, les agences sociales, les plateformes, ces assemblées seraient chargées dinstruire publiquement la manière dont les ressources, les priorités, les charges et les risques sont distribués. Elles ne se substituent pas aux institutions existantes ; elles en constituent le moment scénique, là où les critères implicites peuvent être explicités, contestés, ajustés.
Septième geste : *rendre révocables les mandats au sein des institutions qui conçoivent, paramètrent et pilotent les dispositifs de régulation*, quil sagisse dinstances publiques, de régulateurs indépendants ou de structures privées investies de missions dintérêt général. La révocabilité ne signifie pas linstabilité permanente, mais la possibilité, pour les collectifs concernés, de mettre fin à un mandat lorsquil apparaît que l*archicration* est durablement contournée, que les fondements ne sont plus adressés, que la *cratialité* sest autonomisée.
Huitième geste : *instaurer, dans chaque budget institutionnel dimportance, un budget scénique*. Il ne sagirait pas dun poste décoratif, mais dune ligne dédiée au financement des dispositifs dépreuve : temps de délibération, traduction, médiation, expertise contradictoire, dispositifs de restitution. Un budget sans scène est un budget sans adresse. Reconnaître un budget scénique, cest faire de la scène non plus un coût superflu, mais une condition de validité de la dépense.
Neuvième geste : *inscrire dans le droit un principe général de révision archicrative*. Ce principe reconnaîtrait que toute architecture régulatrice loi, norme, algorithme, accord institutionnel doit pouvoir être réexaminée à intervalles déterminés, à partir dinstances où les personnes affectées, les savoirs concernés, les effets constatés sont convoqués. Il ne sagit pas dinstaurer une instabilité chronique, mais de consacrer le fait que la *co-viabilité* ne se maintient quau prix dune disponibilité organisée à la révision.
Dixième geste : *construire des cartographies des scènes manquantes.* Au lieu de se contenter danalyses sectorielles, il sagirait de repérer, sur un territoire ou dans une chaîne de valeur, les lieux où des décisions structurantes sont prises sans scène identifiable, où les personnes affectées nont ni adresse, ni délai, ni recours. De telles cartographies ne sont pas un exercice académique de plus : elles constituent un instrument politique central pour orienter linvention des scènes à venir, pour ne pas laisser invisible ce que la seule *cratialité* préfère absorber.
Ces dix gestes népuisent pas la gamme des formes possibles d*archicration*. Ils ne valent pas comme une doctrine à appliquer, mais comme une invitation à la mise à lépreuve : ils devront être discutés, critiqués, complétés, remplacés, parfois abandonnés. Leur seule prétention est de montrer que l*archicratie*, loin dêtre un mot abstrait, peut se traduire en dispositifs concrets, situés, qui redonnent aux collectifs la capacité dadresser le pouvoir qui les traverse. Et cest à ce niveau que nous posons notre ouvrage, moins une doctrine quune mise à lépreuve publique, moins un programme quune fondation différée : linvitation à restaurer la capacité institutionnelle de refonder le “pouvoir de” et le “pouvoir sur” nos vies, à hauteur de la *téra-machine* en constitution*.*
Nous n'assistons ni à un retour primordial du désordre ni à une
raréfaction du pouvoir. Ce qui se transforme, plus discrètement mais de
manière décisive, ce sont les conditions mêmes sous lesquelles la
régulation peut apparaître. Ce qui se reconfigure sous nos yeux n'est
pas d'abord la quantité de pouvoir à l'œuvre dans nos sociétés, mais la
manière dont ce pouvoir se rend — ou ne se rend plus — visible,
adressable, contestable. La conflictualité ne disparaît pas ; elle
change de régime d'existence. Là où elle trouvait autrefois à se
formuler dans des lieux identifiables, à se différer dans des
temporalités instituées, à se confronter dans des espaces d'énonciation
reconnus, elle se trouve de plus en plus distribuée dans des chaînes
opératoires qui se présentent comme de simples enchaînements techniques.
Flux, scores, interfaces, barèmes, protocoles : autant de formes qui
n'abolissent pas les décisions, mais en modifient profondément les
conditions d'apparition. Ce qui relevait d'une épreuve devient
traitement. Ce qui relevait d'une adresse devient calcul. Ce qui
relevait d'une justification devient paramétrage.
Ce déplacement est d'autant plus difficile à saisir qu'il ne se donne
pas comme rupture. Il s'installe dans la continuité apparente des
dispositifs, dans l'amélioration de leur efficacité, dans la promesse
d'une gestion plus rapide, plus fluide, plus objective des situations.
Le conflit y est désamorcé au nom de la performance. Le différé y est
perçu comme ralentissement. L'exposition y est remplacée par une
visibilité sans interlocution, où tout semble disponible sans que rien
ne soit véritablement tenu. Il ne s'agit pas d'un vide. Il ne s'agit pas
d'un monde sans normes ni d'un effondrement du pouvoir. Il s'agit d'un
recouvrement. Ce que cet essai-thèse a nommé oblitération archicratique
désigne cette dynamique précise : la substitution progressive de la
scène par l'exécution, du différé par l'automaticité, de l'énonciation
par la trace, de l'épreuve par la donnée.
Le pouvoir ne cesse pas d'opérer ; il cesse de comparaître. Les
décisions continuent d'être prises ; elles cessent d'être tenues. Elles
ne disparaissent pas ; elles se soustraient aux formes où elles
pourraient être rapportées à leurs fondements, confrontées à leurs
effets, reprises à partir de ce qu'elles affectent.
Ce qui caractérise ainsi notre situation n'est pas une crise de la
conflictualité, mais une crise de sa tenue. Non l'absence de dissensus,
mais l'altération des formes capables de le porter. Non la disparition
du politique, mais sa désarticulation progressive hors des scènes où il
pouvait encore apparaître comme tel. À ce niveau, ce que nous appelons
crise ne relève plus d'un dysfonctionnement partiel, ni d'une dérive
simplement sectorielle. Elle engage les conditions mêmes dans lesquelles
un monde peut encore faire apparaître, soutenir et transformer ce qui le
traverse.
Ce déplacement du regard a commandé tout le parcours accompli. Il a
d'abord fallu apprendre à voir. Distinguer ce qui fonde de ce qui opère,
ce qui opère de ce qui met à l'épreuve. Rompre avec les confusions qui
font passer l'exécution pour la justification, la visibilité pour
l'opposabilité, la procédure pour la scène. Sans cette discipline de
détectabilité, le présent demeure illisible et la critique se dissout
dans des généralités. L'une des ambitions premières de ce travail aura
donc été de donner des prises : non pas inventer un vocabulaire pour le
plaisir de l'invention, mais rendre discernable ce que les descriptions
ordinaires du pouvoir, de la gouvernance et de l'administration laissent
trop souvent se confondre.
Encore fallait-il que ce vocabulaire n'usurpe pas sa propre nécessité.
L'archicratie ne vaut pas parce qu'elle pourrait tout redire dans sa
langue ; elle vaut là où elle permet de discerner quelque chose qui,
sans elle, resterait confondu, euphémisé ou inaperçu. Elle ne constitue
donc ni une théorie totale du politique, ni une clef universelle des
mondes historiques, mais un instrument critique situé, tenu à une
obligation de retenue : se taire là où il n'apporte aucun gain de
lisibilité, et répondre de ses distinctions là où il prétend en
produire. C'est à cette condition seulement qu'un paradigme cesse d'être
un idiome de surplomb pour devenir une épreuve réelle de connaissance.
Il a fallu ensuite remonter plus loin. Reconnaître que les formes
d'épreuve ne sont ni des raffinements tardifs des modernis
représentatives, ni des suppléments ajoutés à des ordres déjà
constitués, mais des conditions plus profondes de la tenue des mondes
humains. Avant les États, avant les bureaucraties, avant les
codifications juridiques stabilisées, des collectifs ont dû inventer des
manières de différer, de ritualiser, d'exposer ce qui les traversait.
L'histoire du politique ne commence pas avec la souveraineté constituée
; elle commence avec la nécessité, pour un monde traversé de forces
hétérogènes, de ne pas s'abandonner à leur pure immédiateté. Elle
commence là où quelque chose comme une reprise devient possible, là où
ce qui affecte peut être reconduit à une forme d'exposition, si
rudimentaire, violente ou dissymétrique soit-elle. La scène n'est donc
pas un luxe moderne. Elle appartient à la structure même des mondes qui
tiennent.
Il a fallu également traverser les grandes pensées du pouvoir, non pour
les annuler, ni pour les annexer de force à un nouveau système, mais
pour en mesurer les prises et les limites. Certaines ont privilégié le
fondement, d'autres l'opération, d'autres encore la conflictualité, la
dispersion des dispositifs, l'individuation, la justification ou le
dissensus. Toutes ont saisi quelque chose de réel ; aucune n'a tenu
entièrement ensemble les conditions d'une régulation habitable. Ce que
cette traversée a rendu possible, ce n'est pas une synthèse des
doctrines, mais une méta-grammaire du politique, capable de les relire à
partir de ce qu'elles permettent — ou non — de penser : comment un
ordre se fonde, comment il opère, comment il accepte d'être mis à
l'épreuve.
Il a fallu enfin éprouver cette grammaire dans l'histoire effective des
transformations modernes, là où les capacités de régulation ont atteint
une intensité inédite. Ce qui apparaît alors n'est pas seulement une
succession d'innovations techniques, mais une série de reconfigurations
du rapport entre fondement, opération et épreuve. Chaque révolution
industrielle a redessiné ce triangle ; chacune a accru certaines
puissances tout en décalant, fragmentant ou fragilisant les formes
capables de les soutenir. L'histoire moderne n'apparaît plus comme celle
d'un progrès simplement technique ; elle devient lisible comme celle des
déplacements successifs du lieu où le pouvoir se rend — ou cesse de se
rendre comparable, contestable, révisable.
C'est au point le plus brûlant du présent que cette exigence se révèle
avec la plus grande netteté. Les tensions contemporaines ne se laissent
pas comprendre comme des crises séparées, ni comme des anomalies
sectorielles. Elles manifestent, chacune à leur manière, la difficulté
croissante à instituer des formes dans lesquelles ce qui est affecté par
les décisions peut être reconduit à une épreuve. Ce qui manque n'est pas
la capacité à produire des normes, des infrastructures, des critères,
des instruments. Ce qui manque, de plus en plus, ce sont les formes
capables de les porter. De là la nécessité d'un déplacement conceptuel
décisif : substituer au lexique lisse de la durabilité la notion de
co-viabilité. Non pas un équilibre supposé entre intérêts déjà
constitués, ni la correction technocratique d'externalités, mais
l'institution toujours fragile, toujours révisable, toujours
conflictuelle, des conditions sous lesquelles des formes de vie
hétérogènes peuvent encore tenir ensemble sans destruction irréversible.
Ce qui se dégage ainsi de l'ensemble n'est pas une doctrine
supplémentaire, encore moins un système clos. C'est une condition — qui ne garantit ni harmonie ni salut, mais sans laquelle aucune
régulation ne peut être tenue comme monde. Cette condition peut
désormais être formulée simplement : une régulation ne devient habitable
qu'à la mesure où ce qui la fonde, ce qui l'opère et ce qui la met à
l'épreuve demeurent distinguables, articulés et exposables. Toute la
difficulté tient alors à ceci : maintenir cette distinction sans les
dissocier, et cette articulation sans les confondre. Là où ces
dimensions se confondent, se disjoignent ou se dérobent à l'exposition,
la régulation peut continuer à fonctionner ; elle cesse de se tenir.
C'est cette condition minimale que nous avons nommée archicratie. Ni
régime parmi d'autres, ni forme institutionnelle déterminée, ni idéal
moral à incarner : un seuil. Le seuil au-dessous duquel la régulation se
réduit à sa propre opérativité, et au-dessus duquel elle devient, au
moins en droit, habitable, parce qu'elle laisse ouverte la possibilité
de sa reprise. L'archicratie ne désigne ni la justice, ni la bonté, ni
la douceur des décisions ; elle désigne la condition sans laquelle ces
questions elles-mêmes cessent de pouvoir être posées politiquement.
Ce qui fonde une régulation ne se confond ni avec une autorité
abstraite, ni avec un texte, ni avec une tradition invoquée une fois
pour toutes ; cela renvoie à la capacité d'un ordre à exposer ses
raisons comme telles. Ce qui opère désigne les instruments, procédures
et dispositifs par lesquels le monde est effectivement découpé,
distribué, transformé. Ce qui met à l'épreuve, enfin, ne relève ni d'une
consultation formelle ni d'un recours marginal, mais de formes
instituées où fondements, opérations et effets peuvent être suspendus,
confrontés, repris.
Ces prises ne sont jamais données à l'état pur. Elles se recouvrent, se
déplacent, se distribuent inégalement selon les configurations. Mais
leur coprésence différenciée constitue la condition minimale d'une
régulation vivable. Là où l'opération se déploie sans être reconduite à
ses raisons, là où les décisions s'appliquent sans passer par des
épreuves effectives, la régulation bascule vers une forme de fermeture
qui ne relève ni du chaos ni du retrait du pouvoir, mais de son
auto-suffisance. Dans une telle configuration, le pouvoir ne se retire
pas ; il s'accomplit sans comparution. Il produit des effets, parfois
avec une grande précision, mais sans se laisser reprendre dans des
formes où ces effets pourraient être rapportés à des raisons
discutables. Il opère, mais ne s'expose plus. Il décide, mais ne se
laisse plus adresser. Tout fonctionne ; mais plus rien ne s'expose ni ne
s'explique.
La différence décisive se situe là. Entre une régulation capable
d'exécuter des procédures, de reproduire des normes, de gérer des flux,
et une régulation capable de se rapporter à elle-même à partir de ce
qu'elle affecte, la différence ne tient pas à l'intensité du pouvoir,
mais à la possibilité de sa mise à l'épreuve. Ce qui rend un monde
habitable n'est ni l'absence de tensions, ni la stabilité de ses
équilibres, ni la pure efficacité de ses dispositifs. C'est la forme
dans laquelle ses tensions peuvent être portées sans déni, différées
sans dissolution, exposées sans annihilation.
À partir de là, la question n'est plus d'abord celle d'un bon régime,
mais celle d'un monde qui tient. Ce monde n'a pas besoin d'être pacifié,
homogène ou réconcilié ; il doit pouvoir porter ce qui le traverse sans
s'abolir dans sa propre exécution. Un monde qui ne tient ni par inertie,
ni par répétition, ni par l'évidence supposée de ses fondements. Il
tient parce qu'il est capable de porter ce qui le traverse sans le nier,
de différer ce qui l'affecte sans le dissoudre, d'exposer ce qui le
gouverne sans s'effondrer sous sa propre mise en question. Habiter un
monde ne signifie pas simplement vivre en son sein. Cela signifie
disposer d'une scène où comparaître, demander d'où parle ce qui décide,
identifier ce qui opère, rouvrir le temps lorsque l'exécution tend à se
refermer sur elle-même, faire apparaître ce qui, sans cette épreuve,
demeurerait converti en variable, en score, en flux.
La scène prend ici son sens le plus fort. Elle n'est ni un supplément
institutionnel, ni un décor ajouté au pouvoir pour en améliorer
l'acceptabilité, ni une métaphore commode pour désigner des espaces de
parole. Elle est l'une des formes à travers lesquelles un ordre cesse
d'être purement opératoire pour devenir politiquement tenable. Là où une
telle forme existe — espace différé, documenté, institué, capable de
suspendre et de requalifier — la régulation ne se contente pas d'agir
: elle accepte de comparaître. C'est dans cette comparution que se joue
la possibilité, pour un monde, de ne pas se réduire à ce qu'il exécute.
Il faut ici maintenir une distinction que tout ce travail a jugée
décisive. Dire que la scène est condition de viabilité ne signifie
nullement que toute scène serait en elle-même juste, démocratique ou
émancipatrice. L'histoire des formes politiques, juridiques,
religieuses, administratives, guerrières, marchandes ou sacrificielles
montre au contraire que des scènes peuvent être violentes,
dissymétriques, inquisitoriales, spectaculaires, capturées. La scène
n'est pas bonne parce qu'elle apparaît ; elle devient politiquement
décisive lorsqu'elle institue réellement l'épreuve de ce qu'elle expose.
Ce qui compte n'est pas l'existence abstraite d'un lieu d'apparition,
mais la possibilité effective qu'il ouvre : peut-on y demander les
fondements ? Les instruments peuvent-ils y être rendus visibles ? Les
effets peuvent-ils y être rapportés à ceux qu'ils affectent ? Le différé
est-il réel ou purement fictif ? La suspension a-t-elle une force
transformatrice ou n'est-elle qu'un rite sans prise ?
Il n'en demeure pas moins que, sans scène, la régulation se dégrade
qualitativement. Elle peut continuer à fonctionner ; elle peut même
gagner en efficacité apparente. Mais elle perd sa mémoire, sa
réversibilité, sa capacité à se rapporter à elle-même autrement que par
recalibrage interne. Elle applique, classe, répartit, déclenche, module
; mais elle ne se reprend plus. Elle produit des normes sans en exposer
les raisons, des décisions sans en instituer l'épreuve, des effets sans
en organiser le retour. Elle tient encore ; mais elle ne sait plus
répondre de la manière dont elle tient. C'est en ce point qu'un monde
sans scène devient injustifiable. Non pas nécessairement injuste dans
chacun de ses effets immédiats ; non pas chaotique ; non pas dépourvu de
cohérence locale. Il peut très bien fonctionner, produire des résultats,
stabiliser provisoirement des situations, maintenir des chaînes
d'obéissance ou d'adaptation. Mais il devient injustifiable parce qu'il
ne dispose plus des formes dans lesquelles ses propres décisions peuvent
être rejouées, exposées, interrogées, reformulées.
On comprend alors ce que la co-viabilité signifie exactement. Elle ne
désigne ni la simple coexistence de formes de vie différentes, ni leur
compatibilité gestionnaire, ni un optimum de répartition des ressources
ou des charges. Elle désigne la capacité, toujours fragile, toujours
située, toujours révisable, d'un monde à instituer des formes dans
lesquelles les hétérogènes qui le traversent peuvent être mis en tension
sans être soit mutuellement détruits, soit administrativement
neutralisés. Elle est moins un état qu'un régime d'épreuves. Elle ne se
mesure pas seulement à l'efficacité des ajustements ; elle se mesure à
la possibilité qu'un ordre laisse ouvert sa propre reprise à partir de
ce qu'il affecte.
C'est à ce niveau que le diagnostic du présent trouve sa formulation la
plus nette. Non dans l'idée d'un monde privé de régulation, mais dans
celle d'un monde où la régulation tend à se déployer hors des formes qui
permettaient de la tenir. Qu'il s'agisse des droits sociaux, de
l'habitabilité écologique des milieux ou des architectures numériques de
décision, la même logique se renforce : les dispositifs deviennent plus
puissants au moment même où les formes capables d'en soutenir l'épreuve
deviennent plus fragiles, plus tardives, plus périphériques. Ce ne sont
pas les décisions qui disparaissent ; ce sont les manières dont elles
pourraient être tenues.
C'est en ce sens que l'autarchicratie peut être nommée comme la
contre-figure terminale de l'archicratie. Non un régime au sens
classique, ni une idéologie, ni un type d'État, mais une configuration
dans laquelle la régulation tend à se refermer sur sa propre
opérativité, à produire ses propres critères de validité, à
s'auto-justifier sans passer par des épreuves effectives. Dans une telle
configuration, les instruments, les modèles, les indicateurs, les
procédures deviennent à la fois ce qui opère et ce qui justifie. Les
boucles se ferment. Les ajustements se font à partir de leurs propres
résultats. Les audits vérifient la conformité à des critères produits
par les systèmes eux-mêmes. La régulation devient auto-référentielle.
Son intensité contemporaine tient toutefois à ce qu'elle ne demeure pas
extérieure aux sujets qu'elle régule. Lorsque chacun apprend à se noter,
se comparer, s'optimiser, se rendre compatible, anticiper les seuils qui
le classent ou prévenir son propre déclassement, la régulation ne
s'exerce plus seulement depuis des dispositifs séparés. Elle se prolonge
dans des conduites d'ajustement par lesquelles les existences deviennent
les opératrices contraintes de leur propre conformité. L'autarchicratie
atteint alors son degré le plus intime : non seulement lorsque l'ordre
se mesure lui-même, mais lorsque les sujets se gouvernent eux-mêmes
selon des critères qu'ils n'ont pas institués.
Cette intimité nouvelle de la régulation a trouvé dans la rationalité
néolibérale l'un de ses vecteurs historiques les plus puissants. Non
comme doctrine extérieure aux mutations industrielles récentes, mais
comme manière de faire tenir ensemble l'âge informatique et l'âge
algorithmique. La troisième révolution industrielle a donné au signal, à
l'indicateur, à la concurrence, à l'audit, à la solvabilité et au
feedback une autorité pratique inédite : institutions, entreprises,
services publics, individus ont été conduits à se rendre lisibles dans
des formats de performance. La quatrième fait descendre cette autorité
plus avant dans les conduites. Le classement prépare la décision.
L'évaluation aménage l'environnement où certains gestes deviennent
probables, certains parcours préférables, certains écarts coûteux avant
même d'être nommés. Le sujet n'est plus simplement contraint d'obéir ;
il apprend à devancer les critères qui l'évaluent, à prévenir son
déclassement, à traduire son temps, son travail, sa santé, ses désirs,
ses déplacements en signes compatibles avec les dispositifs qui le
rendent calculable. L'autarchicratisation contemporaine se noue dans
cette intériorisation : la régulation fabrique les formats de réalité
auxquels les existences doivent ensuite se rendre conformes.
Mais cette rationalité ne flotte pas dans un ciel d'indicateurs. Sa
vérité matérielle affleure dans les ressources dont dépend l'habitation
commune. Depuis les révolutions industrielles, chaque promesse de
puissance engage des sous-sols, des fleuves, des nappes, des ports, des
mines, des pipelines, des câbles, des centres de données, des corps
exposés, des territoires rendus disponibles. Le charbon et le pétrole
ont porté la mécanisation, les transports, la guerre industrielle et
l'accélération des échanges ; le gaz et l'uranium ont reconfiguré
l'énergie comme dépendance stratégique ; le sable, le cuivre, la
bauxite, le cobalt, le coltan, les terres rares, le germanium, le
tritium ou l'hélium-3 engagent désormais la construction,
l'électronique, le calcul, les batteries, les réseaux, les armements et
les promesses de transition. Une ressource n'est jamais une matière
posée devant un besoin. Elle est un nœud d'autorisation, d'extraction,
d'acheminement, de travail, de dette écologique, de violence
territoriale et de futur engagé. La co-viabilité atteint ici son sol le
plus concret : savoir qui prélève, qui consomme, qui stocke, qui manque,
qui respire les poussières, qui traverse les pénuries, qui habite les
paysages défaits, qui supporte les déchets, qui paie la puissance des
autres par la fragilisation de son propre monde.
L'exigence archicratique engage ainsi la comparution des chaînes
matérielles autant que celle des décisions, des normes et des
algorithmes qu'elles soutiennent. Les circuits d'extraction,
d'approvisionnement, de combustion, de refroidissement, de transport, de
stockage, de calcul, de financement et de sécurisation appartiennent
pleinement à la scène. Interroger une régulation revient alors à
demander d'où viennent ses ressources, quels milieux elle transforme,
quelles dépendances elle installe, quels territoires elle expose, quels
corps elle requiert, quelles formes de vie elle rend possibles ou
impossibles. Sans cette comparution matérielle, la co-viabilité
manquerait son point le plus sensible : la lutte pour les conditions
terrestres de l'habitation commune.
Cette bascule ne doit pas être dramatisée comme si elle était totale,
homogène, déjà parfaitement accomplie. Des scènes subsistent, parfois
robustes, parfois fragiles. Des espaces de contestation, de délibération
et de reprise continuent d'exister. Mais ils apparaissent souvent comme
disjoints des lieux où les décisions se prennent effectivement. La
tension se joue moins entre présence et absence de scène qu'entre leur
centralité et leur marginalisation. Le problème décisif n'est pas de
savoir si toute scène a disparu ; il est de comprendre que la dynamique
dominante tend à rendre optionnelle l'épreuve dont dépend pourtant la
viabilité de la régulation.
C'est ici que la distinction entre durabilité et co-viabilité prend
toute sa force. La durabilité, telle qu'elle s'est imposée dans les
discours contemporains, ne doit pas être critiquée d'abord pour ses
intentions, mais pour sa forme. Elle tend à fonctionner comme un
opérateur de neutralisation de la conflictualité : en posant comme
objectif la préservation ou l'ajustement de certains équilibres, elle
déplace l'attention vers la gestion des variables, l'optimisation des
paramètres, la correction des trajectoires. Ce déplacement n'est pas
illégitime en soi ; il le devient lorsqu'il s'accompagne d'une
évacuation des formes dans lesquelles les choix qui structurent ces
trajectoires pourraient être discutés. La durabilité peut alors
s'accommoder d'une régulation sans scène. La co-viabilité, elle, en fait
une impossibilité.
La différence est décisive. La première tend à organiser la continuité
des systèmes ; la seconde à instituer les conditions de leur reprise. La
première privilégie l'ajustement des variables ; la seconde la mise à
l'épreuve des fondements. La première peut se satisfaire d'une
gouvernance qui corrige des déséquilibres ; la seconde exige des formes
dans lesquelles les conditions mêmes de ces corrections peuvent être
adressées, contestées, transformées. Ainsi comprise, la co-viabilité ne
constitue pas un idéal abstrait. Elle désigne le régime minimal dans
lequel un monde peut continuer à se transformer sans se soustraire à sa
propre interrogation. Elle n'abolit pas les tensions ; elle en organise
la tenue. Elle n'élimine pas les conflits ; elle en rend l'épreuve
possible. Elle ne garantit pas la justice ; elle rend au moins pensable
sa recherche.
Il reste alors à comprendre ce qui, en dernière instance, est affecté
par cette transformation. Non pas seulement des institutions, des
règles, des procédures, mais des formes d'existence. Des vies. Des
milieux. Des devenirs. Si l'archicratie prend finalement une telle
importance, ce n'est pas parce qu'elle offrirait une théorie plus
satisfaisante du pouvoir ; c'est parce qu'elle reconduit l'analyse à ce
qui, sans scène, devient politiquement illisible. Là où la régulation se
déploie sous forme de flux, de calculs, de traitements, le vivant tend à
être reconduit à des variables. Les milieux deviennent des stocks ou des
contraintes. Les corps deviennent des profils, des trajectoires, des
cas. Les expériences deviennent des données d'ajustement. Ce processus
n'est pas nécessairement intentionnel. Il résulte de la logique même des
dispositifs qui, pour fonctionner, doivent simplifier, catégoriser,
standardiser. Mais cette simplification a un effet décisif : elle
désinscrit le vivant de la scène. Elle le rend opérable sans qu'il ait à
apparaître.
Le vivant ne disparaît pas ; il devient politiquement illisible. Il est
là, partout affecté, mobilisé, transformé — mais de moins en moins
capable de faire retour sur ce qui l'affecte. Un monde sans archicration
est un monde dans lequel le vivant est présent sans être représentable,
affecté sans être adressable, engagé sans être entendu. Il est pris dans
des opérations, mais il ne peut plus apparaître comme ce à partir de
quoi celles-ci devraient être interrogées.
C'est en ce sens que l'oblitération archicratique produit une crise de
reconnaissance. Non pas au sens restreint d'une reconnaissance morale ou
symbolique, mais au sens plus fondamental d'une reconnaissance comme
condition d'apparition dans un espace où l'on peut être pris en compte.
Reconnaître ne signifie pas simplement identifier ou décrire. Cela
signifie instituer des formes dans lesquelles ce qui est affecté peut
être reconduit à une scène, où il peut être exposé, où il peut entrer en
relation avec ce qui décide. Sans cette reconnaissance, le vivant peut
être protégé, géré, optimisé ; il ne peut pas être politiquement tenu.
Il faut alors comprendre que la question de la scène n'est pas
extérieure à celle de la liberté. Elle en constitue l'une des conditions
minimales. Non la liberté comme autonomie absolue, mais comme
possibilité d'intervenir sur les conditions qui nous affectent. Une
société qui ne dispose plus de formes dans lesquelles ses propres
régulations puissent être interrogées tend à se percevoir comme soumise
à des nécessités. Elle perd la capacité de distinguer ce qui relève de
contraintes inévitables et ce qui relève de choix. À l'inverse, une
société qui institue des épreuves se dote de la possibilité de se
rapporter à elle-même comme à un ensemble de décisions révisables. Elle
ne supprime pas les contraintes, mais elle les inscrit dans des formes
où elles peuvent être discutées.
À ce point, aucune réponse définitive ne peut être apportée. Aucun
modèle achevé ne peut être proposé. Mais une exigence demeure, désormais
visible et irréductible. Un monde ne devient inhabitable ni parce qu'il
est traversé de tensions, ni parce qu'il doit décider dans
l'incertitude, ni parce qu'il affronte des contraintes puissantes. Il le
devient lorsqu'il ne dispose plus des formes capables de porter ce qui
le traverse autrement que par la pure exécution. Ce qui est en jeu n'est
ni la suppression du conflit, ni l'optimisation des dispositifs, ni la
stabilisation d'un équilibre. Ce qui est en jeu, c'est la possibilité de
maintenir ouvertes les formes dans lesquelles un monde peut se rapporter
à lui-même à partir de ce qu'il affecte. La possibilité, toujours
fragile, toujours menacée, de ne pas confondre ce qui fonctionne avec ce
qui se tient.
Rendre à la régulation les formes dans lesquelles elle peut encore être
tenue comme monde : telle est l'exigence à laquelle reconduit l'ensemble
de ce parcours. Non comme un programme, ni comme une promesse, mais
comme ce sans quoi aucune transformation ne peut être habitée. Car ce
n'est jamais l'ordre seul qui fait tenir un monde. C'est la possibilité,
pour cet ordre, d'être interrompu, exposé, repris. Là où cette
possibilité se ferme, le monde peut continuer à marcher ; il cesse peu à
peu d'être habitable. Là où elle demeure ouverte, fût-ce dans le
conflit, sous contrainte, précairement, quelque chose du politique
subsiste encore : non la paix, ni l'innocence, ni l'harmonie, mais la
capacité d'un monde à ne pas se confondre avec sa propre exécution.
C'est là, précisément, que commence l'exigence archicratique : pouvoir
encore demander pourquoi, suivre comment, et rouvrir la scène où ce qui
s'exécute au nom d'un monde doit répondre de ce qu'il fait à ce monde.

View File

@@ -1,290 +1,578 @@
---
title: "Prologue — Fondation, finalité sociopolitique et historique"
edition: "archicratie"
status: "modele_sociopolitique"
title: Prologue — Fondation, finalité sociopolitique et historique
edition: archicrat-ia
status: essai_these
level: 1
version: "0.1.0"
version: 0.1.0
concepts: []
links: []
order: 10
summary: ""
summary: ''
source:
kind: docx
path: "sources/docx/archicrat-ia/Prologue—Archicratie-fondation_et_finalite_sociopolitique_et_historique-version_officielle.docx"
path: sources/docx/archicrat-ia/Prologue—Archicratie-La_tenue_des_mondes-version_resserree.docx
---
Nous vivons dans une époque saturée de diagnostics sur les formes de domination, les mutations du pouvoir, les détournements de la souveraineté. Depuis une vingtaine dannées, les appellations saccumulent : *démocratie illibérale*, *ploutocratie*, *happycratie*, *gouvernement algorithmique*, *démocrature*… À travers ces tentatives de nommer le désordre du présent, un fait se répète, de manière sourde : la scène politique semble désorientée. Les catégories héritées — *État*, *pouvoir*, *représentation*, *volonté générale*, *contrat social* — apparaissent de moins en moins capables de décrire ce qui nous gouverne effectivement.
Cest cette perte de prise sur le réel que ce livre souhaite prendre au sérieux. Non pour lui ajouter un terme de plus au lexique fatigué des contre-pouvoirs ou des impuissances, mais pour repartir dun point plus fondamental, presque en-deçà de la question politique classique. Ce point, cest celui de la *tenue dun monde commun* — cest-à-dire la possibilité, pour des êtres dissemblables, vulnérables, inégaux, traversés de contradictions et situés dans des temporalités hétérogènes, de coexister sans sannihiler.
Cette tenue du monde néquivaut ni à la paix civile, ni à la stabilité des institutions, ni à lordre établi. Cest une difficulté conceptuelle que denvisager *la possibilité pour un ordre de durer sans seffondrer*, alors même quil est traversé en permanence par des forces et des légitimités qui le travaillent, léprouvent, le modifient, lusent, le contestent, le prolongent ou le sapent. Cette possibilité de tenir le monde commun, nous la nommons *co-viabilité*.
Le terme nest pas trivial. Il ne sagit pas simplement dune viabilité partagée, ni dune coexistence pacifique, ni même dune durabilité écologique élargie. Il sagit dun état dynamique, instable, fragile, dans lequel un ensemble — une société, dun système biologique, dune formation historique, dun milieu technique ou dun monde institué — parvient à maintenir une *existence viable*, *malgré et grâce à ses tensions constitutives*.
La *co-viabilité* ne désigne ni un état déquilibre, ni une finalité normative. Elle nomme un état dynamique et instable, dans lequel un monde — société, milieu technique, formation historique — tient non pas par homogénéité ou harmonie, mais parce quil parvient à réguler ce qui le menace sans se détruire lui-même. Il compose entre des éléments hétérogènes — forces dinertie et dinnovation, attachements profonds et ruptures nécessaires — sans chercher à les unifier. Cest cette disposition active, faite de compromis fragiles et dajustements toujours révisables, que nous tenons pour première, et non dérivée.
Ce qui revient à dire que la question politique — au sens fort — na peut-être jamais été qui commande ? Mais bien plus : *Comment un ordre tient-il malgré ce qui le défait ?* *Quels sont les dispositifs qui permettent à une société de ne pas se désagréger sous leffet de ses propres contradictions ?* *Comment sont régulées les tensions qui traversent le tissu du monde commun sans le déchirer ?*
Cette bascule de perspective prolonge des intuitions anciennes. Max Weber (*Économie et société*, 1922) rappelait que ce qui fait tenir un ordre, ce nest pas seulement la force ou la loi, mais les « chances de validité » socialement reconnues. Norbert Elias (*La dynamique de lOccident*, 1939/1975) montrait, quant à lui, que les sociétés se maintiennent par des équilibres toujours précaires entre interdépendances, rivalités et pacifications. Notre démarche sinscrit dans ce sillage : travailler cette interrogation sur les *conditions de viabilité dun monde commun*.
Ce changement de perspective implique une rupture profonde dans la manière même de poser la question politique. Pendant des siècles, les sociétés ont pensé le politique à partir de principes transcendants — Dieu, Nature, Volonté générale, Pacte social. Ces principes, supposés extérieurs aux conflits du présent, garantissaient lordre en surplomb. Comme le rappelle Michel Foucault, il ny a pas de principe extérieur au jeu des forces : seulement des rapports de pouvoir situés, modulés, réversibles. Cest précisément cette exigence — trouver dans les relations elles-mêmes les ressources nécessaires pour maintenir des mondes vivables — qui définit notre époque.
Ce qui émerge nest pas de nouveaux principes, ni une nouvelle idéologie, mais une exigence beaucoup plus modeste, mais aussi beaucoup plus difficile à satisfaire : celle de trouver dans les relations elles-mêmes — entre groupes, entre institutions, entre individus, entre temporalités — les ressources nécessaires pour maintenir leurs mondes viables. Autrement dit : cest *dans* les tensions, *à même* les conflits, *au sein* des alliances, *au cœur* des désaccords et des polémiques, que semble se construire la régulation. Non plus *au-dessus*, par un décret transcendant, mais *au-dedans*, par un agencement toujours révisable. Cest cela que nous voulons dire — sans technicité inutile — quand nous parlons dun déplacement vers une *instance de régulation située de co-viabilité* : un espace commun où les forces hétérogènes, souvent antagonistes, peuvent coexister, se contredire, se confronter, séprouver, sans se détruire mutuellement.
Penser le politique depuis cette approche, cest renoncer à lidée même quun ordre puisse se fonder définitivement, une fois pour toutes. Cest reconnaître que ce qui fait tenir une société nest jamais un principe unique, un commandement souverain, une légitimité première, mais *un espace dépreuve toujours rejoué* où se négocient, se recadrent, sopposent, sajustent des forces hétérogènes dont laccord est constamment partiel, toujours temporaire, perpétuellement instable.
Par conséquent, un ordre durerait moins par ses fondements proclamés que par ses *capacités régulatrices effectives*. Autant dire que ce sont les dispositifs, les formats, les médiations — parfois massifs, parfois imperceptibles — par lesquels un ordre parvient à faire coexister ce qui, en droit, pourrait sexclure : des intérêts antagonistes, des affects discordants, des récits historiques incompatibles, des régimes de valeur irréconciliables, des temporalités sociales déphasées, des exigences contradictoires en matière de justice, d'efficacité, de mémoire ou d'avenir.
Cet ordre ne les efface pas. Il ne les réconcilie pas dans un consensus fictif. Il ne les fusionne pas dans une synthèse idéologique illusoire. Il les tient ensemble sans les résoudre, par des équilibres instables, des arrangements contingents, des formats dajustement plus ou moins durables. Cest là que se situe toute la puissance — et la fragilité — de la régulation : tenir sans annuler, moduler sans effacer, organiser sans clore.
Cette capacité régulatrice, si elle échappe aux regards, nen est pas moins structurante. Elle repose sur des agencements concrets, souvent silencieux, mais puissamment opératoires : une réforme budgétaire qui stabilise un conflit de génération sans le nommer ; un indicateur économique qui requalifie des arbitrages sociaux sans débat préalable ; un protocole logistique qui reconfigure la hiérarchie entre producteurs et distributeurs sans quaucune loi ne limpose. Chaque fois, il y a régulation sans visibili, composition sans consensus, opération sans fondement explicite.
Il ne faut donc pas sy tromper : ce que nous décrivons ici ne relève ni dun effondrement soudain, ni dun basculement spectaculaire, mais dun déplacement discret — pourtant dune portée considérable : la désactivation lente et diffuse des opérateurs classiques de lisibilité du politique. Ce qui se défait sous nos yeux est une grammaire dinterprétation, un outillage cognitif collectif, une capacité de mise en récit. Et ce processus est loin dêtre anodin.
Il y eut un temps — disons moderne — où lon pouvait encore localiser les lieux de pouvoir, identifier les détenteurs de lautorité, délimiter les instances de délibération, nommer les figures de légitimation. On pouvait encore croire que la loi émanait dun espace visible, que la souveraineté résidait quelque part, que la représentation engageait effectivement une parole au nom dun collectif déterminé. Ce temps — sans avoir disparu totalement — a cessé de produire des repères fonctionnels. Car si les formes demeurent — constitutions, institutions, procédures, déclarations —, une part décisive des arbitrages réels sest déplacée hors de leur emprise. Le centre de gravité régulateur a migré vers des configurations hors des prises démocratiques.
Désormais, ce sont des métriques qui tranchent à la place des normes, des calculs prédictifs qui se substituent aux débats. Les interfaces filtrent les droits et les voix sans quaucune instance délibérative nait statué sur leurs paramètres. Les arbitrages majeurs — ceux qui orientent les seuils démission de gaz à effet de serre, la sélection scolaire, les répartitions budgétaires, les politiques de logement, les trajectoires de migration, ou lorganisation des chaînes dapprovisionnement mondialisées — ne sont plus discutés collectivement, mais disséminés dans des protocoles techniques, financiers, juridiques, algorithmiques, souvent conçus hors scène, et inaccessibles à toute mise en cause publique.
Cela ne veut pas dire que le politique ait disparu, mais plutôt quil tend peu à peu à se rendre indiscernable. Il ne sexerce plus à travers des figures lisibles, mais à travers des chaînes dacteurs, des scripts techniques, des formats doptimisation, des boucles de retour automatisées. Cette dissémination ne relève pas dune abstraction théorique ou dun soupçon idéologique : elle se manifeste chaque jour dans des configurations concrètes, reconnaissables, pourtant rarement nommées pour ce quelles sont. Son efficacité tient précisément à sa banalité. Car désormais, ce ne sont plus des figures du commandement qui décident en surplomb, mais des dispositifs encastrés, des logiques de fonctionnement intégrées à des protocoles dapparence neutre.
Cest un marché carbone qui, au nom de seuils agrégés à léchelle continentale, conduit à la fermeture dun site industriel local, sans quaucune figure politique ne puisse rendre visible ni opposable larbitrage opéré. Cest un algorithme de régulation hospitalière qui, face à une tension budgétaire ou épidémiologique, déprogramme automatiquement des interventions chirurgicales — sans quaucun médecin, aucun patient, aucun responsable politique ne puisse véritablement en discuter les critères. Cest une plateforme numérique de traitement des titres de séjour qui suspend une demande pour “anomalie de saisie”, sans contact humain, sans justification claire, sans voie de recours instituée. Cest un logiciel de pilotage budgétaire, adossé à des indicateurs defficience, qui impose la réduction dune politique sociale sans passage par une arène délibérative. Cest aussi un score algorithmique de risque bancaire qui écarte discrètement une famille dun prêt, bien avant quelle ait pu formuler son projet.
Contrairement aux apparences, ce qui soffre au regard nest plus la figure massive du pouvoir trônant dans la clarté de ses apparats, mais la trame patiente dune régulation en mouvement. Disparues, les instances fixes ; effacée, la demeure solennelle de lautorité. Le réel geste de gouvernance sinsinue insidieusement dans des protocoles, se glisse sournoisement dans la routine, sentrelace irrémédiablement dans les habitudes, se ramifie inextricablement dans dinnombrables appareils sans visage. Nul acte inaugural nen marque ostensiblement la naissance, nulle proclamation nen scande les rythmes. On constate seulement que la régulation avance sans fracas, tisse patiemment la toile discrète sur laquelle se déplacent nos vies. Ce nest plus tant le décret ni la loi qui pèsent,bien plus les enchevêtrements de normes, limperceptible maillage de procédures et lajustement continu de directives flexibles.
La contrainte naccable plus par lostentation de lordre, mais sinocule par la subtilité des systèmes. Ainsi, il sagit désormais de façonner, par lagencement soigné déquilibres, de données, de flux, où chacun se trouve relié, indexé, impliqué à même cette dentelle administrative, sans jamais croiser le centre, sans jamais savoir nommer celui ou ce qui agit. La régulation moderne tresse ainsi un univers de seuils mobiles et dagencements souples, où lon ne peut jamais tout à fait fixer le moment ni le lieu du pouvoir agissant — mais où, à chaque pli de la vie collective, se lit lempreinte dune architecture invisible.
La difficulté dy résister tient moins à une violence perceptible quà leur ontologie dévidence. Elles ne savancent pas comme autorités, ne se proclament pas comme pouvoir: elles fonctionnent, nous relient et donc elles opèrent. Et cette opération sans légitimation démocratique — pouvoir sans figure, contrainte sans théâtre — rend caduques nos anciennes grilles dinterprétation. Désormais, ce qui nous affecte le plus ne sénonce plus, il simpose sans discours jusquau plus intime.
Cela signifie que le politique sest décousu de ses formes historiques. Il continue dagir, de décider, dorienter — mais sous dautres modalités, dans dautres lieux, avec dautres instruments, selon des régimes dopérativité quaucune des catégories anciennes ne parvient plus à saisir, à rendre intelligible et à traduire sans trahir.
Autrement dit, nous avons changé dépoque sans encore avoir pu changé de lexique. Nous continuons de penser avec des formes obsolètes ce qui sactive sous nos yeux. Nous employons les mots dhier pour décrire des processus qui les excèdent de toutes parts. Nous parlons de gouvernements, là où il faudrait parler de structures de régulation composite. Nous discutons de lois, là où il faudrait décrire des protocoles, des seuils, des scénographies dajustement, des mécanismes de *feedback* algorithmique, des normes sans normalisateurs.
Cette disjonction entre lexpérience vécue de la contrainte et le vocabulaire disponible pour la dire nest pas quun problème théorique. Elle produit une désorientation profonde. Elle empêche de penser le réel, de localiser les responsabilités et rend inopérantes les critiques. Elle altère la capacité collective à formuler des exigences, jusquà dissoudre les repères et les registres daction.
Cette impuissance démocratique généralisée à nommer, situer, orienter les formes réelles de la régulation se donne parfois à voir dans des situations dapparente clarté — et cest peut-être là le plus troublant. Prenons un exemple rendu brûlant par lactualité française en 2025 : la proposition de ce que lon appelle la *taxe Zucman*. Formulée par léminent économiste Gabriel Zucman, cette mesure vise à instaurer un impôt minimal annuel sur le patrimoine des ultra-riches — en France et dans le monde — au-delà dun seuil (autour de 100 millions deuros). Le taux proposé est denviron 2 % sur la valeur totale du patrimoine net, quil soit liquide ou partiellement non liquide (actions non cotées, participations, biens immobiliers), ce qui pose des défis de paiement et dévaluation.
Lidée est de corriger ce que Zucman identifie comme un déséquilibre fiscal majeur : les très grandes fortunes paient aujourdhui, proportionnellement, beaucoup moins que ce que permettrait une imposition équitable et progressive, notamment en raison de lévasion fiscale, de la mise sous structures opaques par *holding*, du transfert du patrimoine privée en patrimoine professionnel ou de la dissociation entre richesse effective et revenu imposable.
Si cette proposition est débattue publiquement — soutenue dans certains milieux politiques, évoquée dans les médias, portée par des organisations internationales — elle ne sest pourtant pas traduite jusquà présent en un espace de régulation pleinement opérationnel : pas de dispositif stable, pas de mécanisme universel, pas dinstance de coordination internationale suffisamment puissante ni opposable pour rendre cette taxe effective à léchelle voulue.
Ce cas illustre une modalité très contemporaine de la régulation suspendue : il montre comment une idée peut être reconnue, débattue, même populairement validée, sans jamais franchir le seuil dune véritable effectuation. On y voit comment une idée peut être claire et manifeste, mais rester orpheline de lieu de confrontation effectif, incapable de franchir les seuils institutionnels, techniques ou politiques qui rendent un projet pleinement opérant. Le principe est clair. Le diagnostic est étayé avec un large appui académique. Lurgence sociale est incontestable. Et pourtant, rien ne se passe. Ou plutôt, rien ne se produit. Il y a blocage. Symbole parfait dune époque où les régulations se pensent plus vite quelles ne sinstituent, où les décisions les plus urgentes sévaporent faute de structure pour les porter.
Ce hiatus, cette fracture, ce décrochage entre lenjeu perceptible dans lespace public et le blocage des régulations effectives — voilà ce que nous tentons de cerner, pour en faire le lieu même de notre interrogation. Car cest bien cela qui se joue, dans le trouble du présent : non pas une simple crise des institutions, mais une crise de lisibilité de la régulation elle-même. Nous ne savons plus nommer ce qui nous oblige, ni situer ce qui nous gouverne, ni identifier ce qui structure encore nos appartenances. Et ce, faute dun cadre dintelligibilité commun, apte à relier ce qui contraint et ce qui tient, ce qui évolue et ce qui persiste, ce qui menace et ce qui protège.
À mesure que les instruments du pouvoir deviennent techniques, que les décisions se diluent dans des protocoles, que les normes se déterritorialisent dans des scripts ou des seuils, la question de la régulation glisse en dehors du périmètre politique, comme si elle navait plus de lieu propre, plus darène reconnaissable, plus de langage pour sénoncer. Le politique ne disparaît pas — il se désinscrit, il se dissimule dans dautres formats, il sinternalise dans les infrastructures, il se pulvérise dans des régularités sans délibération démocratique.
Et face à cette évanescence, deux réflexes saffrontent. Lun, nostalgique, cherche à réhabiliter les anciennes figures du pouvoir : lautorité, la loi, la souveraineté, comme si elles pouvaient encore réactiver un ordre en désagrégation. Lautre, sceptique, postule quil ny a plus rien à faire — que nous vivons lépuisement définitif de larène politique, sa disparition dans le flux, le calcul, le désordre entropique des systèmes.
Pour autant quelque chose continue dagir, de structurer, de différencier, même en labsence de pouvoir identifiable. Ce quelque chose, cest la manière dont une société régule ses tensions internes : non plus en les effaçant, mais en les tenant, en les exposant, en les configurant dans des dispositifs — visibles ou non — capables de contenir sans abolir, de moduler sans figer, de différer sans éluder.
Nous devons donc reprendre à neuf la question la plus enfouie de la politique : *quest-ce qui fait quun monde collectif tient ?* Non plus dans labstrait, mais dans la matérialité de ses pratiques, la texture de ses conflits, larchitecture de ses médiations. *Par quels agencements tient-il ?* *À travers quelles épreuves ? Selon quelles temporalités ? Et sous quelles conditions de réversibilité ?*
Car il ne suffit plus de dire que le pouvoir est diffus, que les normes sont flexibles, que les algorithmes décident. Encore faut-il comprendre comment ces formes apparemment dispersées composent — ou échouent à composer — un monde co-viable, cest-à-dire capable de réguler sans brutaliser, de transformer sans dissoudre, dêtre robuste et de résister sans exclure. Cest là, dans cette capacité à organiser la tension sans basculer dans la clôture ni dans le chaos, que se joue le cœur du politique contemporain — non plus comme souveraineté, mais comme scénographie régulatrice.
Mais cette scénographie, aujourdhui, est inopérante. Soit elle est fantomatique — laissée à labandon, réduite à un formalisme creux. Soit elle est confisquée — captée par des dispositifs opaques, des rationalités techniques, des opérateurs propriétaires fermés. Dans les deux cas, ce qui est mis en péril, ce nest pas uniquement lidée de démocratie ou le jeu des institutions, mais la possibilité même dun monde de confrontation et de controverse, dun espace commun où la régulation pourrait être rendue visible, négociable, opposable, réversible.
Or ce qui sefface désormais, cest la capacité collective à en formuler les conditions, à en penser les formes, à en situer les nouvelles arènes de pouvoir. Ce qui sérode, plus encore quune architecture institutionnelle, cest notre aptitude à dire ce qui oblige, à comprendre ce qui ajuste, à situer ce qui contraint. Létrangeté du présent ne réside pas dans une hypertrophie du pouvoir — comme on le répète trop souvent — mais dans un brouillage profond de ses modes dexistence. Nous ne savons plus vraiment comment le pouvoir sexerce, où il opère, par quels instruments il module, ni selon quels critères il ajuste. Et pourtant, nous continuons de mobiliser les mêmes mots : *monarchie*, *oligarchie*, *démocratie*, *technocratie*, *bureaucratie*, *ploutocratie*, *méritocratie*… Comme si ces termes suffisaient encore à décrire ce qui nous affecte.
Ces termes politiques sorganisent autour de deux grands suffixes — *-archie* et *-cratie* — forgés dans les débats de la Grèce antique, et largement sédimentés dans les lexiques modernes. Les suffixes en -*archie* désignent un *pouvoir fondé sur un principe premier* (*arkhè*), une origine ou une légitimité verticale : monarchie, oligarchie, etc. Ceux en -*cratie* désignent plutôt les *modalités pratiques dexercice du pouvoir* (*kratos*) : démocratie, technocratie, bureaucratie, etc.
Cette distinction entre fondement et exercice, légitimation et opération, traverse toute la modernité politique. Cependant cette séparation ne permet plus aujourdhui de saisir la réalité des régulations effectives. Car les scènes d*arkhè* se sont en grande partie effondrées sans être remplacées, tandis que les *kratos* contemporains tendent à sexercer sans adresse, sans représentation, sans théâtre. Lon disserte sur les vertus de la démocratie, mais le *dèmos* na plus de lieu de confrontation effective : *serait-ce la rue ? Seraient-ce les réseaux sociaux ? Seraient-ce les médias ? Serait-ce le Parlement ?* Force est de constater quil nen est rien : la première est réprimée ; les seconds sont filtrés et compartimentés ; les suivants sont contrôlés par une poignée de milliardaires ; et ce dernier est loin de représenter lentièreté de la société. Lon invoque la République, mais la *res publica* — la chose publique, appellation la plus vague et la plus creuse que lon puisse donner de lespace politique — se dissout dans des logiques qui échappent à toute délibération commune : absence de débat, passage en force, brutalisme institutionnel. Quant au langage politique, il continue dénoncer des structures et des projets, mais il ne parvient pas à décrire les opérations effectives de régulation tant le système socio-économique, en plus de sêtre libéralisé et privatisé, sest étendu et complexifié tout en confiant les leviers daction au niveau supranational.
Cest précisément cette disjonction — entre les principes supposés légitimer le pouvoir, et les dispositifs qui en assurent leffectuation — qui produit aujourdhui notre impuissance à penser la régulation. Car aucun de ces termes ne dit où se tiennent les tensions, comment elles sont traitées, par quelles instances elles sont articulées. Aucune *-archie* ne garantit aujourdhui la dispute de ses fondements. Aucune *-cratie* norganise les conditions de son opposabilité. Et pendant que nous nous obstinons à nommer des formes de régime, les processus réels de régulation — eux — échappent à tout espace visible dépreuve. Jusquà présent, ils opèrent privés de contradictoire, dépourvus de délai, amputés dinstitutions de réversibilité. Autrement dit : nous sommes gouvernés sans être gouvernés, régulés sans régulation légitimée, affectés sans instance délibérative.
Cette dissociation — entre pouvoir nommé et régulation agissante — peut sembler abstraite. Elle ne lest pas. Un cas devenu emblématique en offre la preuve saisissante. Entre 2010 et 2011, lÉtat belge a connu une situation institutionnelle inédite — près de 540 jours sans gouvernement fédéral de plein exercice. Aucun exécutif formel, aucun nouveau mandat, aucune majorité parlementaire opérationnelle. Et pourtant, rien ne sest effondré. Les institutions ont continué à fonctionner. Les services publics ont été assurés. Léconomie na pas sombré. La diplomatie sest poursuivie. Et la société belge a tenu malgré les tensions communautaires.
Cet épisode, souvent évoqué sur le ton de lanecdote, mérite dêtre considéré ici comme un symptôme politique majeur. Il indique que la régulation ne passe plus nécessairement par la verticalité du pouvoir, mais par des dispositifs latents, des agencements structurels, des inerties normatives et des coordinations transversales ou distribuées. Il montre quun ordre peut fonctionner sans fondement renouvelé, tenir sans pilotage, résister sans commande visible. Pierre Rosanvallon le soulignait (*La Légitimité démocratique*, 2008), en affirmant que les sociétés reposent aussi sur des « formes de légitimité latentes », moins spectaculaires que le vote ou la loi, mais non moins décisives. Lexpérience belge illustre avec force cette persistance dune régulation sans gouvernement explicite. Ce phénomène suggère que larchitecture régulatrice nest plus identifiable aux lieux habituels de la souveraineté.
Pour autant, le pouvoir na pas disparu ; il sexerce désormais depuis dautres formes que celles qui le légitimaient. Cest quil sest délocalisé, désinstitutionnalisé, déréférencé— tout en continuant à structurer silencieusement la vie collective. Et cest dans cet écart grandissant — entre labsence de gouvernement et la persistance dune régulation — que se dessine le cœur de la problématique contemporain : pour nombre dentre nous, nous continuons à chercher le pouvoir là où il nest plus, et à négliger les régulations implicites là où elles deviennent de plus en plus décisives.
Pour que ces dispositifs puissent fonctionner ainsi, discrètement et efficacement, sans quon puisse les identifier ni les contester, il faut dabord que les lieux où ils auraient pu être exposés, discutés ou débattus soient neutralisés, effacés, disqualifiés ou rendus inutiles. Les lieux de pouvoir sévaporent progressivement, les moyens dexpression se désagrègent, et les cadres dappel à la responsabilité deviennent in-entendables. Larène du politique ne disparaît pas brutalement, elle se désagrège lentement à mesure que ses conditions dexistence — la mise en scène, la confrontation et la mise à lépreuve — se retirent.
Les anciens espaces dexposition — Parlement, place publique, journal, commission, agora, tribune — ne remplissent plus leur fonction instituante. Non quelles soient abolies : elles subsistent, mais tournent à vide par éléments de langage superposés, par logiques oblitératrices, par interruptions des moments dinterpellation et des déploiements de pensées contre-propositionnelles. Elles parlent sans prise. Elles évoquent sans effet. Elles promettent sans adossement réel. En somme, elles hypnotisent et désactivent. Et tandis quelles persistent comme formes, les lieux effectifs de la régulation — là où sarbitrent réellement les seuils, sajustent véritablement les normes, se décident les niveaux de tolérance ou dexclusion — se déplacent hors de la portée de tous.
Cette désactivation des anciennes scènes de visibilité ne relève pas dune abstraction — elle a connu, en France, un moment décisif et révélateur : le référendum de 2005 sur le traité constitutionnel européen (TCE). Ce vote ayant pourtant agrégé près de 55 % de refus, na pas produit les effets régulateurs que lon aurait pu attendre. Deux ans plus tard, son contenu central était repris dans le traité de Lisbonne, adopté par voie parlementaire à Versailles, sans jamais redonner la parole aux citoyens.
Ce court-circuitage du résultat du référendum na pas seulement provoqué un malaise démocratique : il a signalé lobsolescence dune arène politique qui prétend encore incarner la souveraineté populaire, tout en sajustant aux impératifs dune régulation supranationale désindexée de tout espace de débat. Depuis, les grandes décisions se prennent largement hors scène, dans des configurations qui échappent aux rituels de la légitimation représentative. Lépisode du TCE fut ainsi moins une exception quun révélateur : la souveraineté na pas disparu, elle sest déplacée et sest muée ; et ce sont les lieux traditionnels de confrontation — qui permettaient de la contester — qui perdent peu à peu de leur puissance.
Il en résulte aujourdhui ce que lon pourrait nommer *une vacance des figures politiques*. Non pas un vide institutionnel — les appareils demeurent — ni un abandon total du pouvoir — les décisions continuent de tomber — mais bien un effacement progressif des repères identifiables à travers lesquelles ce pouvoir pouvait encore être *pensé*, *nommé*, *interrogé*, *disputé ou dénoncé*. Ce qui fait défaut, ce ne sont ni les procédures, ni les organigrammes, ni les énoncés de façade ; le pouvoir ne parvient plus à lui donner horizon partagé, épreuve contradictoire et adresse signifiante.
Les institutions demeurent et fonctionnent. Des lois sont encore votées, des ordonnances promulguées, des discours prononcés dans des formes toujours codifiées. Pourtant, ces énoncés institutionnels, malgré leur constance formelle, peinent à produire de lattachement, du conflit réglé, du récit commun. Il faut dire que lorsque les grandes directives sont déjà prises ailleurs, et quune tutelle sexerce sur les marges de manœuvre budgétaire et les politiques publiques, tout programme de rupture avec lexistant ne peut advenir sans discrédit. Ceci conduit jusquà présent à entériner et à traduire en terme juridique les grands principes issus des institutions européennes. Ainsi nos partis politiques et nos institutions samenuisent et perdent de leur influence : elles peinent à percer les seuils et à générer des événements rassembleurs. Ils surviennent, puis sévanouissent — rarement débattus, rarement disputés. Ils tentent néanmoins de transformer mais restent peu crédibles. La vie démocratique ne parvient plus à infléchir ledit pouvoir dans une visée dhorizon partagé puisque sa souveraineté sest vue entachée.
Peut-être faut-il alors suspendre un instant le flux de lanalyse pour ouvrir la perspective : entendre ce que cette disparition fait à nos imaginaires. Car perdre les lieux de confrontation, ce nest pas perdre uniquement un espace politique — cest voir seffacer le langage commun de la mise en tension, de lépreuve contradictoire, du désaccord rendu partageable. En somme, celui-ci nest pas quun cadre, mais aussi une forme sensible, un rythme, un tempo, un théâtre où pouvaient sexprimer les dissensus, mais aussi se nouer des alliances, des compromis, des co-habitations et des promesses de coexistence. Cest cette mise en forme qui vacille aujourdhui — et avec elle, notre capacité à rendre visibles les lignes de fracture, les régimes dattachement, les besoins vitaux et leurs modalités darbitrage.
Depuis les élections se succèdent, mais loffre programmatique suniformise. En France, lors des campagnes présidentielles de 2022, plusieurs observateurs ont noté une quasi-absence de débats contradictoires sur les infrastructures écologiques, la gestion de leau, les algorithmes de tri social ou les seuils budgétaires européens — sujets pourtant structurants et centraux des problématiques actuelles. La parole politique reste intense, mais elle survole en ignorant les points réels dadhérence et de discordance. Elle nexpose ni la texture du monde vécu ni la réalité du tissu productif. Elle ne donne plus à saisir ni la forme ni la scène où les arbitrages sopèrent. Elle devient commentaire sans impact, phrase choc ou viralité polémique sans colonne vertébrale permettant de se figurer les problématiques.
Côté médias, le constat est plus ambivalent, mais tout aussi troublant. Dun côté, linformation est surabondante ; de lautre, les controverses senlisent dans le flux. On discute des intentions, rarement des formats. On spécule sur les effets, sans jamais problématiser les dispositifs. Un exemple emblématique en est lémission télévisée *“Face à Baba”*, ou le “Grand Débat National” post-Gilets Jaunes qui suscita beaucoup de prises de parole, tout en ayant peu de prise sur le réel. Il y eut certes des paroles fortes, mais sans aucune structure dintégration. Il y eut des opinions tranchées, mais sans lénonciation dune architecture délibérative. De sorte que la parole a circulé, mais elle navait pas autorité à sinstituer. Elle nétait pas dans le bon lieu. Le plateau télévisé nayant pour autre vocation que laudience.
Même les commissions denquête, qui historiquement cristallisaient un moment de vérité ou de remaniement, semblent affectées. Le rapport de lAssemblée nationale sur la gestion de la pandémie de Covid-19, par exemple, a bien été publié en 2022. Il formule des dizaines de propositions. Mais pourtant, peu dentre elles ont fait lobjet dune reprise effective, ni dans la sphère politique, ni dans la sphére médiatique, ni dans la transformation des pratiques administratives. Là encore, la procédure opère — mais sans relai, sans engagement, sans espace de transformation. Même sil faut le reconnaître, certaines analyses ont néanmoins nourri un débat plus large sur létat de la santé publique, contribuant à renforcer la vigilance citoyenne sur les infrastructures hospitalières.
Un autre exemple, plus récent encore, illustre avec une intensité toute particulière ce décalage entre mise en scène délibérative et opérativité réelle : celui de la Convention Citoyenne pour le Climat, initiée en France en 2019 à la suite du mouvement des Gilets Jaunes. Ce dispositif inédit proposait à 150 citoyennes et citoyens, tirés au sort, de formuler des propositions concrètes pour réduire les émissions de gaz à effet de serre (GES) dans un esprit de justice sociale. La procédure fut longue, exigeante, documentée. Les membres furent encadrés par des scientifiques, des spécialistes, des juristes, des praticiens. Leurs recommandations — 149 au total — furent saluées, y compris par les experts du climat, comme ambitieuses, sérieuses, largement compatibles avec les engagements climatiques de la France. Le président de la République sétait engagé à les transmettre « sans filtre ».
Et pourtant. À lissue de la convention, la grande majorité des propositions furent vidées de leur substance, renvoyées en commissions, ou transformées jusquà linverse de leur logique initiale. Certaines furent reprises à la marge dans la loi « Climat et Résilience », dautres enterrées sans débat, dautres encore tournées en dérision. Lexpression « sans filtre » fut rapidement abandonnée, remplacée par des formules dilatoires. Linstance réflexive a existé, mais elle na pas su instituer. La parole a circulé, mais elle na pas performé. La procédure bien que dense, na pas permis là encore linstauration dune architecture de régulation efficiente.
En ce sens, la Convention na pas échoué parce quelle était utopique ; elle a échoué parce quelle na pas trouvé dancrage régulateur dans larchitecture politique réelle. Cet exemple montre bien comment un dispositif peut produire de la parole et de la visibilité, sans pour autant parvenir à instituer une régulation opérante. Ce nest donc pas un lieu de confrontation sans conflit, mais une instance délibérative qui na pas donné suite. Et cest ce type deffacement — non spectaculaire, mais systémique — qui constitue aujourdhui le symptôme dune archéologie du politique désamarrée de ses obligations démocratiques.
Contrairement au discours du sens commun pointant la responsabilité du chef de lÉtat, nous pensons que le pouvoir sest désincarné. Bien que les figures de lautorité demeurent — titres, fonctions, attributs symboliques — elles ne rassemblent plus ni contestation structurée (opposant), ni reconnaissance affective (popularité), ni légitimation opérante (autorité). Pendant ce temps, la conflictualité na jamais autant submergé le tissu social : désaccords éthiques, désynchronisations temporelles, fractures territoriales, crises multifactorielles, paupérisation systémique, violences symboliques ou physiques. Et malgré nous, cette conflictualité ne trouve plus les lieux où sexprimer sans exploser. Elle ne se problématise plus dans des dispositifs communs, mais éclate en formes de colère dispersées, parfois illisibles, parfois délégitimées avant même davoir trouvé son expression stabilisée. Tel fut le cas du mouvement des Gilets Jaunes.
Et pendant ce temps, les décisions, elles, se ramassent à la pelle : fermeture dun service hospitalier, recentrage budgétaire, ajustement dun seuil déligibilité, réforme à marche forcée du régime des retraites, réforme de lassurance chômage, redéfinition dindicateurs dévaluation du marché de lemploi, déremboursements médicaux, désindexation daide sociale, etc., etc. Ces décisions viennent, mais sans adresse explicite, sans exposition des arbitrages effectués, sans procès public, sans contradictoire. Elles sont le fruit dinstances spécifiques rendues opaques et qui napparaissent pas, ou nassument pas leur fonction politique. Elles opèrent sous couvert de technique, mais agissent comme pouvoir — sans lassumer publiquement.
Ainsi, ce nest pas la *capacité dagir* qui fait défaut — comme nous le voyons les régulations persistent — mais la *possibilité de rendre visible ce qui agit*. Ce qui tend à seffacer, ce nest pas le politique comme mécanisme de régulation, mais comme *espace de mise à lépreuve*. Nous habitons un monde saturé de normes, mais privé de figures crédibles de justification. Les arbitrages se multiplient sans explication, sans délibération, sans lieu darbitrage démocratiquement établi.
Et cest précisément cette disparition despaces de controverses et de confrontation — cette disparition des lieux où se mettait en forme le différend, où sexposait le conflit, où se partageait le sensible — qui constitue une perte capitale. Car cest par la mise en scène des dissensus que les sociétés humaines ont, pendant des siècles, pu penser ensemble ce qui les liait, les divisait, les orientait. Cest sur cette instance dépreuve quétaient rendues visibles les visions du monde qui saffrontaient, les justifications qui sopposaient, les intérêts qui sexprimaient. Supprimez la scène dexposition — et ce nest pas le pouvoir qui disparaît, mais la possibilité den débattre. De sorte que la régulation dans les faits ne sinterrompt jamais : cest la possibilité même quelle devienne affaire publique qui sefface. Quant à lordre des choses, il ne se dissout pas, il se mue. Et cest notre capacité collective à le mettre en cause qui se délite faute de compréhension et de préhension.
Privés de lieux publics partagés, devenus propriétés privées, nous sommes aussi privés dune mise en conflit visible et compréhensible. Pourtant, les tensions sont nombreuses, mais elles restent muettes, sans récit commun ni cadre dexpression. Ce qui nous divise cesse dapparaître clairement. Ce qui nous déchire na plus de langage partagé performatif. Ce qui devrait susciter débat et polémique sefface dans lindifférence ou se réduit à une simple gestion technique de lopinion et de la propagande. Le jeu politique ne dispute plus lordre du monde, car il semble ne plus le pouvoir, elle en devient seulement le décor figé, répétant sans contradiction les mêmes ritournelles idéologiques.
Or, sans polémique et sans cadre robuste de pensée, il ny a plus de politique au sens fort. Il y a de la décision, de la gestion, de la réaction, du pilotage. Mais il ny a plus despace où les fins pourraient être débattues, les normes interrogées, les tensions rendues visibles. Ce qui demeure, cest une sorte de théâtre spectral — où le pouvoir mime encore ses rituels, mais sans adossement, sans prise, sans mise en jeu. Et ce décor fantomatique maintient en vie un imaginaire périmé : celui dun pouvoir situé, identifiable, contestable. Mais cet imaginaire nopère plus. Il flotte comme une relique, un fantasme dépoque révolue. Cest tout du moins ce que nous pensons.
Ce qui se prépare alors — sans être encore nommé —, cest un changement de condition politique. Une métamorphose souterraine, silencieuse, mais décisive. Nous traversons un déplacement du sol même sur lequel reposait notre compréhension du pouvoir, du conflit, de la régulation. Et ce déplacement appelle un autre langage. Non pas un mot de plus dans une série — mais un geste de pensée qui permette de reconfigurer les coordonnées même à partir desquelles nous pourrions analyser ce qui fait tenir les mondes. Ce changement de condition politique nest pas une abstraction. Il sest incarné historiquement, idéologiquement, structurellement. Et lun de ses vecteurs majeurs — rarement interrogé comme tel — fut le tournant néolibéral du XXᵉ siècle.
Avec son avènement, ce qui mute, c'est la fabrique même de la régulation. Ce qui sest déplacé, ce sont les modalités par lesquelles un ordre devient opérant, ajusté, imposable — sans jamais se dire tel. Le néolibéralisme, en ce sens, décompose les conditions mêmes de la conflictualité démocratique. Il na pas réduit les règles : il a effacé les lieux de confrontation où lon pouvait encore les contester. Il a opéré une reconfiguration des coordonnées fondamentales du politique : *qui agit ? selon quelles justifications ? selon quels formats ? Et où peut-on encore linterroger ?*
Nous voici donc au bord dun tournant : bien plus quun langage politique qui sépuise, ce sont les gestes mêmes qui permettaient de nommer, de rendre visible, de mettre à lépreuve les régulations. Il nous faut donc changer de focale. Non plus partir des régimes connus, des formes visibles du pouvoir, des catégories héritées. Mais remonter au plus près des gestes primitifs qui configurent toute forme de régulation : ce qui fonde, ce qui fait agir, et ce qui articule les deux dans des formes tangibles, contestables, visibles et viables qui pourraient expliquer le mouvement évolutif des sociétés.
Dans notre analyse, le moment néolibéral a précisément perturbé cette articulation. Il a introduit un brouillage entre lorigine du pouvoir et ses effets, entre ce qui autorise et ce qui contraint, entre ce qui se dit et ce qui agit. Et cest dans ce brouillage que se loge aujourdhui limpensé du politique contemporain.
Pour en sortir, il faut retrouver les gestes fondamentaux à partir desquels un monde collectif peut encore être rendu lisible et vivable. Ce geste, nous le nommons ici : *archéologie de la régulation*. Si lon veut comprendre ce qui se défait dans les régulations contemporaines — non pas de manière conjoncturelle, mais de façon structurelle —, il est impératif de remonter en amont des formes politiques connues, jusquaux forces sémantiques primitives que notre lexique transporte souvent à son insu.
Cest en reprenant le fil depuis ses origines étymologiques que nous pourrons reconstituer la force darrachement de ces termes, les faire parler à nouveau — non comme vestiges, mais comme opérateurs toujours actifs, toujours présents, sous des formes multiples et plurielles. Ce détour par la langue nest pas un exercice érudit. Cest une tentative de ré-accorder le langage à lexpérience vécu, de ressaisir les prises fondamentales du pouvoir à travers leurs gestes constituants et fondateurs.
Ainsi, les suffixes en *-archie* et en *-cratie*, que nous avons évoqués plus haut comme désignations de régimes, sont bien plus que des marqueurs grammaticaux, ils condensent des opérations fondamentales du politique. Plus précisément, ils signalent deux gestes constitutifs et irréductibles dans toute structuration collective : *celui du fondement* (*arkhè*) *et celui de lexercice* (*kratos*). Le premier désigne l*origine légitime* ; le second, la *puissance agissante*. Mais dans leur réduction lexicale, ces deux gestes ont été figés et dissociés en formes de régime, perdant de vue leur fonction dynamique et conjointe dans tout ordre social : *fonder* et *faire agir.* Cest pour restituer leur opérativité conceptuelle que nous introduisons ici les termes d*arcalité* et de *cratialité*.
Par *arcalité*, nous entendons tout ce qui fonctionne comme *principe de légitimation*, quil soit explicite ou tacite, sacré ou profane, traditionnel ou numérique, juridique ou narratif. Le terme, quitte à nous répéter, est construit à partir de la racine grecque *arkhè* (ἀρχή), qui — comme nous lavons vu précédemment — désigne dans un même mouvement le commencement, le commandement et le fondement. Ce triple sens — dorigine, de légitimation et dautorité — est au cœur des opérations symboliques à travers lesquelles les sociétés humaines tentent de rendre leur ordre acceptable, de justifier leurs hiérarchies, de naturaliser leurs choix.
Il ne sagit donc pas dune réalité substantielle, mais dun acte dinstauration, dun arc de légitimation, dun marqueur de crédit : toute *arcalité* est un *geste de production de lautorité*, quelle se fonde sur la révélation divine, sur la tradition des ancêtres, sur la puissance dun nom de famille, sur la volonté générale, sur les données empiriques, sur des décrets ou des lois, sur lefficience calculée ou sur la science algorithmique. Ce terme est polysémique dans son usage.
Dans la pensée grecque ancienne, l*arkhè* nétait pas une figure du pouvoir, mais un principe dintelligibilité du cosmos et de la cité. Pour Anaximandre, par exemple, l*arkhè* est ce qui donne forme et cohérence au monde — ce par quoi tout commence et à quoi tout revient. Chez Aristote, elle devient aussi principe logique, cause première, source de mouvement. Transposée dans lordre politique, elle désigne *ce qui autorise un pouvoir à se dire tel, ce à partir de quoi il peut être reconnu, accepté, toléré, voire vénéré*. Cest dans ce sens que *la monarchie* (le pouvoir dun seul) ou *loligarchie* (le pouvoir de quelques-uns) sont fondées sur un principe d*arkhè*, quil sagisse de droit divin, de naissance, de mérite ou de savoir. Mais une *arcalité* nest pas forcément une doctrine : elle peut être une forme implicite d*évidence sociale*, un *consentement tacite intériorisé*.
Alors pourquoi introduire le mot *arcalité*, au risque du néologisme ? Parce quà nos yeux, aucun autre terme ne permet de désigner avec suffisamment de précision, de plasticité et de portée opératoire ce qui constitue le noyau de légitimation des dispositifs de pouvoir. Le mot *autorité* est trop général. *Légitimité* est trop juridique. *Fondement* est trop théologique ou métaphysique. *Source* ou *origine* sont trop historicistes. Or, ce que nous cherchons à nommer, ce nest pas ce qui est vrai, ni même ce qui est légitime en soi, mais *ce qui fonctionne comme légitimation dans un contexte donné* — ce qui est reconnu, assumé ou subi comme *ce à partir de quoi un pouvoir peut sexercer* sans être immédiatement remis en cause.
L*arcalité* est donc un concept transversal et multiple : elle traverse les époques, les cultures, les régimes — tout en changeant de visage et de figures. Elle peut prendre la forme dun texte sacré, dun contrat social, dune Constitution, dun mythe fondateur, dune promesse technoscientifique, ou même dun jeu dindicateurs économiques. Elle peut être verticalement imposée ou horizontalement négociée. Elle peut être stabilisée dans le droit ou émerger dans la rue. Mais dans tous les cas, elle opère comme ce qui justifie le pouvoir, ce qui lui donne son aura dévidence, ce qui naturalise ses opérations en les rendant pensables et acceptables.
Mais au-delà de ces premiers assertions, l*arcalité* se présente aussi comme un outil épistémologique pour lanalyse des régimes de légitimation — elle peut servir comme *opérateur heuristique* pour lire les sociétés dans leurs *structures de croyance, de reconnaissance, de justification*. Elle permet danalyser des situations aussi différentes que la réforme dun système de retraite, le recours à une IA dans la sélection universitaire ou la fondation dun État théocratique, non pas en fonction de leur contenu normatif, mais en fonction de *ce qui est supposé justifier leur existence*, *ce qui les autorise à simposer*.
Pour commencer à en saisir la portée, il nous faut sommairement déplier l*arcalité* dans ses déclinaisons historiques et symboliques. Elle ne renvoie pas à un type de régime, mais à *ce qui autorise un pouvoir à sexercer sans être récusé* : une scène de légitimation, explicite ou tacite. Ainsi, sous lAncien Régime, lautorité du roi nétait pas justifiée par sa compétence, mais par une *sacralité divine incarnée dans le sang, la lignée, le rite* — une *arcalité théologico-politique* où l*arkhè* se vivait du trône jusquà lautel.
À Rome, l*arcalité* pouvait se loger dans le *mos maiorum*, cette mémoire des ancêtres qui navait pas besoin de sécrire pour simposer. Elle se transmettait par la répétition des gestes, la reprise des rituels, la reproduction des conduites fondatrices. Plus quun corpus de lois codifiées, cétait une continuité opérante, un fil invisible bien que contraignant, qui obligeait chacun non parce quun texte le disait, mais parce quune *tradition vivante* le réactivait dans chaque pratique. Lautorité se rejouait dans lacte même, dans la persistance dun style collectif, plus que dans une règle explicitement énoncée.
Avec la modernité politique, un autre geste sinvente : l*arcalité* devient *récit contractuel*. Hobbes, Locke ou Rousseau projettent limage dun pacte inaugural entre égaux libres, dun *contrat social* qui, bien quil nait jamais été historiquement conclu, institue lordre en lui donnant un mythe dorigine. Peu importe que ce contrat soit fictif : il agit comme sil avait existé, et cest précisément cette fiction qui fonde la légitimité moderne. L*arcalité*, désormais, ne sincarne plus seulement dans la répétition des pratiques, mais dans la *puissance narrative dun contrat raconté*.
Aujourdhui, dautres *arcalités* se font jour, parfois là où on ne les attend pas.
Ainsi, dans la *Déclaration des droits de la Pachamama* (Bolivie, 2010), la Terre elle-même est instituée comme *source normative*. La planète, envisagée comme sujet de droit, devient figure d*arkhè* : principe fondateur dun ordre politique et juridique qui se justifie par la nature, le vivant et la mémoire écologique. Ici, l*arcalité* prend la forme dune *sacralisation de la Terre-mère*, traduite en langage constitutionnel, et ouvre la possibilité dun autre type de fondement, ni théologique, ni contractuel, mais cosmologique.
Dans les technostructures contemporaines, comme les agences de notation, les protocoles de régulation algorithmique, ou les plateformes numériques, l*arcalité* devient *data* : ce sont les chiffres, les indicateurs, les modèles prédictifs qui justifient laction. Lautorité repose sur la *robustesse du calcul*, la *neutralité supposée du code*, la *précision des seuils*. Ce que Yuval Noah Harari (*Homo deus, une brève histoire du futur*, 2017) appelle le “*dataïsme”* en est une figure actualisée exemplaire, où le flux des données devient source même de vérités.
Enfin, dans certaines configurations capitalistiques contemporaines, l*arcalité* prend une forme radicalement *autoréférentielle* : elle ne sappuie plus sur une extériorité normative, ni même sur une validation juridique ou démocratique, mais sur la seule *performance passée érigée en légitimité présente*. Cest ce que lon pourrait appeler une *arcalité autogénérative*, où le succès ne demande plus de justification externe — il en révèle sa propre preuve. Une entreprise qui attire des investissements massifs, une plateforme dont la valorisation boursière croît de manière exponentielle, une *startup* qui atteint le statut de “licorne” (plus dun milliard de dollars de capitalisation), na plus besoin de se légitimer par un utilité sociale, une finalité collective ou un adossement institutionnel : *le simple fait davoir réussi* suffit à valider lensemble des choix stratégiques. Elle simpose précisément parce quelle se donne à voir comme ayant *toujours déjà* fonctionné.
Mais l*arcalité* dans ses multiples manifestations, si décisive soit-elle, ne suffit pas à faire tenir un monde. Car un ordre social, quel quil soit, ne repose jamais uniquement sur ses principes le légitimant. Il doit aussi pouvoir opérer, agir, décider, trancher, maintenir — parfois même contraindre ou punir. Il ne suffit pas quun pouvoir soit justifié ; encore faut-il quil se déploie, quil prenne forme dans des pratiques, des formats, des opérateurs. En somme, il ne suffit pas quun ordre se dise fondé ; il faut encore quil sexerce.
Il faut pour cela un autre registre, un autre plan de la régulation : celui de laction. Cest ici quintervient ce que nous nommons la *cratialité* — terme forgé comme pour les régimes en -cratie — à partir de *kratos* (κράτος), qui désigne en grec ancien la force, la puissance agissante, la capacité à faire advenir quelque chose dans le réel. Si l*arcalité est ce qui autorise*, la *cratialité est ce qui opère*. Lune pose les conditions de validité, lautre produit les effets. Lune fonde, lautre exerce.
Par *cratialité*, nous entendons *ce qui agit concrètement dans le tissu des pratiques régulatrices*, ce qui produit des effets sans forcément passer par une scène légitime, visible, ou symboliquement codifiée. Cest la face opératoire du pouvoir, son versant dynamique et actif ; autrement dit : sa *capacité deffectuation*. Tandis que l*arcalité* pose, fonde, encadre, la *cratialité* module, infléchit, dévie, ajuste, parfois de manière souterraine, parfois de manière spectaculaire.
Ce qui justifie lintroduction du néologisme *cratialité*, cest précisément labsence, dans le lexique politique courant, dun mot qui désigne la force agissante sans forme nécessairement instituée, le pouvoir qui sexerce sans forcément se nommer. Il nous fallait un terme qui capture cette modalité infra-institutionnelle, trans-opérationnelle, souvent désintriquée de toute légitimation formelle, mais dont les effets façonnent les conduites, les agencements et les structures.
La *cratialité* constitue la *puissance agissante*, la *pulsation régulatrice*, le *versant infra-symbolique*. Elle nobéit pas à un modèle de souveraineté ou de commandement, mais plutôt à une *logique dopérativité distribuée*, qui se manifeste dans les actions physiques, mais aussi dans les procédures, les normes implicites, les scripts techniques, les interfaces, les indicateurs, les routines disciplinaires, les ajustements silencieux.
Mais la *cratialité*, pour autant quelle désigne une force agissante sans principe visible, ne saurait être une entité homogène ou univoque. Elle se manifeste toujours sous des formes différenciées, selon les milieux, les dispositifs, les instruments, les régimes deffet, les temporalités daction. On aurait tort de limaginer comme un pouvoir unifié : elle est plutôt un pluriel sans totalisation, un spectre de pratiques régulatrices qui modulent lexpérience collective à partir dagencements situés, parfois massifs, parfois microscopiques.
Pour saisir ce que le concept de *cratialité* permet de penser, il faut lobserver là encore à travers des configurations historiques et contemporaines, où le pouvoir nagit plus par commandement, mais par *formatage*. La *cratialité* désigne cette *capacité dun agencement à produire des effets* — non par le droit ou lautorité, mais par la scénographie, lattendu, le code, le protocole, la procédure.
Sous lAncien Régime, par exemple, la cour de Versailles fonctionnait moins comme lieu de majesté que comme machinerie de régulation sociale. Le rituel monarchique — lever du roi, étiquette, spatialisation des corps — opérait comme une *cratialité incorporée*. Norbert Elias parlait de *processus de civilisation* ; ici, cétait dun *pouvoir par intériorisation* quil sagissait : réglage des affects, des gestes, des postures, sans violence apparente, avec une efficacité néanmoins redoutable.
Dans la Rome républicaine, la *cratialité*, ou puissance politique, sincarnait dans des procédures précises et des institutions conçues pour éviter la concentration excessive du pouvoir : contre-pouvoirs, délais, rituels et magistratures étaient organisés selon une architecture politique équilibrée. Michel Villey a analysé le droit romain comme un art réaliste où la loi ne simposait pas arbitrairement du sommet, mais se construisait dans une pratique juridico-politique orientée vers la justice et adaptée aux circonstances. Cette organisation tempérait un pouvoir centralisé par un jeu complexe déquilibres, où la règle naissait autant de la tradition et des usages que de lautorité formelle.
Avec la modernité étatique, Michel Foucault a montré que le pouvoir se *biopolitise* : santé publique, statistiques, recensement, école obligatoire… la *cratialité* devient une *fabrique de conduites*, agissant en deçà de la loi, modulant les corps et les populations. Dès lors, le pouvoir ne commande plus : il structure la norme à travers des *dispositifs agissants*.
Dans de nombreux États postcoloniaux, la *cratialité* conserve en grande partie ses *formes héritées* du passé colonial. Cadastres construits selon les normes coloniales, routines bureaucratiques reproduisant les modalités administratives imposées, et scripts institutionnels continuent de réinscrire lautorité coloniale dans le quotidien, infusant ainsi la gestion étatique dune mémoire et dune pratique dominantes. Cette régulation politique et administrative perdure, portée par l*inertie dune cratialité enracinée dans les structures héritées*.
À lère écologique, la *cratialité* passe par la *norme chiffrée* : marchés du carbone, seuils ISO, critères ESG. Le droit à polluer se négocie, se calcule, séchange. Il sagit moins de régulation morale que dun *pilotage algorithmique* des équilibres. Bien que la Terre devienne une *arcalité*, sa régulation, elle, repose sur une *cratialité technico-financière*, opaque, désarrimée de tout débat public.
Enfin, dans les régimes numériques contemporains, la *cratialité* se dissout dans les infrastructures : IA décisionnelles, *scoring* social, plateformes automatisées. Comme lécrit Shoshana Zuboff, nous sommes entrés dans lère du *capitalisme de surveillance*, où la gouvernance sexerce sans discours et sans voie de recours. Byung-Chul Han y voit un “pouvoir transparent total” où celui-ci nest plus énoncé — il agit, module, filtre et exclut.
Après ce tour dhorizon des *cratialités* à travers lespace et le temps, sil fallait justifier, en dernière instance, lintroduction d*e* ce concept, ce serait en raison dun vide analytique que les cadres existants ne parviennent plus à combler. La question nest pas tant de créer un terme de plus, que de rendre dicible une opération fondamentale du pouvoir : celle qui consiste à *agir sans autorité explicite*, à contraindre sans justification, à réguler sans discours. En ce sens, la *cratialité* ne soppose pas à l*arcalité*, elles se complètent. Elles révèlent lune à lautre leur limite. Car il est possible dagir sans légitimer, de structurer sans fonder, dopérer sans lieu de confrontation ni narration instituante.
Le concept de *cratialité* nous offre le terme pour penser ce pouvoir qui ne se proclame plus, mais qui agit partout — dans les flux, les interfaces, les chaînes logistiques, les scripts numériques, les seuils budgétaires, les routines bureaucratiques. Il désigne la capacité dun agencement à produire des effets, à modifier des comportements, à orienter des trajectoires, sans sexposer à la délibération, sans se soumettre à lexplication, sans passer par lénonciation dun principe délibéré. Cest ce que Foucault entrevoyait dans la notion de *dispositif*, ce que Deleuze pressentait dans la *modulation*, ce que Simondon entrevoyait dans la *concrétisation technique* — mais quaucune de ces notions ne rassemble sous un registre proprement politique, assumant sa fonction régulatrice dans lespace collectif.
Cest pourquoi la *cratialité* ne se confond ni avec la domination, ni avec le pouvoir institutionnel, ni même avec la technique. Elle traverse les formes, en tant qu*opérativité sans fondement*. Elle nexplique pas pourquoi un ordre existe — elle permet de comprendre comment il sexerce effectivement. Et cest là sa puissance critique : déloger le politique de ses seules figures visibles, pour révéler les régulations silencieuses, les contraintes discrètes, les mécanismes délégués, les automatisations sans autorité véritablement légitime. Elle ouvre ainsi une contre-archéologie du pouvoir, attentive à ce qui agit sans se dire, à ce qui règle sans apparaître.
Sur le plan épistémologique, la *cratialité* permet donc un déplacement décisif : elle nous extrait du dualisme éculé entre légitimité et illégitimité, démocratie et anarchie, État et société civile. Elle invite à penser un entre-deux, un “tiers-opératoire” : là où le politique sinstitue non par la Loi ou par le Chaos, mais par l*agencement de dispositifs producteurs de réalité*. Ce pouvoir-là ne commande pas : il invente et configure. Il ne tranche pas : il jauge et module. Il ne sexpose pas : il infiltre et simpose. Et cest pourquoi il faut un mot pour le désigner — non pas pour lisoler, mais pour en cartographier les régimes, les formats, les seuils dacceptabilité.
Sur le plan critique, la *cratialité* permet aussi de distinguer leffet de lauteur : ce nest pas parce que personne ne commande que rien ne simpose. Ce nest pas parce quune norme na pas été votée quelle nopère pas, et à lopposé, ce nest pas parce quune norme est appliquée quelle opère nécessairement. Cest toute la différence entre lordre prescrit et lordre effectif — différence aujourdhui cruciale, tant la puissance régulatrice des systèmes dépasse celle des gouvernements.
Enfin, sur le plan opératoire, la *cratialité* fournit une grille de lecture transversale des phénomènes contemporains : du design dune application mobile à la réorganisation dun hôpital, du protocole logistique dun port à la normalisation de la parole publique, du filtrage des contenus en ligne à la gestion algorithmique de lemploi. Partout où quelque chose agit sans se dire comme pouvoir, sans se nommer comme décision, sans sassumer comme contrainte, la *cratialité* est à lœuvre.
La *cratialité* ne dit pas ce qui est juste — elle *rend visible ce qui fait effet*. Elle ne produit pas une norme — elle révèle *ce qui règle sans normativité déclarée*. Et cest à ce titre que le concept de *cratialité* est précieux : parce quil nous rend à nouveau capables de penser la régulation là où elle se dissimule, de discuter ce qui semblait inéluctable, de contester ce qui opérait sans discussion. En ce sens, elle ne ferme pas lespace politique — elle louvre de nouveau, en partant non plus des formes idéales, mais des forces effectives.
Mais si ces deux pôles — celui du fondement (*arcalité*) et celui de lopération (*cratialité*) — peuvent être pensés séparément, ils ne fonctionnent jamais isolément dans les mondes réels. Cest là toute la limite dune lecture en coupe : on peut analyser un principe, décrire une procédure, mais ce qui fait régulation, ce nest jamais lun sans lautre. La légitimation sans effectuation tourne à la mystification ; leffectuation sans légitimation vire à larbitraire. Ce nest donc pas dans leur distinction, mais dans leur agencement — dans leur articulation concrète — que se joue le cœur du pouvoir régulateur.
Et cest précisément ce point darticulation que nous voulons nommer, penser et problématiser ici.
Si l*arcalité* est *ce qui légitime*, et la *cratialité* *ce qui exerce*, alors l*archicration* est le *nœud de leur articulation effective*. Elle désigne cette opération composite, toujours située, par laquelle un pouvoir donné fonde son action et agit selon son fondement — ou, inversement, agit tout en produisant sa propre légitimation — à la condition de se laisser exposer dans une scène dépreuve. L*archicration* est ce *point de nouage où se rejoignent la question du pourquoi* (*pourquoi ce pouvoir est-il reconnu ?*) *et celle du comment* (*comment ce pouvoir opère-t-il effectivement ?*), là où cette rencontre devient publiquement opposable. Non pas deux dimensions juxtaposées, mais deux régimes co-constitutifs de toute scène régulatrice.
Ainsi, de la fusion des deux termes (*arkhè* et *krateîn*) naît l*archicration* : *lacte de fonder en agissant, ou dagir en fondant*. Factuellement, dans les régulations politiques concrètes, il ny a jamais de pouvoir qui se contente de dire sans faire, ni dagir sans justifier. Tout dispositif un tant soit peu structurant articule, à sa manière, un *arkhè* *qui justifie* et un *krateîn qui effectue*.
La force heuristique du concept d*archicration*, cest donc de réinscrire dans un même geste ce que la modernité politique avait tendance à dissocier : dun côté, la légitimation (par le droit, le peuple, Dieu, la science…), de lautre, leffectuation (par les lois, les institutions, les techniques, les procédures…). Le pouvoir moderne sest souvent construit sur une prétention à lextériorité : laction devait découler dun principe, comme si lon pouvait dabord fonder, ensuite agir. Cette dissociation était une fiction structurante, utile pour lordre symbolique, mais inopérante pour une lecture du réel.
En vérité, les régulations contemporaines — et peut-être une grande partie des régulations passées, cela reste à être étayé — peuvent être relues comme des agencements archicratifs, plus ou moins explicites, plus ou moins stables, mais toujours composite : lÉtat-nation est une *archicration* qui articule une *arcalité constitutionnelle* (la souveraineté populaire) à des *cratialités institutionnelles* (le gouvernement, ladministration, la police, larmée, etc.). Il en va de même pour les grandes plateformes numériques qui articulent des *arcalités technoscientifiques* (la promesse de linnovation, la rationalité du code, la neutralité de lalgorithme) à des *cratialités infra-visibles* (le filtrage, linstrumentation, la captation de données, la modulation du comportement). Même un ordre religieux — ou un régime dit théocratique — néchappe pas à cette logique : il articule des *arcalités transcendantes* (le texte révélé, la Loi divine, les prophètes, le Messie) à des *cratialités rituelles et doctrinales* (linterprétation, la sanction, le commandement, la discipline).
L*archicration* ne désigne donc pas un régime parmi dautres. Elle nomme, selon toute hypothèse, le nœud vivant dune régulation politique qui accepte de se rendre visible, différée et contestable, dès lors quelle vise à perdurer. De sorte quun pouvoir qui échoue à fonder ce quil opère sexpose à larbitraire ; un pouvoir qui échoue à opérer ce quil fonde sépuise dans limpuissance. De même, le simulacre surgit quand l*arcalité* se dissocie de toute effectuation ; linstabilité sinstalle quand la *cratialité* ne sadosse à aucun principe partagé. Ce que nous appelons *archicration*, cest donc ce point de tension active et scénique où sarticulent — ou se désarticulent — le fondement et lopération, la forme et la force, la justification et lexécution.
Or, cest lorsque cette articulation devient asymétrique, disjointe, ou captée, que le politique mute en profondeur — non plus sous la forme dun changement visible de régime, mais dun glissement silencieux des coordonnées de la régulation. Et parmi les figures contemporaines de cette désarticulation archicrative, le moment néolibéral occupe une place stratégique, tant par son étendue historique que par sa profondeur de reconfiguration. Non quil ait aboli la régulation — il la redéployée. Non quil ait supprimé le politique — il la déplacé, technicisé, encodé, rendu algorithme.
À partir des années 1970, sous limpulsion dintellectuels comme Friedrich Hayek et Milton Friedman, relayés par les *Chicago Boys,* amplifiés par les politiques de Ronald Reagan et Margaret Thatcher, puis par les prescriptions des grandes organisations transnationales (FMI, Banque mondiale, OMC), le néolibéralisme sest imposé sans conquête déclarée, par glissement, par ruse, par standardisation. Il na pas remplacé les institutions du politique, il les a désactivés en douceur ; il na pas détruit lÉtat, il a recodé ses prérogatives régulatrices selon une nouvelle logique : celles de lefficience, du marché, du seuil, du calcul et dun retour sur ses fonctions régaliennes.
Dun côté, cette idéologie a déplacé l*arcalité* : le principe de fondement ne repose plus sur la souveraineté populaire, la loi, ou la délibération publique, mais sur l*efficience marchande*. Le marché libre est présenté comme naturel, universel, neutre — et se promeut comme seul critère de légitimité. Cest ce que nous appelons ici *arcalité performative* : le fondement est produit par la performance elle-même. Le succès vaut justification. La croissance devient norme. Lindicateur remplace le débat.
Dun autre côté, elle redéfinit la *cratialité* : la régulation ne passe plus par des institutions politiques visibles, mais par une gouvernance par les normes, les seuils, les indicateurs, les standards, les classements (*rankings*) et les interfaces. La décision nest plus revendiquée ; elle sélabore en algorithme opérationnel. Le pouvoir module, ajuste, et encode. Ce que Wendy Brown a appelé, dans *Undoing the Demos*, la “rationalité néolibérale” ne se résume pas à un discours ou à une doctrine — cest une *cratialité généralisée*, une *logique de fonctionnement incorporée* dans les infrastructures mêmes du quotidien, où toute alternative devient impensable.
Le mot dordre de “dérégulation” prôné par les tenants du néolibéralisme masquaient en réalité un déplacement massif de la régulation et non son annihilation. Ce qui a disparu peu à peu, ce ne sont pas les règles — elles pullulent — mais les scènes darbitrage où lon pouvait encore en contester le sens, la pertinence, les effets. Les espaces publics de reconnaissance où elles pouvaient encore être mises à lépreuve se sont effacés ou disséminés. Ainsi, chaque réforme — des retraites, de lassurance chômage, de luniversité, de lhôpital ou de la fiscalité — est dès lors présentée non comme un choix idéologique, mais comme une évidence technico-financière, une réponse dite “rationnelle” à une contrainte supposée incontournable.
Ce qui simpose alors est une reconfiguration radicale des conditions dexistence. Le pouvoir nest ni aboli ni dissimulé — il est redistribué dans des registres et des protocoles privés, encodé dans des métriques non explicites, traduit dans des novlangues tout en se distillant dans des environnements régulateurs où la fabrique du politique a été méthodiquement neutralisée. Ce que le *néolibéralisme* installe, cest donc une *pseudo-archicration sans scène*, là où la délibération démocratique est dessaisie. Il produit un agencement dans lequel la légitimation ne sédicte plus, mais sinfiltre sous forme de performance antérieure ; dans lequel la régulation ne tranche plus publiquement, mais opère en souterrain, au travers dindicateurs, de seuils, dalgorithmes, de traités supranationaux, de conventions de marché.
Arrêtons-nous un instant pour bien préciser les termes de notre propos. Par *scène*, nous entendons l*instance dépreuve où des* *forces*, des *acteurs*, des *registres* ou des *institutions* dordres différents *se confrontent sous règles explicites.* Il ne sagit donc pas uniquement du seul théâtre institutionnel ; nous parlons ici dun espace dapparition conflictuelle, où puisse se rendre audible les dissensus (Jacques Rancière, *La Mésentente*, 1995).
Dès lors, penser l*archicration*, cest chercher à rendre lisible le point de tension vive où un ordre se constitue en tenant ensemble des forces hétérogènes. Ce que nous proposons ici nest pas un modèle, mais un geste : un mode dattention aux lignes dopération du pouvoir, une manière de cartographier les régulations en acte, une tentative de réouverture despaces démocratiques. Lobjectif étant de refonder la possibilité dépreuves là où lopacité et loccultation sest installée, et pour rouvrir un espace de visibilité critique là où lefficacité sauto-justifie et prétend se suffire à elle-même.
Sous notre prisme danalyse, l*archicration* séprouve comme une réalité concrète, un espace vivant traversé de tensions permanentes, où se cherche sans cesse un fragile *équilibre entre des formes dassise, des forces productives et des vulnérabilités constitutives*. Or, cet équilibre na rien de garanti : il peut basculer, se rompre, se déformer.
Que faut-il entendre par là ? Certaines *configurations archicratives* tendent à surinvestir l*affectation* — entendu par là, les dimensions idéologique, symbolique, émotionnelle qui prétendent donner sens et légitimer un ordre — tout en négligeant l*effectuation,* soit la capacité de traduire ces principes en dispositifs opératoires stables et durables. Lexemple de la République jacobine de 1793 en fournit une illustration saisissante : exaltée par la fiction dune souveraineté populaire absolue, elle na pas su consolider ses mécanismes de régulation pour perdurer. Lénergie de lidéal a vite été dévorée par lincapacité dinstaurer des équilibres viables, précipitant le régime dans la Terreur et lépuisement institutionnel.
Dautres *archicrations*, à linverse, senferment dans l*effectuation* en oubliant tout récit justificatif. LUnion européenne en fournit un cas exemplaire : sa gouvernance repose sur une accumulation de normes techniques, de seuils budgétaires, de critères de convergence, dindicateurs chiffrés (3 % de déficit, 60 % de dette, pactes de stabilité, règles de concurrence, standards environnementaux...). Ce régime régulateur, dune efficacité incontestable dans sa capacité à contraindre les États membres, opère par une effectuation puissante, mais trop souvent déliée dun langage politique partagé. Les décisions se justifient au nom de la « rationalité économique » ou de la « soutenabilité financière », sans se traduire dans un récit de légitimité accessible aux citoyens. Cest cette asymétrie — abondance de dispositifs opératoires, rareté des justifications symboliques — qui alimente le sentiment dun déficit démocratique chronique, relevé par de nombreux observateurs et confirmé par les épisodes de rejet populaire (référendum français de 2005, Brexit, poussées eurosceptiques). Ici, l*archicration* sépuise dans lopération : elle agit, ajuste, module, mais peine à convaincre et à rassembler.
À lautre extrême, certaines *archicrations* se construisent sur une *fausse fusion* entre fondement et opération. Les régimes autoritaires modernes, comme ceux de la Russie de Vladimir Poutine ou de la Turquie de Recep Tayyip Erdogan, en offrent des incarnations saisissantes. L*arkhè* proclamé — la Nation, la Tradition, la Religion, parfois la Civilisation — est érigé en principe indiscutable, en vérité dorigine inattaquable. Mais cette légitimation abstraite fonctionne comme paravent et sert de couverture à des pratiques de régulation brutales, des répressions ciblées, des ajustements institutionnels opportunistes, des captations oligarchiques et des dispositifs de contrôle opaque. Lillusion dune concordance parfaite entre fondement et action masque en réalité une dissociation : le fondement est vidé de son contenu normatif, réduit à une invocation rituelle, tandis que leffectuation se déploie dans la violence, larbitraire ou la manipulation technique. Dans ce type d*archicration captée*, labsence de véritable contradictoire — presse muselée, opposition criminalisée, société civile réduite — empêche toute mise à lépreuve du pouvoir. Au lieu dêtre travaillé dans une tension féconde, léquilibre *arcalité/cratialité* est réduit à un simulacre qui absolutise le principe pour mieux immuniser laction.
Cest pourquoi penser la régulation politique à travers le prisme de l*archicration*, ce nest pas inventer un nouveau régime ni esquisser une utopie institutionnelle. Cest surtout déplacer le regard. Refuser de prendre les formes pour des essences, les régimes pour des totalités closes ou les normes pour des évidences. Cest ouvrir une autre cartographie du pouvoir, fondée non sur les déclarations, mais sur les agencements ; non seulement sur les formes héritées, mais aussi sur les opérations effectives. Une cartographie qui permette dinterroger chaque configuration politique en termes darticulation concrète entre ce qui justifie (l*arcalité*) et ce qui agit (la *cratialité*).
Cest là le cœur du geste archicratique : restituer aux sociétés la lisibilité critique de leurs propres agencements, là où le pouvoir cherche à effacer ses fondements, et sa régulation à se rendre inattaquable.
Mais allons plus loin. Si l*archicration* désigne, dans une régulation, le moment où larticulation mouvante de la légitimation et de lopération devient scénique, explicite et publiquement opposable, alors l*archicratie* peut être pensée comme la configuration historique dominante dans laquelle cette articulation seffectue aujourdhui sous condition de défiguration, de dissimulation et de dissémination.
Par *archicratie*, nous entendons une forme contemporaine de *gouvernementalité désancrée* — au sens où Michel Foucault a dégagé, dans ses cours au Collège de France, comme *méta-régime de rationalité politique* qui déportent lexercice du pouvoir vers des dispositifs et des techniques (Sécurité, territoire, population, 19771978 ; Naissance de la biopolitique, 19781979) — dans laquelle larène politique est défaite, le fondement rendu flottant, et lopération disséminée dans des dispositifs qui ne se laissent plus nommer, ni questionner. Il ne sagit ni dun type de régime, ni dun idéal-type ; cest une *condition régulatrice dépolitisée* — où l*arcalité* est rendue *automatisée* (par et pour la data) et où, l*archicration* étant *oblitérée*, la *cratialité* sexerce *hors de toute instance publique* (algorithme, protocole, contrat, externalisation).
Cette entrée en matière aura eu comme visée de dégager le lieu exact où se joue aujourdhui notre impuissance politique. Cette situation nest pas un déficit de principes ni un excès de pouvoir ; cest le dérèglement a-démocratique des régimes de régulation, rendu illisible faute de scènes délibératives et dinstruments partagés.
Cest en remontant aux rouages primitifs du pouvoir — l*arcalité*, *polarité des formes daffectation* ; la *cratialité*, *polarité des forces deffectuation* — que nous déplaçons la question politique des figures du gouvernement vers les prises différenciées de sa régulation.
En nommant *archicration* cette *articulation dynamique* — souvent instable — *entre ce qui affecte le pouvoir et ce qui en déploie les effets*, nous avons pu construire une première grille de lecture propre aux configurations contemporaines, où les dispositifs agissent sans toujours se légitimer, et où les fondements proclamés — droits humains, droits du travail, droits du vivant — voient décroître leur force dobligation effective, au profit dagencements opératoires qui ne se légitiment plus quà la marge.
Ce que cette notion permet de mettre au jour, ne se limite pas au fonctionnement des régulations, mais aux difficultés croissantes à les voir être interrogées, éprouvées, exposées au contradictoire. Loin de nêtre quune propriété secondaire, cette mise à distance de toute possibilité de contestation structurée constitue désormais un trait central de notre condition politique. Ce qui agit nest plus exposé quà la marge de la discussion publique et ce qui régule dorénavant sexerce de plus en plus en silence, dans lombre, à labri des regards, dans un retrait radical du débat sur ses formes, ses conditions, ses seuils, ses formats.
Mais ce geste inaugural — critique, archéologique, modélisateur — ne restera légitime et significatif que sil séprouve. Et cest justement à cette mise à lépreuve que se consacreront les chapitres à venir. Car le paradigme archicratique nest pas pur appareillage conceptuel, il est avant tout une méthode de dévoilement, une topologie des régimes régulateurs, un cadre opératoire pour penser la viabilité politique en situation.
Le chapitre I en établira le socle épistémologique rigoureux, en articulant les trois prises fondamentales du modèle — *arcalité, cratialité, archicration* — à une grammaire formelle et symbolique, pensée comme modèle falsifiable, susceptible de simulation et dinterprétation. Il posera la structure tripolaire comme condition dune intelligibilité systémique, traversable tant par lhistoire que par la technique ou la psychologie collective.
Le chapitre II délaissera toute abstraction normative pour réinscrire le politique dans la généalogie profonde des régimes de co-viabilité. Il retracera, de manière située et incarnée, les formes empiriques de régulation, depuis les dispositifs totémiques mésolithiques jusquaux technorégulations cryptographiques contemporaines. Il tentera de montrer que toute société se constitue dabord comme régime de *co-viabilité* régulée — dont certaines configurations seulement atteignent un seuil proprement archicratique — bien avant de se penser comme État, comme droit, ou comme nation.
Le chapitre III, dinspiration philosophique, viendra tester l*archicratie* comme outil de relecture des grandes pensées du pouvoir. Plutôt que de les aligner par écoles ou doctrines, il les confrontera à une grille archicratique : *quelle arcalité y opère ? Quelle cratialité sy manifeste ? Quelle scène dépreuve, dopposition, ou de captation y est rendue possible ou empêchée ?* Ce faisant, il opérera un déplacement crucial passant de la justification du pouvoir à la morphologie des régimes de régulation.
Le chapitre IV, dorientation techno-historique, incarnera ces tensions dans lhistoire matérielle même de la modernité. Il ne se contentera pas de relire les révolutions industrielles comme des ruptures productives, mais comme des reconfigurations archicratiques profondes. Chaque mutation technique — de la vapeur à lélectricité, du numérique à lautomatisme — a transformé la manière dont un pouvoir se légitime, agit, se distribue ou se dérobe. La technologie, dans sa manifestation même, devient une instance cratiale, et parfois une matrice d*archicration* détournée, empêchée ou rendu invisible. Cest donc à une lecture de la régulation des bifurcations industrielles que ce chapitre sattachera, afin den révéler les architectures implicites de pouvoir.
Enfin, le chapitre V affrontera la conflictualité maximale de notre temps : celle des tensions de co-viabilité. Il abordera, lune après lautre, les grandes scènes critiques — économique, écologique, sociale, médiatique, psychique, politique, technologique, géopolitique, cosmopolitique et culturelle — en les traitant non comme objets disciplinaires, mais comme *archicrations* problématiques. Chaque tension y sera relue comme une bifurcation possible : vers une régulation viable, une impasse pathologique ou une captation silencieuse. Ce chapitre constituera le point de bascule, le test ultime du paradigme archicratique : *permet-il de nous aider à discerner, sans dogme, ce qui tient un monde debout — ou le fait vaciller ?*
Cet essai-thèse convie à une lucidité active : observer leffectivité du pouvoir, discerner larticulation du fondement et de lopération, rouvrir des formes de conflictualité légitime. Il propose une lecture critique et située des régulations qui nous gouvernent. Une manière dobserver ce qui se joue, non dans les proclamations du pouvoir, mais dans ses agencements concrets. Une méthode pour discerner les formes différenciées par lesquelles une société sajuste, se tient, ou seffondre.
Ce livre a pour unique vocation de fonder le concept d*archicratie* — articulé par le triptyque *arcalité* / *cratialité* / *archicration* — comme hypothèse heuristique pour lire les situations politiques réelles et situées. Les mentions de détectabilité, dopérativité ou dépreuve critique qui apparaissent çà et là nengagent aucun protocole métrique dans le présent volume : elles signalent de simples repères de lecture et déventuelles pistes de recherche ultérieures. Louvrage nédicte pas de méthode dévaluation, nagrège pas dindicateurs, ne promet pas de simulation ; il propose une grammaire conceptuelle pour rendre intelligibles des configurations de pouvoir.
Penser l*archicratie*, ce nest pas restaurer une essence perdue, ni bâtir un système clos. Cest remettre la pensée politique là où elle devient la plus nécessaire : dans les frictions entre ce qui agit et ce qui justifie ; dans les écarts entre ce qui régule et ce qui est vécu ; dans les tensions entre ce qui tient ensemble et ce qui menace de rompre.
Ce que propose cette entrée en *archicratie*, cest une autre orientation du regard : vers les conditions deffectivité du pouvoir, vers les agencements où le fondement et lopération cessent dêtre dissociés, vers les formes nouvelles de conflictualité légitime et de co-viabilité existentielle.
Cest à cette cartographie critique, située, différenciée et incarnée des régulations contemporaines que nous allons maintenant nous atteler. Non pour clore le politique. Mais pour le rouvrir là où il se donne à penser, cest-à-dire dans l*archicration* — là où se nouent, toujours : ce qui fonde, ce qui agit, et ce qui fait tenir.
Le 29 mai 2005, le référendum français sur le traité constitutionnel
européen donne un résultat clair : le non l'emporte.
Pendant plusieurs semaines, la scène démocratique avait retrouvé une
intensité rare. Le texte avait circulé dans les journaux, les réunions
publiques, les partis, les syndicats, les familles, les plateaux de
télévision, les tracts, les conversations ordinaires. On y parlait
d'Europe, de souveraineté, de marché, de services publics, de droit
social, de monnaie, de concurrence, de constitution. Des lignes de
fracture traversaient les camps politiques habituels. La question était
posée. Le corps électoral répondait. Le résultat était reconnu.
Rien ne paraît plus directement politique qu'un peuple appelé à se
prononcer sur l'architecture institutionnelle dans laquelle il accepte,
ou refuse, de s'inscrire.
Pourtant, deux ans plus tard, l'essentiel des dispositions
institutionnelles revient par une autre voie : le traité de Lisbonne,
ratifié en France par le Parlement réuni en Congrès à Versailles. Le
vote n'a pas été juridiquement effacé. La démocratie ne s'est pas abolie
pour autant. Une telle lecture manquerait le point le plus troublant. La
scène avait eu lieu ; la parole collective avait été comptée ; le
résultat avait été admis. Mais cette scène n'a pas suffi à infléchir
durablement la trajectoire régulatrice dans laquelle elle prétendait
intervenir.
Ce qui s'ouvre ici dépasse la crise de confiance ou la blessure
symbolique laissée dans la mémoire démocratique française. Une fissure
plus profonde apparaît : une scène peut engager une parole collective,
produire un acte clair, recevoir une reconnaissance formelle, et manquer
pourtant de la prise nécessaire pour transformer l'ordre où cet acte
s'inscrit. Tout y était : un texte, une campagne, un vote, un résultat,
une controverse. Ce qui vacille n'est pas la présence du politique, mais
la capacité d'une scène politique à rejoindre les architectures
effectives où se stabilisent les décisions.
Ce déplacement est moins spectaculaire qu'un effondrement. Il est plus
difficile à saisir. Il ne dit pas que les institutions seraient vides,
que les votes seraient sans valeur, que la parole collective serait
devenue inutile. Il indique autre chose : le lieu où une volonté se
formule ne coïncide plus toujours avec le lieu où les trajectoires se
décident. Entre l'acte démocratique et la chaîne de ses effets
s'interpose une épaisseur de normes, de procédures, de contraintes,
d'engagements antérieurs, de cadres transnationaux, de rythmes
institutionnels. La décision existe, mais elle rencontre un ordre déjà
structuré, qui l'absorbe, la requalifie, la diffère ou la contourne.
La question politique ne sort pas intacte d'un tel écart.
Depuis lors, les noms se sont multipliés : démocratie illibérale,
technocratie, ploutocratie, post-démocratie, gouvernement algorithmique,
démocrature. Ils isolent des dérives réelles, des captures, des
fermetures, des mutations. Ils disent quelque chose du présent. Leur
profusion signale pourtant une gêne. Nous savons encore désigner des
figures du pouvoir ; nous savons moins suivre les régulations qui les
traversent, les prolongent, les dispersent ou les rendent partiellement
inopérantes. Nous nommons des régimes, des déviations, des excès. Nous
peinons davantage à comprendre comment une décision circule, où elle se
transforme, par quels instruments elle prend effet, à quel moment elle
devient presque impossible à reprendre.
Les catégories politiques classiques ne sont pas devenues fausses.
L'État existe encore ; les lois se votent, les administrations
instruisent, les tribunaux statuent, les parlements délibèrent, les
élections ont lieu. Des gouvernements tombent, se maintiennent,
négocient, arbitrent. Rien de tout cela n'a disparu. La difficulté vient
précisément de là : ce qui demeure visible ne suffit plus à rendre
lisible l'ensemble de ce qui agit.
Une part croissante de ce qui affecte les existences se joue dans des
chaînes moins directement assignables : protocoles techniques, normes
privées, standards internationaux, contraintes budgétaires, interfaces
numériques, indicateurs, plateformes administratives. Ces éléments n'ont
pas remplacé les institutions. Ils les traversent, les équipent, les
prolongent, parfois les déplacent. Le pouvoir ne s'est pas absenté. Il a
changé de régime d'apparition.
Ce changement s'annonce rarement comme rupture. Il ne prend pas toujours
la forme d'un coup de force, d'une décision spectaculaire, d'une
suspension déclarée des droits ou d'une disparition visible des
institutions. Il s'installe dans la continuité ordinaire des dispositifs
: amélioration des procédures, simplification des démarches,
rationalisation des coûts, accélération des traitements, harmonisation
des critères. Rien ne semble alors sortir du langage de la bonne
administration. Pourtant, la décision ne paraît plus toujours comme
décision. Elle prend la forme d'un seuil, d'un score, d'un barème, d'une
notification, d'un recalcul, d'une mise en conformité, d'une priorité
ajustée.
Le lieu du pouvoir se transforme. Sa possibilité d'adresse aussi.
On identifie encore des institutions, des responsables, des textes, des
discours. Mais les effets décisifs passent par des médiations où les
responsabilités se distribuent, où les critères se naturalisent, où les
décisions se fragmentent en opérations successives. La visibilité d'un
pouvoir ne le rend pas adressable. La connaissance d'une procédure ne la
rend pas contestable. La trace d'une décision ne garantit aucune
reprise. Un résultat se produit, se notifie, s'archive, s'oppose à une
personne, sans que l'espace où il devrait être discuté soit réellement
praticable.
Le référendum de 2005 donne une figure haute de ce problème : une scène
démocratique majeure existe, mais sa prise se révèle limitée. Des scènes
plus ordinaires en donnent chaque jour des formes plus discrètes. Elles
ne frappent pas l'histoire avec la même intensité. Elles n'en disent pas
moins quelque chose de l'époque, parce qu'elles touchent des vies avant
même d'être reconnues comme politiques.
Une demande de titre de séjour se trouve suspendue par une plateforme
pour anomalie de saisie. La personne concernée ne rencontre pas d'abord
une décision, mais un espace en ligne, un formulaire, un message
standard, un délai, une pièce déjà transmise, l'impossibilité de joindre
le bon service. Elle ne sait pas toujours si son dossier est refusé, en
attente, incomplet, mal orienté, perdu dans une file numérique. Ce qui
est en jeu n'a pourtant rien d'abstrait : travail, logement, famille,
circulation, statut. Une vie entière dépend d'une opération qui ne se
présente jamais comme décision politique, mais comme traitement
administratif.
Ailleurs, un versement s'interrompt après recalcul. Une orientation
scolaire se joue dans une chaîne où se mêlent dossiers, attendus,
capacités d'accueil et pondérations. Un crédit, une aide, une priorité
médicale et un accès à un service dépendent de critères dont la logique
demeure partiellement opaque pour ceux qu'elle affecte. Dans ces
situations, quelque chose décide, classe, autorise, retarde ou exclut.
Mais ce quelque chose ne comparaît pas toujours comme pouvoir. Il se
donne comme procédure, traitement, calcul, nécessité.
La banalité de ces situations fait leur force. Elles appartiennent au
quotidien des sociétés régulées : interfaces, seuils, justificatifs,
files d'attente, classements, tableaux de bord, notifications. Rien n'y
ressemble nécessairement à un ordre brutal. Aucun agent ne lève la voix.
Aucune souveraineté ne se dresse en majesté. Pourtant, une existence s'y
trouve infléchie, appauvrie, immobilisée, rendue plus dépendante, moins
audible. La contrainte n'a pas besoin de s'annoncer comme commandement
pour produire des effets politiques.
Demander qui gouverne demeure nécessaire. Mais la question arrive trop
tard lorsque les chaînes par lesquelles la décision s'est déjà faite
restent hors de portée. Il s'agit alors de suivre la manière dont une
régulation tient, agit, se justifie, se rend praticable ou impraticable
pour ceux qu'elle affecte. Une société ne se livre pas dans ses
institutions déclarées ; elle se lit aussi dans les médiations qui
organisent ses arbitrages, dans les formats qui rendent certaines vies
visibles et d'autres secondaires, dans les procédures qui transforment
des blessures en dossiers, des différends en anomalies, des conflits en
traitements.
La question devient alors plus exigeante : qu'est-ce qu'un ordre qui
tient ?
Tenir ne signifie pas durer. Une domination dure. Une injustice dure. Un
ordre se maintient en détruisant ce qui le rend habitable. Il fonctionne
longtemps tout en rendant certaines existences plus exposées, moins
audibles, plus dépendantes de procédures qu'elles ne comprennent ni
n'infléchissent. Il accumule des normes, produit des indicateurs, ouvre
des recours, affiche des garanties, et réduit pourtant la possibilité
effective de faire valoir ce qu'il abîme.
Tenir, dans le sens qui importe ici, désigne autre chose. Un monde tient
politiquement lorsqu'il rend possible la coexistence de formes de vie
dissemblables, vulnérables, inégalement exposées, traversées de
contradictions, sans que certaines soient sacrifiées aux conditions
imposées aux autres. Il tient lorsque les tensions qu'il produit ou
reçoit ne sont pas aussitôt rejetées comme désordres, retards,
résistances, coûts, défaillances individuelles. Il tient lorsque ce qui
souffre apparaît, se formule, oblige une réponse, transforme quelque
chose de l'ordre qui l'a rendu possible.
Cette possibilité fragile, nous la nommons co-viabilité.
Un monde co-viable n'est pas un monde apaisé. Il ne promet ni harmonie,
ni paix civile, ni réconciliation finale. Il possède encore des formes
pour porter ce qui le divise. Il sait encore reconnaître des tensions,
les différer, les symboliser, les disputer, les reprendre, sans les
abolir par force ni les abandonner à leur pure destruction. La
co-viabilité nomme cette tenue précaire : non l'absence de conflit, mais
la possibilité pour un conflit de ne pas devenir immédiatement ruine du
commun.
Les sociétés ne tiennent pas parce qu'elles auraient supprimé ce qui les
divise. Elles tiennent lorsqu'elles donnent forme à leurs divisions. Une
souffrance devient objection. Un dommage devient litige. Une règle se
rapporte à ses effets. Un pouvoir se trouve rappelé aux raisons qu'il
invoque. Là où ces transformations deviennent impossibles, la
conflictualité ne disparaît pas. Elle se déplace, s'épuise, se disperse
ou revient sous des formes plus dures.
La politique commence aussi là : dans la possibilité de faire apparaître
ce qui affecte, de le rendre partageable, de le mettre en tension, de le
soumettre à une reprise. Un ordre peut posséder des institutions solides
et perdre cette capacité. Il accumule normes, recours, consultations,
rapports, indicateurs, tout en rendant difficile l'épreuve effective de
ce qu'il produit. La scène demeure alors, mais quelque chose se retire
d'elle. Elle continue d'accueillir des paroles, des procédures, des
justifications ; elle ne parvient plus toujours à rejoindre les chaînes
où les effets se décident.
La scène peut subsister comme forme et se vider comme puissance.
Le référendum de 2005 en a donné une figure. La Convention citoyenne
pour le climat en offre une autre, plus récente, plus ambiguë. Après le
mouvement des Gilets jaunes, cent cinquante citoyennes et citoyens tirés
au sort sont réunis pour travailler sur la réduction des émissions de
gaz à effet de serre dans un esprit de justice sociale. Des experts
interviennent. Des auditions ont lieu. Les propositions sont discutées,
formulées, rendues publiques. Pendant un moment, une scène prend forme :
des citoyens non professionnels de la politique se saisissent d'enjeux
que l'on croyait réservés aux administrations, aux experts, aux
négociateurs, aux arbitrages gouvernementaux.
Ce moment n'a rien d'anecdotique. Il ouvre, même brièvement, une
possibilité rare : des existences ordinaires entrent dans un problème
systémique, apprennent ses contraintes, en éprouvent les tensions,
formulent des propositions qui engagent l'organisation matérielle du
commun. La scène n'était pas fictive. Elle n'était pas un décor. Des
choses s'y sont dites, apprises, déplacées. Pourtant, sa traduction
politique est restée partielle, sélective, affaiblie. La promesse d'une
reprise « sans filtre » s'est défaite dans les arbitrages, les
commissions, les reformulations, les retraits, les délais.
Là encore, la parole ne manque pas. Elle a même pris une forme
travaillée, instruite, collective. Le problème tient à l'écart entre une
comparution réelle et une capacité de transformation limitée. La scène
existe ; elle produit du jugement, de l'attention, de la formulation.
Mais elle ne dispose pas de la prise nécessaire pour modifier l'ordre
qu'elle rend visible.
Les deux cas ne disent pas exactement la même chose. En 2005, une scène
de souveraineté populaire produit un résultat dont la trajectoire
institutionnelle ultérieure limite la portée. Avec la Convention
citoyenne, une scène délibérative formule des propositions dont la
reprise politique demeure fragile. Dans les deux cas, la démocratie
n'est pas absente. La parole apparaît, la scène prend forme, l'acte
existe. Pourtant, ces scènes peinent à rejoindre les circuits où les
décisions prennent durablement forme.
L'épisode belge de 2010-2011 éclaire un autre versant du problème.
Pendant de longs mois, l'État fédéral demeure sans gouvernement de plein
exercice. Le pays ne s'effondre pas. Les administrations continuent
d'agir. Les services publics fonctionnent. Les cadres normatifs
persistent. L'événement ne rend pas le gouvernement superflu. Il montre
qu'un ordre tient au-delà de la figure visible du commandement, par
inerties, routines, structures administratives, compromis latents,
agencements distribués. Là où l'on attendait la décision souveraine, on
découvre l'épaisseur des continuités régulatrices.
Ainsi se dessine une difficulté plus vaste. Des scènes démocratiques
existent sans infléchir suffisamment les trajectoires régulatrices ; des
régulations fonctionnent sans scène politique pleinement lisible. Entre
les deux, le politique ne disparaît pas. Il se dissocie. Ce qui fonde,
ce qui opère et ce qui devrait être mis à l'épreuve ne coïncident plus.
Les principes demeurent, les opérations continuent, les procédures
subsistent, mais leur articulation devient incertaine.
Cette dissociation traverse les institutions et les vies. Elle apparaît
dans l'école, l'hôpital, le travail, l'accès aux droits, la fiscalité,
l'administration numérique, les plateformes, les politiques
environnementales. Un dispositif affiche une finalité d'équité tout en
produisant des effets de tri difficilement contestables. Une réforme se
réclame de la justice tout en opérant par seuils budgétaires. Une
plateforme promet la simplicité tout en rendant plus difficile
l'explication d'un cas singulier. Un indicateur prétend éclairer une
décision, puis finit par se substituer au jugement qu'il devait servir.
La violence propre de ces situations tient à leur apparence de
normalité. Les droits ne sont pas toujours suspendus ; ils se
conditionnent. Les recours demeurent, mais deviennent longs, étroits,
techniques, décourageants. La parole circule, mais dans des formats qui
l'épuisent. La scène ne se ferme pas brutalement ; elle se déplace, se
sature, perd sa puissance. Le pouvoir n'a pas besoin de se dresser
devant les sujets pour les orienter. Il les entoure de formes.
Les oppositions ordinaires deviennent alors insuffisantes : État ou
marché, public ou privé, pouvoir fort ou pouvoir faible, décision
politique ou exécution technique. Une régulation publique par ses effets
peut devenir privée par ses instruments. Une finalité étatique peut
s'accomplir par opération algorithmique. Une décision démocratiquement
annoncée s'affaiblit dans son traitement administratif. Une mesure
contestable en droit demeure presque inaccessible en pratique.
Ce que nous cherchons à penser se tient là : dans l'écart entre
l'existence formelle d'une scène et sa capacité réelle de reprise ;
entre la visibilité d'une procédure et son opposabilité ; entre la
déclaration d'un principe et la chaîne qui le transforme en effet. Une
démocratie conserve ses rites et perd une part de sa capacité à faire
comparaître les régulations qui la traversent. Une administration
multiplie les procédures et réduit la possibilité de discuter ce
qu'elles produisent. Une société produit beaucoup d'information et peu
de prise.
La visibilité montre ; la comparution oblige à répondre. Un résultat
visible se publie, se mesure, se trace, se classe. Un résultat qui
comparaît doit répondre de ses raisons, de ses critères, de ses
responsabilités, de ses effets. Une société publie tout, mesure tout,
classe tout, trace tout, et laisse encore ceux qu'elle affecte devant
des résultats qu'ils ne parviennent pas à discuter. L'opacité
contemporaine ne tient donc pas d'abord à l'absence de données. Elle
tient à l'impossibilité pratique de rapporter ces données à une décision
contestable.
La scène occupe ici une place centrale. Elle n'est pas un décor public,
une cérémonie, un lieu de parole ou un espace d'expression. Elle est la
forme dans laquelle une régulation devient adressable. Une scène existe
lorsque ce qui fonde une régulation et ce qui l'opère peuvent être
rapportés l'un à l'autre, exposés aux objections, confrontés à leurs
effets, révisés dans un délai praticable. Sans cela, il y a
communication, consultation, débat médiatique, participation, même
controverse, sans véritable prise.
Or cette prise se fragilise. La parole circule, mais elle ne transforme
pas toujours. Les diagnostics abondent, mais les leviers restent
ailleurs. Les colères s'expriment, mais elles peinent à rejoindre les
architectures qui produisent leurs objets. Les institutions répondent,
mais à côté du lieu où le dommage se forme. Les scènes se multiplient en
surface, tandis que les chaînes d'effectuation se déplacent hors
d'elles.
Ce déplacement n'est pas né d'un événement unique. Il s'inscrit dans une
histoire longue : transformation de l'État, mondialisation des chaînes
économiques, montée des normes privées, financiarisation, construction
européenne, numérisation administrative, extension des plateformes,
gouvernement par indicateurs. Pris isolément, aucun de ces processus ne
suffit. Ensemble, ils modifient la manière dont un ordre devient
opérant.
Le néolibéralisme n'épuise pas cette histoire, mais il en intensifie une
ligne majeure. Il a moins supprimé la régulation qu'il ne l'a déplacée
vers des instruments plus diffus : normes de performance, indicateurs,
évaluations comparatives, contraintes budgétaires, pilotage par
objectifs. Sous le nom de dérégulation, il a souvent produit une autre
régulation, moins immédiatement politique, plus procédurale, plus
difficile à contester dans ses fondements mêmes.
Ce déplacement affecte la manière dont les décisions se justifient. Le
marché tend à se présenter comme instance de vérité. La performance tend
à valoir preuve. L'indicateur tend à valoir jugement. Ce qui réussit
semble se justifier par le fait même de réussir. Le calcul ne se
contente plus d'éclairer le politique ; il prétend le dispenser de
comparaître.
Dans le même temps, les opérations se multiplient. Des seuils
budgétaires orientent des politiques locales. Des standards
transnationaux redéfinissent des marges nationales. Des plateformes
organisent l'accès à des droits, des services, des emplois, des publics.
Des algorithmes filtrent des demandes. Des classements modifient les
conduites des institutions. Le pouvoir n'a pas besoin de prendre la
forme d'un ordre souverain. Il agit par environnement, incitation,
format, contrainte douce ou sèche, distribution des possibles.
Les instruments ne sont pas en cause par nature. Toute société suppose
des médiations. Une procédure protège, un indicateur éclaire, une
interface simplifie, un standard rend comparable. La difficulté commence
lorsque ces médiations se détachent des raisons qui devraient les rendre
discutables, ou lorsque leurs effets ne reviennent plus vers des scènes
capables de les reprendre.
Une procédure devient politiquement fragile lorsqu'elle ne laisse plus
apparaître ce qu'elle décide. Un indicateur devient dangereux lorsqu'il
remplace le jugement qu'il devait informer. Une interface devient
violente lorsqu'elle ferme les possibilités de reformulation du cas
qu'elle prétend traiter. Un score devient pouvoir lorsqu'il classe sans
ouvrir la scène où sa pertinence pourrait être discutée. La technique
n'est pas l'ennemie du politique. Elle le devient lorsque son opération
se substitue à l'épreuve.
Cette violence n'est pas toujours spectaculaire. Elle est lente,
administrative, silencieuse. Elle tient à l'impossibilité de faire
valoir une situation autrement que dans les cases prévues. Elle tient à
la réduction d'une trajectoire à un statut, d'une vulnérabilité à une
donnée, d'une objection à une anomalie, d'un droit à une mise à jour. Là
où une vie demanderait à être entendue, le dispositif demande à être
complété. Là où un conflit devrait être instruit, il devient incident de
traitement.
Dès lors, la question n'est plus la stabilité d'un système, mais la
forme de reprise qu'il offre à ce qu'il affecte. Un monde devient
invivable lorsque les tensions qui le traversent n'apparaissent plus que
comme désordres, retards, résistances, coûts, défaillances individuelles
ou problèmes de gestion. Une société continue alors de fonctionner, tout
en devenant moins capable de recevoir ce que son fonctionnement abîme.
Cette exigence dépasse la stabilité des systèmes. Elle demande que les
tensions ne soient pas absorbées par des procédures, mais rendues
visibles, adressables et discutables, afin que leurs effets transforment
l'ordre qui les produit. Elle ne suppose pas que tout conflit trouve une
solution. Elle suppose que le conflit ne soit pas privé d'emblée des
formes par lesquelles il oblige le commun à se requalifier.
Cette exigence engage d'abord le temps. Un délai est nécessaire pour
comprendre, formuler, contester, répondre, réviser. Or beaucoup de
régulations contemporaines réduisent ce délai. Les décisions sont
automatisées, les évaluations continues, les corrections anticipées, les
comportements préemptés. Les systèmes absorbent les écarts avant qu'ils
ne deviennent questions. La vitesse devient une forme de fermeture. Ce
qui va trop vite pour être adressé finit par s'imposer comme évidence.
Elle engage aussi des formes de traduction. Les effets d'une régulation
ne sont jamais immédiatement lisibles. Ils doivent être rapportés à des
expériences, des preuves, des récits, des données, des objections, des
institutions capables de les instruire. Sans cette traduction, les
souffrances restent privées, les inégalités restent statistiques, les
conflits restent dispersés. Une scène ne se contente pas d'exposer. Elle
transforme ce qui arrive en matière partageable et opposable.
Elle engage enfin une prise sur les échelles. Beaucoup de régulations
contemporaines produisent leurs effets loin des lieux où elles se
décident. Une norme financière affecte une politique locale. Une chaîne
logistique transforme un territoire éloigné. Un standard européen ou
international redéfinit des marges nationales. Une plateforme globale
ajuste des conduites singulières. Les lieux d'affectation et les lieux
d'arbitrage se dissocient. Le conflit existe, mais il peine à trouver
l'échelle où il pourrait être travaillé.
Cette dissociation explique une part de l'impuissance démocratique
contemporaine. Les citoyens votent encore, débattent, manifestent,
saisissent des institutions, interpellent des représentants. Mais une
part des contraintes qui structurent les choix disponibles se situe
ailleurs : marchés, traités, agences, plateformes, standards,
architectures techniques, indicateurs, engagements antérieurs. L'espace
de la décision visible ne contient plus l'ensemble des conditions de la
décision réelle.
Aucune nostalgie ne doit s'en déduire. Aucun âge antérieur n'a offert
des scènes pures, transparentes, pleinement démocratiques. Les formes
historiques du politique ont toujours été traversées d'exclusions, de
violences, de hiérarchies, de captations. Mais elles donnaient aux
conflits des lieux plus identifiables : adversaires, procédures,
rituels, temporalités, figures d'adresse. Notre difficulté tient à ce
que la conflictualité demeure, parfois s'intensifie, tandis que ses
prises deviennent plus fragmentées, plus intermittentes, plus difficiles
à instituer.
Deux réflexes se présentent alors. Le premier cherche à restaurer les
anciennes figures de l'autorité : souveraineté, État, loi, frontière,
verticalité, commandement. Il espère retrouver dans la forme forte du
pouvoir le moyen de contenir la dispersion contemporaine. Le second
abandonne la question politique à la complexité des systèmes : flux,
réseaux, marchés, données, plateformes, calculs. Il conclut que nul
centre ne peut plus être retrouvé, et que toute contestation se dissout
dans l'entrelacement des opérations. Ces deux réflexes manquent le même
point. Ni le retour pur à la verticalité, ni l'acceptation de la
dispersion ne permettront de penser la tenue d'un monde commun.
La focale doit changer. Plutôt que chercher le détenteur ultime du
pouvoir ou se résigner à l'absence de centre, il s'agit de suivre les
régulations dans leurs articulations : ce qui les rend recevables, ce
par quoi elles agissent, ce qui permet de les éprouver. C'est à cette
condition que l'on comprend pourquoi certaines décisions deviennent
politiquement habitables, tandis que d'autres fonctionnent sans jamais
être vraiment tenues.
Les mots en -archie et en -cratie donnent un premier indice de ce
déplacement. Monarchie, oligarchie, technocratie, bureaucratie,
démocratie : ces termes continuent de nommer des régimes, des formes,
des principes ou des modalités d'exercice. Mais ils disent encore trop
peu la manière concrète dont une régulation articule ce qui la fonde, ce
qui l'opère et ce qui permet de l'éprouver.
L'arkhè renvoie au commencement, au commandement, au principe, à ce à
partir de quoi un ordre se donne comme recevable. Le kratos renvoie à la
force, à la puissance agissante, à la capacité d'effectuation. Mais un
monde politique ne tient ni par le fondement seul, ni par l'opération
seule. Un principe sans effectuation devient incantation. Une opération
sans fondement exposable devient puissance difficilement adressable.
L'un comme l'autre perdent leur qualité politique lorsqu'ils échappent à
l'épreuve.
Ce qui manque alors n'est pas un nouveau nom de régime. C'est une
grammaire de l'articulation. Il s'agit de distinguer ce qui donne à une
régulation son horizon de recevabilité, ce qui la rend opératoire, ce
qui l'expose à ses effets et la rend reprenable. Sans cette distinction,
des ordres très différents se confondent : une règle juste mais
inapplicable, une procédure efficace mais sans fondement exposable, une
consultation visible mais sans capacité de transformation, une décision
légitime dans son principe mais mutilée dans ses chaînes d'effectuation.
Trois prises doivent alors être distinguées : ce qui fonde une
régulation, ce qui l'opère, ce qui permet d'exposer leur rapport à
l'épreuve. Nous nommerons arcalité la première, cratialité la seconde,
archicration la forme où fondement et opération deviennent ensemble
discutables, contestables, révisables. Ces mots ne valent pas par leur
nouveauté. Ils valent par le discernement qu'ils rendent possible :
distinguer ce qui, autrement, reste confondu.
Un malentendu doit être écarté d'emblée. L'archicratie ne désigne pas un
régime politique supplémentaire. Elle ne nomme ni une utopie
institutionnelle, ni une nouvelle forme idéale de gouvernement, ni une
solution générale aux conflits contemporains. Elle désigne une condition
de tenue : le seuil à partir duquel une régulation peut encore être
rapportée à ce qui la fonde, suivie dans ce qu'elle opère, reprise à
partir de ce qu'elle affecte.
À l'inverse, la désarchicration désignera le processus par lequel cette
articulation se défait. Les fondements deviennent incantatoires. Les
opérations s'autonomisent. Les scènes d'épreuve se contractent, se
simulent ou se déplacent hors de portée. La régulation continue parfois
avec efficacité, mais sa tenue politique se fragilise. Elle fonctionne
encore, tout en devenant plus difficile à comprendre, à adresser, à
contester, à transformer.
Cette grammaire ne prétend pas absorber tout le politique. Elle ne
remplace ni l'analyse de l'État, ni celle du droit, ni celle des classes
sociales, ni celle des institutions, ni celle des techniques. Elle vaut
là où elle produit un gain de discernement. Là où les catégories
classiques suffisent, elle doit se retirer. Là où elle ne fait que
renommer ce qui était déjà clair, elle devient inutile. Mais là où la
légitimité déclarée, l'opération réelle et l'épreuve disponible se
dissocient, elle permet de poser de meilleures questions.
Ces questions engagent le cœur de l'enquête : qu'est-ce qui fonde ici la
régulation ? Par quels instruments agit-elle ? Où ses effets peuvent-ils
être exposés, contestés, repris ? La procédure ouvre-t-elle une révision
réelle ou une réponse formelle ? La visibilité donne-t-elle prise, ou
remplace-t-elle la comparution ?
Ces questions ne résolvent pas les conflits. Elles les localisent. Elles
empêchent de confondre la déclaration d'un principe avec son
effectuation, l'efficacité d'un dispositif avec sa légitimité,
l'existence d'une procédure avec une scène réelle d'épreuve. Elles
déplacent la critique depuis la dénonciation du pouvoir vers l'analyse
des conditions dans lesquelles une régulation devient, ou non,
reprenable par ceux qu'elle affecte.
L'enquête part donc d'une inquiétude, mais elle ne s'y enferme pas. Si
les scènes se fragilisent, elles peuvent aussi être repérées, défendues,
réinstituées. Si les opérations se soustraient à l'épreuve, elles
peuvent être ramenées vers des formes plus exigeantes de visibilité et
d'opposabilité. Si les mots hérités ne suffisent plus toujours, ils
peuvent être repris, déplacés, travaillés. La pensée politique ne
commence pas lorsque le monde devient simple. Elle commence lorsque le
monde devient difficile à tenir.
Cette grammaire devra être fondée, éprouvée dans la longue durée,
confrontée aux grandes pensées du pouvoir, puis engagée dans la lecture
des révolutions industrielles et des tensions contemporaines. Il ne
s'agira pas d'appliquer un schéma à des objets déjà donnés, mais de
suivre, à chaque fois, la manière dont une société différencie ce qui
fonde, ce qui opère et ce qui reste reprenable. L'enquête traversera
donc des formes anciennes et modernes, des institutions visibles et des
médiations discrètes, des scènes politiques déclarées et des chaînes
d'effectuation moins immédiatement lisibles.
Quelque chose, dans nos mondes contemporains, continue d'ordonner les
conduites, de hiérarchiser les vies, de distribuer les ressources, de
classer les existences, de prioriser les droits, d'ajuster les
temporalités, sans toujours apparaître dans les formes où le politique
savait se nommer. Ce quelque chose n'est pas extérieur aux institutions.
Il les traverse, les prolonge, les déplace, parfois les contourne. Il ne
remplace pas le pouvoir ; il en transforme les modes d'existence.
Suivre les régulations autrement devient alors la tâche de l'enquête :
dans les lois qui les proclament, mais aussi dans les instruments qui
les appliquent ; dans les discours qui les justifient, mais aussi dans
les formats qui les rendent effectives ; dans les institutions qui les
encadrent, mais aussi dans les scènes qui permettent ou empêchent leur
reprise. La question n'est pas de savoir si le pouvoir existe encore.
Elle est de savoir sous quelles conditions ce qui règle un monde peut
encore être rendu intelligible, adressable et révisable.
L'enquête commence là : au point exact où les formes du pouvoir
demeurent visibles, mais où les prises capables de les éprouver se
retirent.

View File

@@ -6,14 +6,12 @@ level: 1
version: "0.1.0"
concepts: []
links: []
order: 100
order: 195
summary: ""
source:
kind: docx
path: "sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Annexe_Glossaire_Archicratique_Cas_IA.docx"
---
# Annexe Glossaire archicratique pour laudit des systèmes dIA
Cette annexe propose un bref glossaire des notions archicratiques mobilisées dans laudit de Système F. Elle na pas vocation à réexposer la théorie dans toute son ampleur, mais à fournir au lecteur du cas pratique quelques repères opératoires pour suivre le fil des analyses.
## Arcalité

View File

@@ -6,14 +6,12 @@ level: 1
version: "0.1.0"
concepts: []
links: []
order: 20
order: 120
summary: ""
source:
kind: docx
path: "sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_1_Epreuve_de_detectabilite.docx"
---
# I. Épreuve de détectabilité : *arcalité / cratialité / archicration* dans un système dIA
Lépreuve de détectabilité ne consiste pas à ajouter une couche de vocabulaire au-dessus dun dispositif déjà saturé de termes techniques. Elle exige, au contraire, un geste presque naïf : *où voit-on quelque chose ? Où peut-on désigner, avec un minimum de précision, ce qui fonde, ce qui opère et ce qui met en épreuve ?* Tant que ces trois prises restent indiscernables ou introuvables, l*archicratie* nest pas simplement déficitaire ; elle est empêchée. Appliquée à un grand système dIA de fondation, lépreuve de détectabilité commande une micro-cartographie patiente des lieux, des moments et des interfaces où Système F se rend effectivement présent ou, plus souvent, se déploie sans se déclarer.
## I.1. Scénarisation structurée du système IA

View File

@@ -6,14 +6,12 @@ level: 1
version: "0.1.0"
concepts: []
links: []
order: 30
order: 130
summary: ""
source:
kind: docx
path: "sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_2_Epreuve_Topologique.docx"
---
# II. Épreuve topologique : hypotopies, hypertopies, atopies des scènes IA
Lépreuve de détectabilité nous a permis de reconstituer, pour Système F, la distribution des trois prises archicratiques : *arcalités déclarées et implicites, cratialités en chaîne, archicrations rares et fragmentaires*. Lépreuve topologique déplace maintenant la focale : il ne sagit plus seulement de savoir où se trouvent *arcalité, cratialité* et *archicration*, mais dans quels types de scènes elles se laissent ou non approcher. Elle interroge la configuration concrète des lieux où la régulation algorithmique apparaît, se dit, se discute, se justifie, se conteste. Autrement dit : non seulement *quoi* et *comment*, mais *où* et *avec qui*.
Dans la thèse, la topologie archicratique désigne cette manière de lire un ordre régulateur à partir de la forme de ses scènes : *synchrotopies*, quand l*archicration tient ensemble, de façon relativement stable, des prises arcalitaires et cratiales en présence de publics divers* ; *hypotopies*, quand la *scène existe, mais sous une forme tellement appauvrie quelle noffre presque aucune prise réelle* ; *hypertopies*, lorsque la *scène est concentrée dans quelques lieux fermés où se décident lessentiel des orientations, loin des personnes affectées* ; *atopies*, enfin, lorsque des *dispositifs jouent théâtralement la scène* (consultations, boîtes à idées, *feedbacks* symboliques), *sans connexion effective avec les lieux de décision*. La topologie nest donc pas un simple “plan” des espaces physiques ou numériques : cest une cartographie des situations scéniques où le pouvoir régulateur accepte ou refuse de se rendre visible.

View File

@@ -6,14 +6,12 @@ level: 1
version: "0.1.0"
concepts: []
links: []
order: 40
order: 140
summary: ""
source:
kind: docx
path: "sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_3_Epreuve_archeogenetique.docx"
---
# III. Épreuve archéogénétique : dans quels méta-régimes sinscrit lIA ?
La première et la deuxième épreuve ont traité Système F comme un *dispositif présent* : un système dIA déjà à lœuvre, que lon peut décrire dans sa structure (*arcalité* / *cratialité* / *archicration*) et dans la forme de ses scènes (*hypotopies*, *hypertopies*, *atopies*). Lépreuve archéogénétique change de focale : il ne sagit plus de dire *comment* Système F fonctionne aujourdhui, mais *de quelle histoire régulatrice il procède*, à quels méta-régimes il emprunte ses formes, ses réflexes, ses manières de distribuer les prises.
Dans notre thèse, larchéogénèse désigne ce geste qui consiste à lire un *dispositif* comme une *sédimentation de régimes de co-viabilité* : on ny cherche pas une origine unique, ni un “moment zéro” mythique, mais la composition singulière de matrices plus anciennes techno-logistique, scripturo-bureaucratique, marchande, guerrière, sacrale, etc. qui continuent dagir sous des habits techniques nouveaux. Appliquée à Système F, lépreuve archéogénétique doit donc répondre à une question simple, mais exigeante :

View File

@@ -6,14 +6,12 @@ level: 1
version: "0.1.0"
concepts: []
links: []
order: 50
order: 150
summary: ""
source:
kind: docx
path: "sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_4_Epreuve_Morphologique.docx"
---
# IV. Épreuve morphologique : philosophies du pouvoir relues par le cas IA
Lintroduction et les trois premières parties de ce cas pratique ont poursuivi un fil très simple, mais exigeant : prendre Système F au sérieux comme dispositif régulateur et le soumettre, successivement, aux grandes épreuves de la thèse sur l*archicratie* *détectabilité, topologie scénique, archéogénèse des méta-régimes*. Nous savons désormais *où il agit* (guichets, interfaces, comités, tribunaux, plateformes), *comment il agit* (scores, pipelines, fonctions de coût, procédures dintégration), *de quoi il hérite* (*mégamachine techno-logistique*, *archicratie scripturo-normative*, *archicratie marchande*) *et vers quel type de configuration il tend* (une forme possible d*autarchicratie numérique*, où la régulation se prend elle-même pour principe et scène).
Il manque encore une épreuve, celle que le chapitre 3 de lessai-thèse appelait *épreuve morphologique* : *confronter le paradigme archicratique à quelques grandes philosophies du pouvoir qui ont structuré, depuis un demi-siècle, notre manière de penser les dispositifs et les institutions*. Non pour faire une exégèse supplémentaire de Foucault, Habermas, Rancière, Boltanski & Thévenot, mais pour mettre à lépreuve, devant eux, la forme même de ce que nous prétendons voir avec l*archicratie*.

View File

@@ -6,14 +6,12 @@ level: 1
version: "0.1.0"
concepts: []
links: []
order: 60
order: 160
summary: ""
source:
kind: docx
path: "sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_5_Epreuve_Historique.docx"
---
# V. Épreuve historique : IA, quatrième et cinquième révolutions régulatrices
Les quatre premières parties de notre cas pratique ont traité Système F comme un dispositif déjà là, déjà actif : un système de décision distribué dans des guichets, des interfaces, des comités, des tribunaux ; une chaîne cratiale qui manipule scores, seuils, proxies ; un opérateur qui recompose des scènes dépreuve sans jamais se donner vraiment comme tel. Lépreuve historique introduit un autre type de question : non plus seulement “*où et comment Système F régule-t-il aujourdhui ?*”, mais “*dans quelle séquence régulatrice sinscrit-il ? de quelle histoire prolongée est-il lexpression, et de quelle histoire possible est-il le laboratoire ?*”. Autrement dit, il sagit de replacer ce que nous avons décrit, au fil des sections I à IV, dans la généalogie archicratique développée au chapitre 4 de lessai-thèse : celle des révolutions industrielles relues comme révolutions régulatrices.
Dans cette généalogie, chaque “*révolution industrielle*” nest pas seulement une mutation de machines ou de sources dénergie ; elle est la reconfiguration dun régime de *co-viabilité*, dun agencement spécifique entre *arcalité, cratialité* et *archicration*. La première révolution installe une *puissance thermo-mécanique* et un *capitalisme manufacturier* qui déplacent la scène de la régulation du village vers l*usine* ; la deuxième organise les *grandes infrastructures*, les *empires* et les *États-nations* autour de *réseaux matériels et scripturaux* ; la troisième, *technoscientifique* et *mass-médiatique*, *sature le monde en normes, en statistiques, en dispositifs dexpertise qui travaillent à distance les populations*. La quatrième révolution, telle que nous lavons formulée dans la thèse, ne se réduit pas à la “*numérisation*” au sens trivial ; elle se caractérise par une *clôture douce de la régulation* : pilotage par la donnée, indicateurs qui se présentent comme incontestables, scripts organisationnels qui encadrent les comportements sans que la scène du débat ne soit explicitement supprimée elle est absorbée dans les interfaces, dans les formulaires, dans les tableaux de bord. Cest cette dynamique que nous retrouvons dans Système F : *datafication massive* *des existences*, *gouvernement par variables* et *fonctions de coût*, *absorption de la conflictualité potentielle dans des séquences doptimisation*.

View File

@@ -6,14 +6,12 @@ level: 1
version: "0.1.0"
concepts: []
links: []
order: 70
order: 170
summary: ""
source:
kind: docx
path: "sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_6_Epreuve_de_Co-viabilite.docx"
---
# VI. Épreuve de co-viabilité : autarchicratie, désarchicration et politique des épreuves viables pour lIA
Avec la cinquième épreuve, celle de la *co-viabilité*, notre cas pratique arrive à un point où la description ne suffit plus. Les parties I à V ont rendu Système F lisible comme dispositif régulateur : nous avons repéré ses prises d*arcalité explicite* et *implicite*, reconstruit sa *cratialité*, mis en évidence la *pauvreté de ses scènes* ; nous lavons *cartographié topologiquement, inscrit dans la série des méta-régimes, confronté aux grandes morphologies du pouvoir, replacé dans la séquence des révolutions régulatrices*. Ce travail a fait apparaître, sous des angles différents, un même motif : une puissance de régulation considérable, distribuée dans des chaînes algorithmico-organisationnelles, et une raréfaction symétrique des lieux où cette puissance peut être mise en épreuve. Lépreuve de *co-viabilité* demande autre chose : non plus seulement voir et comparer, mais interroger les conditions sous lesquelles un dispositif comme Système F peut être toléré, ajusté, contesté dans un monde où les existences humaines, les milieux écologiques et les ordres symboliques sont déjà sous tension.
Dans notre essai-thèse lié à ce cas pratique, la *co-viabilité* désigne précisément *ce seuil où un régime régulateur ne se juge plus seulement à laune de son efficacité fonctionnelle, mais à la façon dont il maintient, ou détruit, les possibilités de vie des collectifs quil traverse*. *Co-viabilité sociale* : *accès matériel aux ressources*, mais aussi *dignité, reconnaissance, capacité à se tenir comme sujet adressé*. *Co-viabilité écologique* : *conditions physiques de subsistance, intégrité des milieux, soutenabilité des infrastructures*. *Co-viabilité symbolique* : *intelligibilité des expériences, possibilité de nommer les injustices, de se raconter autrement que comme “cas” dun modèle*. Appliquée à Système F, l*épreuve de co-viabilité* revient à poser une question simple en apparence, mais redoutable : dans les formes concrètes quil prend aujourdhui *tri des dossiers, scoring pénal, gestion des risques en santé, filtrage des contenus, sélection des candidatures* *contribue-t-il à élargir ou à rétrécir les possibilités de vie commune ?* *Est-il compatible avec une archicratie minimale, ou tend-il à consolider un régime dautarchicratie numérique où tout fonctionne, mais presque rien ne sexpose ?*

View File

@@ -6,14 +6,12 @@ level: 1
version: "0.1.0"
concepts: []
links: []
order: 80
order: 180
summary: ""
source:
kind: docx
path: "sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Chapitre_7_Gestes_archicratiques_concrets_pour_un_systeme_IA.docx"
---
# VII. Gestes archicratiques concrets pour un système dIA
Jusquici, notre cas pratique a surtout pris la forme dun diagnostic : mettre Système F en scène, le suivre dans ses topologies de scènes pauvres ou hypertrophiées, le replacer dans la généalogie des méta-régimes, le confronter à de grandes morphologies du pouvoir, mesurer ses effets sur la *co-viabilité sociale et écologique*, et nommer la *tendance autarchicratique* qui en résulte. La Partie VII change légèrement de registre. Elle ne rajoute pas une couche de théorie, elle nempile pas un “programme politique” sur un diagnostic déjà dense ; elle tente autre chose : prendre au sérieux les gestes archicratiques formulés par la thèse en les traduisant, point par point, dans larchitecture concrète dun grand système dIA.
Dans la conclusion générale de lessai-thèse, ces gestes *droit au différé, journal de justification, visas daffectation, coupe-circuits, tribunaux dédiés, assemblées daffectation, budgets scéniques, principes de révision et cartographies des scènes manquantes* étaient présentés comme des *manières de rouvrir la scène là où la régulation tend à se refermer sur ses propres instruments*. Ici, ils deviennent le cœur dun manuel dusage de Système F : non plus des principes abstraits, mais des dispositifs à instituer, des séquences à préciser, des contraintes à inscrire dans le droit, dans lorganisation, dans les interfaces elles-mêmes. Lenjeu nest pas de moraliser lIA par quelques garde-fous, mais de montrer ce que cela change, très concrètement, de poser quaucun module de scoring, aucun pipeline décisionnel, aucune métrique de performance ne peut être légitime sans les scènes où il accepte de comparaître.

View File

@@ -6,14 +6,12 @@ level: 1
version: "0.1.0"
concepts: []
links: []
order: 90
order: 190
summary: ""
source:
kind: docx
path: "sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Conclusion.docx"
---
# Conclusion : Ce que laudit archicratique dun système IA nous apprend
On peut maintenant refermer le dossier de Système F, mais il serait trompeur de parler de “fin”. Ce cas pratique na jamais été conçu comme une étude de cas au sens faible un exemple illustratif venu mettre un peu de chair sur une théorie déjà bouclée. Il a été traité comme un *laboratoire* : un lieu où le paradigme archicratique est mis à lépreuve dun dispositif particulièrement condensé de notre présent, un lieu où il est sommé de tenir ses promesses ou de montrer ses limites. La conclusion qui simpose nest donc pas un résumé, mais une mise en forme : *que nous a appris, en retour, lexploration archicratique dun grand système dIA de fondation intégré à la régulation sociale ? Qua-t-elle révélé sur la nature des régimes qui nous gouvernent déjà, et sur les conditions de possibilité dun réarmement archicratique crédible ?*
Dun point de vue purement descriptif, la première leçon est presque brutale : Système F nest pas un objet futuriste, mais la forme intensifiée de logiques déjà largement à lœuvre. En le construisant comme un système composite agrégat stylisé de dispositifs de scoring social, doutils de gestion des risques en santé, de modules de tri de candidatures, de systèmes de recommandation et de modération de contenus, de services dIA “as a Service” intégrés par API dans des guichets et des logiciels métier , nous avons pris soin de ne rien lui attribuer qui ne soit déjà attesté, sous une forme ou une autre, dans des affaires documentées : scandale des allocations néerlandaises, algorithmes de risque pénal, gestion automatisée des patients à “haut risque”, outils de recrutement biaisés, plateformes dont la modération repose massivement sur des chaînes automatisées.

View File

@@ -6,13 +6,12 @@ level: 1
version: "0.1.0"
concepts: []
links: []
order: 10
order: 110
summary: ""
source:
kind: docx
path: "sources/docx/cas-ia/Cas_Pratique-Archicratie_et_gouvernance_des_systemes_IA-Introduction.docx"
---
Ce texte est un prolongement opératoire de lessai-thèse sur l*archicratie*. Il najoute pas un nouveau pan théorique, ni un chapitre caché : il montre *comment* utiliser le paradigme archicratique pour instruire un cas concret, massif, déjà à lœuvre. Il propose un audit archicratique dun grand système dintelligence artificielle de fondation, tel quil est intégré dans des dispositifs de décision publics et privés. Autrement dit : il sagit dexaminer, avec les outils construits par la thèse, ce qui se passe quand un modèle dIA ne se contente plus de produire des textes ou des prédictions dans labstrait, mais devient un opérateur régulateur au cœur des politiques sociales, des institutions de santé, des systèmes de justice, des ressources humaines, des plateformes dinformation.
Dans lessai-thèse, l*archicratie* est définie comme un *seuil* : le seuil à partir duquel un ordre de régulation cesse dêtre une pure automatisation fonctionnelle et devient une régulation habitée, cest-à-dire fondée, visible, opposable, révisable. Trois prises structurent ce seuil : l*arcalité*, qui concerne les *formes de fondation, de justification, de symbolisation du pouvoir régulateur* ; la *cratialité*, qui rassemble les *dispositifs, instruments, chaînes dexécution, architectures et procédures par lesquelles ce pouvoir "prend", sapplique, opère* ; et l*archicration*, qui désigne la *scène dépreuve où les deux premières prises peuvent être amenées en visibilité, en conflit, en révision*. Un ordre est archicratique non parce quil serait idéalement juste, mais parce quil se laisse amener en scène : on peut lui demander doù il parle, comment il agit, ce qui est en jeu, à quelles conditions il accepte de se transformer.
@@ -33,7 +32,7 @@ Cest cette incrustation que nous allons prendre pour terrain. Pour rendre l
- dans la modération et la curation de contenus, pour filtrer des messages “toxiques”, recommander des publications, ajuster la visibilité de certains profils.
Système F nest pas un fantasme technologique éloigné : il agrège des fonctions déjà présentes, sous dautres noms, dans de nombreux pays et secteurs. Des algorithmes de *scoring* de fraude sociale ont été utilisés dans des administrations de sécurité sociale, provoquant scandales et contentieux lorsquils ciblaient de façon disproportionnée certains quartiers, certaines familles, certains types de parcours\* ; des systèmes dévaluation de risque ont été intégrés à des décisions de justice pour proposer des peines ou des libérations conditionnelles ; des plateformes de recrutement recourent à des modèles dIA pour pré-filtrer des milliers de candidatures en quelques minutes ; les systèmes de modération emploient depuis longtemps des modèles dapprentissage pour détecter les propos violents, haineux, pornographiques. Système F est donc moins une fiction quun nom commun donné à un ensemble de tendances déjà engagées.
Système F nest pas un fantasme technologique éloigné : il agrège des fonctions déjà présentes, sous dautres noms, dans de nombreux pays et secteurs. Des algorithmes de scoring de fraude sociale ont été utilisés dans des administrations de sécurité sociale, provoquant scandales et contentieux lorsquils ciblaient de façon disproportionnée certains quartiers, certaines familles, certains types de parcours ; des systèmes dévaluation de risque ont été intégrés à des décisions de justice pour proposer des peines ou des libérations conditionnelles ; des plateformes de recrutement recourent à des modèles dIA pour pré-filtrer des milliers de candidatures en quelques minutes ; les systèmes de modération emploient depuis longtemps des modèles dapprentissage pour détecter les propos violents, haineux, pornographiques. Système F est donc moins une fiction quun nom commun donné à un ensemble de tendances déjà engagées.
Ce qui nous intéresse nest pas lIA “en général”, ni lintelligence artificielle comme problème métaphysique. Ce qui nous intéresse, dans notre manière de voir les choses, cest lécosystème socio-technique dans lequel Système F est inséré : les chaînes cratiales quil tisse ou renforce, les formes darcalité explicite ou implicite quil véhicule, les archicrations quil rencontre, détourne ou évite. Un modèle appelé par API dans un formulaire de demande de logement nest pas un objet neutre : il devient un segment de chaîne régulatrice qui affecte des droits à lhébergement ; il participe à la décision de traiter un dossier en priorité, de le mettre en attente, de le faire basculer dans la catégorie “suspect”. De même, un modèle intégré au tri des CV dans une grande entreprise nest pas un simple gain de temps : il devient un opérateur qui donne la forme concrète de laccès à lemploi.
@@ -45,7 +44,7 @@ La première est lépreuve de *détectabilité*. Elle consiste à savoir si,
La deuxième est lépreuve archéogénétique. Il sagit de replacer Système F dans la série des méta-régimes régulateurs décrits par la thèse : techno-logistique, scripturo-bureaucratique, marchand, guerrier, etc. Nous demanderons : de quelle histoire Système F est-il le prolongement ? Relève-t-il dune nouvelle étape radicalement inédite, ou vient-il composer plusieurs régimes existants — par exemple la mégamachine techno-logistique, la rationalité scripturo-bureaucratique et le régime marchand ? Quels “styles de régulation” anciens réactive-t-il sous une forme technique nouvelle ?
La troisième est lépreuve morphologique. Elle consiste à confronter Système F aux grandes philosophies du pouvoir auxquelles la thèse sest mesurée : gouvernementalité foucaldienne, espace public habermassien, dissensus rancière, économies de la grandeur de Boltanski et Thévenot, etc. Que devient la gouvernementalité quand elle se dote dun Système F ? Que devient lespace public quand les contributions circulent à travers des filtres IA ? Comment les épreuves de justification se transforment-elles lorsque des modèles statistiques produisent des classements et des diagnostics à grande échelle ? Cette épreuve permettra de montrer ce que le paradigme archicratique voit que ces philosophies laissent en retrait : la question de la scène concrète où le pouvoir se justifie (ou ne se justifie pas).
La troisième est lépreuve morphologique. Elle consiste à confronter Système F aux grandes philosophies du pouvoir auxquelles la thèse sest mesurée : gouvernementalité foucaldienne, espace public habermassien, économies de la grandeur de Boltanski et Thévenot, etc. Que devient la gouvernementalité quand elle se dote dun Système F ? Que devient lespace public quand les contributions circulent à travers des filtres IA ? Comment les épreuves de justification se transforment-elles lorsque des modèles statistiques produisent des classements et des diagnostics à grande échelle ? Cette épreuve permettra de montrer ce que le paradigme archicratique voit que ces philosophies laissent en retrait : la question de la scène concrète où le pouvoir se justifie (ou ne se justifie pas).
La quatrième est lépreuve historique. Les révolutions industrielles ont été relues par la thèse comme des révolutions régulatrices : chaque vague technologique reconfigurant les agencements entre *arcalité, cratialité, archicration*. Nous montrerons en quoi Système F est un produit avancé de la quatrième révolution régulatrice (numérisation intégrale, pilotage par indicateurs) et en quoi il force à prendre au sérieux lhypothèse dune cinquième révolution scénique : non plus centrée sur lextension de la puissance calculatoire, mais sur la réinstitution de la scène comme opérateur central du pouvoir.

View File

@@ -1,435 +1,150 @@
---
title: "Document de présentation"
title: "Genèse conceptuelle du terme archicratie"
edition: "commencer"
status: "draft"
status: "presentation"
level: 1
version: "0.1.0"
concepts: []
version: "0.2.0"
concepts:
- archicratie
- republique
- regimes-politiques
- conditions-construites
links: []
order: 0
summary: ""
summary: "Une entrée progressive dans le concept darchicratie à partir des limites du vocabulaire politique hérité."
source:
kind: docx
path: "sources/docx/commencer/document-de-presentation.docx"
path: "sources/docx/commencer/Genese_conceptuelle_du_terme_archicratie.docx"
---
## I — Langle mort de la théorie politique
Depuis plusieurs siècles, la théorie politique sefforce de comprendre comment les sociétés humaines sorganisent et se gouvernent. Elle sest structurée autour de quelques questions fondamentales : qui exerce le pouvoir, au nom de qui, selon quelles règles, à travers quelles institutions.
<p class="landing-kicker">Genèse conceptuelle</p>
De la souveraineté chez Bodin à la séparation des pouvoirs chez Montesquieu, du contrat social chez Rousseau aux théories contemporaines de la démocratie représentative, lessentiel de la réflexion politique moderne sest concentré sur les formes visibles du pouvoir. Monarchies, républiques, démocraties, oligarchies : ces régimes ont constitué les catégories principales à travers lesquelles les sociétés ont cherché à penser leur propre organisation.
<h2 id="commencer-genese-title">République, classifications du pouvoir et conditions construites du commun</h2>
Cette tradition a produit des analyses dune grande richesse. Elle a permis de comprendre les mécanismes de la légitimité politique, les formes de la domination, les conditions de la représentation et les principes de lautorité publique.
<p>Le terme de République semble dabord offrir une évidence. Dans les usages ordinaires comme dans une partie des discours savants, il paraît désigner une forme politique identifiable : un ordre non monarchique, réglé par la loi, référé à lintérêt général, attaché à la citoyenneté. Cette évidence se défait pourtant dès que lon examine les textes qui ont contribué à en stabiliser lautorité.</p>
Mais elle laisse dans lombre la question décisive.
<div class="editorial-reveal" data-editorial-reveal>
<button class="editorial-reveal__button" type="button" aria-expanded="false">
<span class="editorial-reveal__label">Lire la suite de la genèse conceptuelle</span>
</button>
Les sociétés humaines ne tiennent pas seulement par leurs régimes politiques.
<div class="editorial-reveal__body" aria-hidden="true">
Elles tiennent aussi — et souvent surtout — par des architectures matérielles, techniques, normatives et organisationnelles qui rendent la coexistence collective possible. Infrastructures de production et de circulation, systèmes administratifs, normes juridiques, instruments de mesure, dispositifs dinformation, architectures techniques, procédures dévaluation ou cadres cognitifs partagés : tous ces éléments participent à lorganisation concrète du monde social.
<p>Chez Rousseau, la République ne désigne pas un type institutionnel parmi dautres, mais tout État régi par des lois, quelle que soit sa forme dadministration. Ce qui fait République nest donc pas dabord labsence de roi, ni la structure précise du gouvernement, mais la subordination de lordre politique à une loi qui ne se confond pas avec la volonté particulière dun individu ou dun groupe. En ce sens, la République excède la typologie des régimes : elle nomme moins une forme quun certain régime de validité de la loi.</p>
Ces architectures ne sont pas de simples supports du pouvoir politique. Elles en conditionnent lexercice et souvent la survie. Elles organisent la circulation des ressources, stabilisent les attentes collectives, encadrent les interactions sociales et permettent aux tensions qui traversent les sociétés de demeurer compatibles avec la continuité de lensemble.
<p>Chez Montesquieu, la difficulté se déplace. La République demeure une espèce de gouvernement distincte de la monarchie et du despotisme, mais elle se divise elle-même entre démocratie et aristocratie, selon que la souveraine puissance appartient au peuple entier ou à une partie du peuple. Le terme ne renvoie donc pas à une structure homogène. Il désigne un ensemble de configurations dont lunité tient à un rapport spécifique entre souveraineté, loi et vertu civique.</p>
Autrement dit, elles assurent ce que lon peut appeler la co-viabilité des sociétés humaines : leur capacité à absorber et à redistribuer les tensions internes sans se désagréger.
<p>Ces deux élaborations, loin de stabiliser définitivement la notion, en révèlent la plasticité. La République peut désigner une forme de gouvernement, un principe dorganisation, un horizon normatif, une condition de légitimité. Elle appartient à la fois au registre descriptif et au registre évaluatif. Elle nomme ce qui est, mais aussi ce qui devrait être reconnu comme politiquement valable.</p>
Or cette dimension essentielle de la vie collective demeure étonnamment peu théorisée.
<h3 class="commencer-reveal-heading">La République comme ressource de légitimation</h3>
La théorie politique sest concentrée sur les institutions visibles du pouvoir. Les sciences sociales ont étudié les infrastructures techniques, les organisations administratives ou les dispositifs économiques. Mais ces analyses restent le plus souvent fragmentées, dispersées entre disciplines et objets distincts.
<p>Cette ambiguïté devient particulièrement sensible dans les usages contemporains du vocabulaire républicain. Dans lespace public français, la référence à la République fonctionne rarement comme une simple description institutionnelle. Elle sert à qualifier, à légitimer, à exclure, à tracer une frontière entre ce qui serait recevable et ce qui ne le serait pas. Les “valeurs républicaines sont invoquées comme si leur contenu allait de soi, alors même quelles demeurent disputées : la laïcité peut être comprise comme neutralité de lÉtat ou comme exigence deffacement du religieux dans lespace social ; légalité peut signifier égalité formelle des droits ou réduction effective des asymétries sociales ; la souveraineté peut être pensée dans le cadre national ou recomposée dans des ensembles supranationaux. Dans chaque cas, lappel à la République ne se contente pas de nommer un principe commun : il oriente linterprétation, hiérarchise les positions, confère une autorité.</p>
Il manque encore un concept capable de désigner les architectures par lesquelles les sociétés organisent leur propre tenue.
<p>Cette opération peut être éclairée par Weber : dans les formes modernes de domination, la légitimité repose sur la croyance en la validité des règles. Mais cette croyance elle-même peut devenir une ressource. Se réclamer de la République revient alors à adosser une position particulière à un principe supposé commun, sans nécessairement passer par lanalyse des institutions, des pratiques ou des effets concrets quelle engage.</p>
Cest pour nommer cette dimension que lon peut introduire le concept darchicratie.
<p>Foucault permet de pousser plus loin ce constat. Les discours ne sont pas de pures représentations du réel ; ils participent à la production des rapports de pouvoir. Dire quune mesure est “républicaine” ou “anti-républicaine” ne revient pas seulement à la décrire : cest intervenir dans un champ de forces, rendre certaines positions audibles, en disqualifier dautres, produire un partage du légitime et de lillégitime.</p>
Larchicratie ne désigne pas un régime politique parmi dautres. Elle désigne le méta-régime de régulation qui traverse et soutient les régimes politiques explicites. Là où les régimes politiques définissent les formes visibles du pouvoir, larchicratie renvoie aux architectures plus profondes qui rendent possible la tenue du monde social.
<p>La République apparaît ainsi comme un terme à double régime. Elle désigne un principe dorganisation politique fondé sur la loi ; elle fonctionne aussi comme une ressource discursive dans les luttes de légitimation. Ces deux dimensions ne coïncident pas toujours. Une institution peut satisfaire aux critères formels dun ordre républicain tout en étant dénoncée comme contraire aux valeurs de la République ; inversement, une pratique peut se réclamer du républicanisme au nom dune interprétation normative qui déborde son inscription institutionnelle.</p>
Comprendre les sociétés contemporaines suppose donc de déplacer partiellement le regard. Il ne sagit plus seulement dinterroger les formes de gouvernement, mais danalyser les architectures régulatrices qui permettent aux tensions sociales, économiques, techniques et écologiques de demeurer compatibles avec la continuité collective.
<p>Le problème nest donc pas une grossière ambiguïté lexicale. Un même terme sert à décrire et à juger, à identifier une forme et à produire une évaluation. Il unifie ce qui, pour être analysé, devrait être distingué : forme institutionnelle, principe normatif, mode de légitimation, usage stratégique du langage politique.</p>
Cest à lexploration de cette dimension que se consacre la théorie de larchicratie.
<p>Cest pourquoi le déplacement vers les classifications des formes de pouvoir paraît dabord nécessaire. Si la République est trop large, trop chargée, trop disputée, il semble possible de chercher des catégories plus précises, capables de décrire les structures effectives du pouvoir.</p>
## II — Pourquoi un nouveau concept est nécessaire
<h3 class="commencer-reveal-heading">Des régimes politiques aux classifications du pouvoir</h3>
Si lon affirme que les sociétés humaines se maintiennent par des architectures régulatrices profondes, une objection surgit aussitôt : nexiste-t-il pas déjà des concepts pour penser cette dimension ?
<p>La tradition aristotélicienne offre un point dappui classique. En distinguant les régimes selon le nombre de gouvernants et la finalité de leur action, Aristote articule structure du pouvoir et orientation normative : monarchie, aristocratie et politeia relèvent des formes orientées vers le bien commun ; tyrannie, oligarchie et démocratie, au sens dégradé du terme dans cette typologie, en constituent les déviations. Le modèle paraît robuste parce quil ne se contente pas de demander qui gouverne ; il demande aussi pour quoi le gouvernement sexerce.</p>
En effet, plusieurs traditions intellectuelles ont cherché à décrire les dispositifs par lesquels les sociétés organisent leur stabilité. Les notions de bureaucratie, de gouvernance, de régulation ou encore dinfrastructure institutionnelle semblent, à première vue, approcher cette réalité.
<p>Mais cette robustesse repose déjà sur une simplification. Aristote lui-même reconnaît la difficulté à faire entrer les constitutions réelles dans des formes pures. La politeia apparaît précisément comme une combinaison déléments démocratiques et oligarchiques. La classification ne fonctionne donc quà condition de réduire la complexité des arrangements effectifs.</p>
Pourtant aucun de ces concepts nen saisit pleinement la portée.
<p>Polybe accentue cette difficulté en introduisant la dynamique des régimes et lidée de constitution mixte. La stabilité romaine ne tient pas à la pureté dune forme, mais à léquilibre instable entre plusieurs principes : consuls, Sénat, assemblées populaires. La typologie devient alors moins une description de substances politiques quun instrument pour penser des combinaisons, des tensions, des contrepoids.</p>
La notion de bureaucratie, telle quelle apparaît chez Max Weber, désigne lorganisation administrative rationnelle propre aux États modernes. Elle permet de comprendre la structuration hiérarchique des appareils administratifs, la formalisation des règles et la rationalisation des procédures. Mais la bureaucratie ne constitue quun type particulier dinstitution. Elle ne couvre ni lensemble des architectures techniques qui structurent les sociétés contemporaines, ni les dispositifs économiques, informationnels ou cognitifs qui participent à la régulation collective.
<p>La modernité na pas résorbé cette difficulté ; elle la démultipliée. Démocratie représentative, démocratie libérale, État de droit, autoritarisme, totalitarisme, technocratie, bureaucratie : chaque catégorie éclaire un aspect des configurations politiques, mais aucune ne suffit à en saisir lensemble. Weber montre que le pouvoir moderne se distribue dans des règles impersonnelles et des appareils bureaucratiques ; il ne se concentre plus seulement dans une figure souveraine. Une même configuration peut ainsi être électoralement démocratique, administrativement bureaucratique, partiellement technocratique, libérale ou illibérale selon les droits effectivement garantis.</p>
La notion de gouvernance, largement utilisée dans les sciences sociales contemporaines, cherche quant à elle à décrire la pluralité des acteurs et des mécanismes impliqués dans la coordination des sociétés. Elle met laccent sur les réseaux dacteurs, les partenariats institutionnels ou les formes de pilotage indirect. Mais cette notion reste principalement descriptive : elle sintéresse aux modes de coordination sans saisir pleinement les architectures matérielles et techniques qui rendent cette coordination possible.
<p>Plus les catégories se raffinent, plus elles gagnent en précision locale ; mais plus elles risquent de perdre la cohérence densemble. Elles décrivent qui gouverne, selon quelles règles, au nom de quels principes, par quels appareils. Elles saisissent des formes visibles du pouvoir. Elles peinent encore à répondre à une question plus élémentaire : sur quoi ces formes reposent-elles concrètement ? Quest-ce qui les rend praticables, durables, transformables ?</p>
La notion de régulation, développée notamment dans léconomie politique, permet danalyser les dispositifs par lesquels les systèmes économiques maintiennent une certaine stabilité malgré les tensions internes. Elle a notamment permis de comprendre les transformations du capitalisme à travers les formes institutionnelles qui organisent ses équilibres. Mais elle demeure largement centrée sur les mécanismes économiques et institutionnels, laissant en partie dans lombre les infrastructures techniques, informationnelles ou administratives qui structurent la vie sociale au-delà de léconomie.
<p>Tant que cette question demeure suspendue, les catégories fonctionnent, mais partiellement. Elles décrivent des configurations sans en saisir pleinement les conditions dexistence.</p>
Enfin, les approches contemporaines qui sintéressent aux infrastructures — quelles soient techniques, numériques ou organisationnelles — mettent en évidence limportance des dispositifs matériels dans lorganisation des sociétés. Elles montrent comment les réseaux techniques, les systèmes dinformation ou les architectures logistiques conditionnent les formes de la vie collective. Mais ces analyses restent souvent sectorielles : elles décrivent des infrastructures particulières sans toujours saisir la logique densemble qui les articule.
<p>Lexamen doit alors se resserrer encore, non plus seulement sur les régimes, mais sur les termes qui structurent leur nomination. La distinction entre les formes en -archie et celles en -cratie paraît dabord éclairante. Les premières — monarchie, oligarchie, anarchie — semblent désigner des principes dorganisation du pouvoir : un seul, quelques-uns, aucun commandement institué. Les secondes — démocratie, aristocratie, technocratie — paraissent renvoyer à des modalités dexercice ou de légitimation : le peuple, les meilleurs, les experts. Létymologie semble confirmer cette répartition : archè comme principe, commencement ou commandement ; kratos comme puissance, force ou domination.</p>
Chacun de ces concepts éclaire une dimension importante du fonctionnement social. Aucun cependant ne permet de saisir lensemble des architectures par lesquelles les sociétés organisent la régulation des tensions qui les traversent.
<h3 class="commencer-reveal-heading">Archie, cratie et crise des catégories</h3>
Cest précisément cet ensemble que désigne le concept darchicratie.
<p>Mais les usages effectifs troublent aussitôt cette distinction. La démocratie désigne à la fois un principe de légitimation, une procédure institutionnelle, une forme de participation et une norme dégalité politique. Laristocratie, bien quelle implique le gouvernement de quelques-uns, se présente historiquement comme une -cratie, cest-à-dire comme un pouvoir justifié par lexcellence supposée de ceux qui lexercent. Lanarchie peut signifier absence de commandement, mais aussi organisation sociale non hiérarchique dans certaines traditions politiques.</p>
Larchicratie ne se limite ni à ladministration, ni à la coordination entre acteurs, ni aux mécanismes économiques de régulation, ni aux seules infrastructures techniques. Elle désigne larchitecture globale par laquelle une société organise la co-viabilité de ses dynamiques internes.
<p>Les termes ne renvoient donc pas à des niveaux homogènes. Ils agrègent structure du pouvoir, mode de désignation, principe de légitimation, forme institutionnelle et horizon normatif. La démocratie en offre lexemple le plus net : dans la cité grecque, elle renvoie à des pratiques situées — assemblée, tirage au sort, rotation des charges — ; dans les régimes modernes, elle désigne le plus souvent représentation élective, pluralisme partisan, protection des droits. Le même mot traverse des mondes institutionnels profondément différents.</p>
Lintérêt du concept est ainsi de permettre une lecture transversale des dispositifs qui structurent la vie collective. Il invite à considérer ensemble des éléments souvent étudiés séparément : institutions politiques, infrastructures matérielles, systèmes administratifs, architectures informationnelles, dispositifs techniques, instruments de mesure ou cadres normatifs.
<p>La difficulté nest pas que les termes seraient simplement flous. Elle tient à ce quils condensent des dimensions que lanalyse doit distinguer sans pouvoir les séparer entièrement. Une catégorie politique ne décrit jamais seulement une forme ; elle transporte une histoire, une procédure, une norme, un conflit dinterprétation.</p>
Larchicratie ne remplace pas les concepts existants ; elle les re-situe dans un cadre plus large.
<p>Les débats contemporains sur la démocratie le confirment. Démocratie délibérative, participative, sociale, libérale, radicale : ces expressions ne sont pas de simples variantes dun concept stable. Elles manifestent des désaccords profonds sur ce qui fait la substance même du politique : discussion publique, égalité effective, conflit, participation, représentation, redistribution du pouvoir.</p>
La bureaucratie devient alors lune des formes possibles de larchicratie administrative. Les infrastructures techniques apparaissent comme des composantes matérielles de larchicratie. Les dispositifs économiques de régulation constituent certaines de ses modalités fonctionnelles.
<p>Ainsi, la distinction entre -archie et -cratie ne résout pas la crise classificatoire ; elle la rend plus visible. Elle montre que le langage politique peine à articuler principe dorganisation, exercice effectif, légitimation et institution. Les catégories demeurent indispensables pour nommer, comparer, discuter ; mais elles ne suffisent pas à saisir ce qui permet aux formes quelles désignent de devenir opératoires.</p>
Ce déplacement permet de saisir les sociétés non plus seulement à partir de leurs institutions visibles, mais à partir de lensemble des architectures qui rendent leur co-viabilité possible.
<p>Cest dans cet espace dinsuffisance que la prolifération idéologique moderne prend tout son relief. Libéralisme, socialisme, conservatisme, anarchisme ne proposent pas seulement des doctrines concurrentes ; ils réinvestissent les catégories disponibles, les déplacent, les recomposent. Le libéralisme peut saccommoder de formes institutionnelles diverses dès lors que certaines libertés sont garanties. Le socialisme peut prendre des formes étatiques, autogestionnaires ou coopératives. Lanarchisme ne se réduit pas à labsence dordre ; il cherche, dans certaines de ses variantes, des formes dorganisation non hiérarchiques.</p>
Lintroduction du concept darchicratie ne vise donc pas à multiplier les catégories théoriques. Elle répond à une nécessité analytique : disposer dun concept capable de désigner le niveau fondamental où les sociétés organisent leur propre tenue.
<p>Les courants plus récents — écologisme politique, féminisme, postcolonialisme, théories critiques de la race, décroissance, technocritique — accentuent cette dispersion. Ils introduisent des objets que les catégories classiques ne savent pas toujours intégrer : rapports à la nature, au genre, aux héritages coloniaux, aux systèmes techniques, aux limites matérielles de la croissance.</p>
Cest à la clarification de ce niveau que doit maintenant se consacrer la définition conceptuelle de larchicratie.
<p>Il ne sagit donc pas dun enrichissement doctrinal arbitraire. Cette prolifération montre que les catégories héritées ne suffisent plus à organiser lensemble des problèmes politiques contemporains. Les idéologies tentent de recomposer le champ, mais elles ne produisent pas à elles seules une intelligibilité unifiée. Elles interprètent, orientent, contestent ; elles ne disent pas encore assez clairement dans quelles conditions matérielles, sociales et techniques leurs principes deviennent effectifs.</p>
## III — Définition conceptuelle de larchicratie
<h3 class="commencer-reveal-heading">Idéologies, pratiques et conditions matérielles</h3>
Si larchicratie désigne le niveau profond par lequel les sociétés assurent leur propre tenue, il faut maintenant en préciser la structure.
<p>Le regard se déplace alors vers ce que les classifications et les idéologies laissent en arrière-plan : les pratiques, les métiers, les dispositifs, les infrastructures, les arrangements concrets par lesquels un ordre politique s'inscrit dans la réalité. Les pratiques professionnelles, longtemps reléguées hors du centre théorique du politique, cessent dapparaître comme applications de décisions préalables. Elles participent à la production même du monde commun.</p>
Par archicratie, il faut entendre lensemble des architectures par lesquelles une société organise la régulation des tensions qui la traversent afin de maintenir la co-viabilité de ses dynamiques collectives.
<p>Les métiers du bâtiment, de lingénierie, de laménagement, de la santé, de léducation ou de ladministration engagent des savoir-faire, des normes et des dispositifs dorganisation qui conditionnent directement des possibilités daction.</p>
Toute société humaine est traversée par une multiplicité de forces : dynamiques économiques, transformations techniques, conflits sociaux, mutations culturelles, pressions écologiques, innovations organisationnelles. Ces forces produisent des tensions permanentes. Elles peuvent accélérer, déséquilibrer ou fragmenter lordre social.
<p>La construction dune route, dun réseau ferroviaire ou dun système de distribution dénergie ne relève pas dune neutralité technique. Elle transforme les relations économiques, les mobilités, les hiérarchies territoriales, les temporalités sociales. Les réaménagements urbains du XIXe siècle, notamment ceux de Paris sous le Second Empire, montrent de manière exemplaire quun choix de voirie, dassainissement, dalignement ou de circulation peut simultanément améliorer les flux, redistribuer les populations, faciliter le contrôle et modifier lexpérience ordinaire de la ville.</p>
La continuité dune société dépend donc de sa capacité à organiser un traitement durable de ces tensions.
<p>De même, linstitution dun système scolaire ou hospitalier ne se réduit pas à lapplication dun principe politique général. Elle suppose des bâtiments, des personnels formés, des budgets, des horaires, des procédures, des instruments de classement et dévaluation. Laccès au savoir ou au soin ne devient effectif quà travers cette matérialisation organisée.</p>
Ce traitement ne repose pas uniquement sur des décisions politiques ponctuelles. Il sappuie sur un ensemble beaucoup plus large de dispositifs stabilisateurs : institutions administratives, infrastructures matérielles, normes juridiques, architectures techniques, systèmes dinformation, instruments de mesure, procédures organisationnelles, dispositifs dévaluation ou encore cadres cognitifs partagés.
<p>Les formes politiques ne peuvent donc plus être comprises indépendamment des dispositifs matériels et organisationnels qui les soutiennent. Les catégories en -archie et en -cratie décrivent des principes, des formes et des légitimations ; les idéologies en proposent des interprétations ; mais leur effectivité dépend dopérations concrètes de construction, daménagement, dentretien et de coordination.</p>
Pris ensemble, ces dispositifs composent larchitecture régulatrice qui permet à une société de maintenir la co-viabilité de ses dynamiques internes.
<p>Ce déplacement ne consiste pas à ajouter un domaine empirique au domaine politique. Il oblige à reconnaître que ce que lon appelle politique nexiste jamais séparément de ses conditions deffectuation. Une loi sans lieux, sans procédures, sans agents, sans archives, sans moyens daccès reste formelle. Un droit sans dispositif permettant son exercice demeure abstrait. Une citoyenneté sans école, sans espace public, sans information, sans capacité de circulation et de délibération se réduit à une promesse.</p>
Cest cette architecture que désigne larchicratie.
<p>À ce niveau, la frontière entre politique, social, technique et matériel cesse dêtre stable. Une route, un pont, une école, un hôpital, un réseau deau, une bibliothèque, un cadastre, une archive ou une procédure daccès aux soins ne sont pas politiques seulement lorsquils sont décidés par lÉtat. Ils le sont parce quils organisent des possibilités, répartissent des accès, stabilisent des usages, produisent des dépendances et des capacités. Leur statut juridique peut varier — étatique, municipal, associatif, communautaire, privé, coopératif — mais leur puissance structurante demeure.</p>
Pour rendre compte de cette dynamique régulatrice, il est utile de distinguer trois dimensions fondamentales présentes dans toute organisation sociale complexe : larcalité, la cratialité et larchicration.
<p>Lanarchisme joue ici le rôle dune épreuve décisive. En récusant lÉtat comme forme centralisée de contrainte, il oblige à distinguer lordre, la loi, linstitution, la règle commune, la domination et lautorité. Dans ses traditions les plus exigeantes, de Proudhon à Kropotkine, il ne se réduit pas à labsence de toute organisation ; il cherche plutôt à penser des formes dassociation, de fédération, de coopération et de régulation mutuelle sans capture hiérarchique. Mais cette tentative ne supprime pas la nécessité dun monde praticable. Même une société anti-étatique doit produire, entretenir, transmettre, répartir, réparer, arbitrer. Elle doit organiser des lieux, des ressources, des usages, des accès, des protections. Lanarchisme ne rend donc pas la matérialité politique inutile ; il révèle au contraire que la régulation ne se confond pas avec lÉtat, mais quaucune vie collective ne peut se dispenser dopérations de structuration.</p>
### Larcalité : les structures stabilisatrices
<p>Cest alors que les professions, les métiers et les positions sociales deviennent politiquement décisifs. Lenseignant travaille dans une institution qui organise la transmission, la sélection, lévaluation, la formation de lattention et de la citoyenneté. Le soignant agit dans des architectures de tri, de priorité, de protocole, de disponibilité des ressources. Le médecin ne rencontre pas les mêmes responsabilités selon quil exerce dans un système libéral, hospitalier, mutualiste ou public. Le maçon, le plombier, lélectricien, lingénieur, lurbaniste, larchitecte interviennent dans les conditions mêmes de lhabitation, de la circulation, de lhygiène, de la sécurité, de la production. Le commerçant, le taxi, le buraliste, lartisan, le mécanicien, le transporteur, le militaire, le fonctionnaire ou le retraité habitent chacun des dépendances différenciées à légard des infrastructures, des normes, de la fiscalité, des protections collectives, des marchés locaux, des autorisations administratives.</p>
Larcalité désigne lensemble des structures relativement durables qui stabilisent un système social.
<p>Une analyse rigoureuse ne peut donc pas dire seulement que certains groupes “adhèrent” à telle ou telle idéologie. Elle doit observer comment leurs conditions dexistence rendent certaines conceptions plus plausibles, plus défensives, plus désirables ou plus menaçantes. Les professions réglementées peuvent défendre lordre normatif qui garantit leur statut tout en contestant les contraintes qui réduisent leur autonomie. Les entrepreneurs peuvent réclamer moins de réglementation tout en dépendant dinfrastructures, de réseaux énergétiques, de stabilité juridique ou de commandes publiques. Les agents publics peuvent défendre luniversalité du service tout en subissant les procédures qui bureaucratisent leur mission. Les propriétaires peuvent valoriser la sécurité juridique et lordre spatial, tandis que ceux qui dépendent dun accès précaire au logement peuvent éprouver les mêmes dispositifs comme des formes dexclusion. Les idées ne sont pas réductibles aux intérêts ; mais elles ne flottent jamais hors des conditions qui leur donnent prise.</p>
Elle comprend les institutions politiques, les cadres juridiques, les infrastructures matérielles, les architectures techniques, les dispositifs administratifs ou encore les normes organisationnelles qui encadrent les interactions sociales.
<p>Le bâti concentre cette épaisseur. La maison nest pas seulement un abri : elle inscrit un rapport à la propriété, à lintimité, à la transmission, au crédit, au voisinage, au droit du sol. De même, un lieu de culte nest pas qu'un espace religieux : il configure des appartenances, des rythmes collectifs, une visibilité publique du symbolique. Le château condense protection, domination territoriale, hiérarchie sociale et capacité de coercition. La mairie, lécole, le tribunal, lhôpital, la gare, la caserne, la prison, la bibliothèque matérialisent des fonctions du commun, mais aussi des manières dy entrer, dy être reconnu, classé, accueilli, contrôlé ou exclu.</p>
Ces structures produisent de la stabilité. Elles définissent des règles, organisent des flux, instituent des contraintes et rendent certaines formes daction possibles tandis que dautres deviennent difficiles ou impossibles.
<p>Lhistoire politique devient alors inséparable dune histoire des formes construites. Ainsi, la cité antique nest pas pensable sans agora, murailles, temples, voies, dispositifs dassemblée. La féodalité ne se comprend pas sans châteaux, domaines, chemins, églises, villages et servitudes attachées au sol. LÉtat moderne ne sinstitue pas uniquement par des lois : il se rend présent par routes, bureaux, archives, cadastres, écoles, casernes, tribunaux. LÉtat social ne se réduit pas à un principe de redistribution : il suppose guichets, caisses, hôpitaux, logements, statistiques, formulaires, réseaux administratifs, personnels formés.</p>
Larcalité constitue ainsi la dimension structurelle de la vie collective : le réseau de formes relativement persistantes qui organisent lespace dans lequel les dynamiques sociales peuvent se déployer.
<p>Cette matérialité est plus visible encore lorsquelle se défait. C'est le cas des guerres détruisant non seulement des vies, mais aussi les conditions organisées de la vie commune. La rupture des réseaux deau, dénergie, de transport, la destruction des écoles, des hôpitaux, des administrations, des logements, des archives ou des circuits alimentaires ne constituent pas des dommages extérieurs au politique. Elles atteignent le politique dans sa texture même. Il peut rester un État sur le papier, une constitution, des autorités, des déclarations de droits ; si les conditions matérielles dexercice de ces droits sont détruites, lordre politique se vide de son effectivité.</p>
### La cratialité : les dynamiques de transformation
<p>Ce point nimpose aucun matérialisme simpliste. Les infrastructures ne déterminent pas mécaniquement les institutions ; elles les conditionnent, les prolongent, les contredisent parfois. Les institutions produisent des infrastructures, mais les infrastructures configurent en retour les possibilités institutionnelles. Les idées orientent les constructions, mais les constructions stabilisent ou démentent les idées. Les régimes décident daménagements, mais les aménagements redistribuent les rapports de pouvoir que les régimes prétendent maîtriser.</p>
Face à ces structures stabilisatrices se déploient des forces dynamiques que lon peut désigner sous le terme de cratialité.
<p>Cest cette circularité que les classifications ordinaires ne nomment pas. Les termes disponibles décrivent des formes de commandement, des principes de légitimation, des doctrines, des procédures. Ils ne nomment pas encore le plan où la politique devient capacité construite : là où les ressources sont prélevées, affectées, transformées en ouvrages, en institutions, en réseaux, en dispositifs ; là où des promesses deviennent des équipements, des droits deviennent des accès, des décisions deviennent des mondes habitables ou inhabitables.</p>
La cratialité renvoie à lensemble des dynamiques qui traversent les sociétés : flux économiques, innovations technologiques, transformations démographiques, conflits sociaux, mutations culturelles, pressions écologiques ou recompositions géopolitiques.
<p>Faute de nom propre, ce plan reste dispersé entre plusieurs vocabulaires : infrastructure, institution, dispositif, administration, urbanisme, architecture, technique, équipement, service public. Chacun éclaire une part du phénomène ; aucun ne permet den saisir lunité politique. “Infrastructure” insiste sur le support matériel ; “institution”, sur la stabilisation normative ; “dispositif”, sur lagencement opératoire ; “architecture”, sur la forme construite ; “administration”, sur la gestion ; “urbanisme”, sur lorganisation spatiale. Or ce qui se joue ici traverse tous ces registres à la fois.</p>
Ces dynamiques exercent une pression constante sur les structures existantes. Elles déplacent les équilibres, modifient les rapports de force et introduisent de nouvelles tensions dans lorganisation sociale.
<p>Il faut donc atteindre une formulation plus précise. Non pour inventer un mot par goût du néologisme, mais parce que le lexique disponible disperse ce que lanalyse doit tenir ensemble : le pouvoir de faire advenir des conditions construites du commun, de bâtir, aménager, instituer, équiper, orienter lespace et les capacités, produire des seuils daccès, des formes dusage, des dépendances, des possibilités de circulation, dapprentissage, de soin, de protection et de transmission.</p>
Aucune société ne peut supprimer ces forces de transformation. Elles constituent au contraire la condition même du mouvement historique.
<h3 class="commencer-reveal-heading">Nommer le plan des conditions construites</h3>
La question centrale devient donc celle de leur régulation.
<p>À ce stade seulement, le terme peut apparaître. Larchicratie ne vient pas désigner un régime de plus, ni concurrencer la République, la démocratie, la bureaucratie ou la technocratie. Elle nomme le plan où les principes, les formes de pouvoir, les idéologies, les intérêts sociaux, les métiers, les ressources, les infrastructures et les institutions se nouent dans la production effective des conditions de vie collective.</p>
### Larchicration : la régulation des tensions
<p>Dans son sens originel le plus strict, larchicratie désigne le pouvoir de produire les conditions construites de lexistence commune.</p>
Cest ici quintervient la troisième dimension : larchicration.
<p>Elle ne se réduit ni à larchitecture, entendue comme art de concevoir des bâtiments, ni à linfrastructure, entendue comme support matériel dune société, ni à linstitution, entendue comme forme stabilisée de norme ou dorganisation. Elle traverse ces registres parce quelle vise le plan où construire, aménager, équiper, instituer et entretenir deviennent des opérations politiques de premier ordre.</p>
Larchicration désigne lensemble des mécanismes par lesquels un système social régule les tensions entre ses structures stabilisatrices et ses dynamiques de transformation.
<p>Son étymologie a ici une fonction de discernement. Archè renvoie au commencement, au principe, à ce qui ordonne et fonde ; kratos à la force agissante, à la capacité dexercer et de produire des effets. Le terme permet ainsi de tenir ensemble ce que les catégories précédentes dispersaient : la production de conditions fondatrices et leur puissance effective dorganisation.</p>
Elle ne supprime pas les tensions. Elle les organise.
<p>Ce qui est nommé nest donc ni seulement une origine, ni seulement une force, mais une puissance de configuration : faire advenir un monde dans lequel certaines actions deviennent possibles, probables, faciles ou légitimes, tandis que dautres deviennent coûteuses, marginales ou impraticables.</p>
Elle redistribue les contraintes, ajuste les équilibres, canalise les conflits, transforme certaines dynamiques et en ralentit dautres afin de maintenir la compatibilité globale du système.
<p>Larchicratie nomme la capacité à convertir une orientation politique, une décision collective, une allocation de ressources ou une rationalité technique en conditions durables dexistence. Elle ne se confond pas avec la souveraineté, qui dit qui décide en dernière instance ; elle demande ce que cette décision parvient à rendre possible, à bâtir, à maintenir, à transformer. Elle ne se confond pas avec la bureaucratie non plus, qui décrit ladministration réglée, impersonnelle et procédurale ; elle interroge ce que cette administration rend matériellement praticable ou impraticable. Elle ne se confond pas avec la technocratie, qui désigne le pouvoir des experts ; elle regarde ce que ces savoirs, une fois inscrits dans des ouvrages, des institutions et des dispositifs, font au monde commun.</p>
Les dispositifs fiscaux, les mécanismes juridiques, les infrastructures de circulation, les systèmes dinformation, les architectures techniques ou les instruments statistiques peuvent ainsi être compris comme autant dopérateurs darchicration : ils participent à la redistribution permanente des tensions collectives.
<p>Sa nécessité tient à ce quaucune de ces catégories ne nomme exactement ce plan : faire tenir un monde par des conditions construites.</p>
### Larchicratie comme dynamique sociale globale
<p>Le sens originel du terme est donc fortement matériel, sans être matérialiste au sens réducteur. Il ne dit pas que les constructions déterminent mécaniquement les formes politiques ; il dit que les formes politiques nexistent jamais sans constructions, équipements, médiations matérielles et organisations. Une constitution exige des tribunaux, des bureaux, des archives, des agents, des procédures, des espaces publics, des moyens de publication et des possibilités daccès. Une école républicaine suppose bâtiments, maîtres, programmes, horaires, manuels, examens, inspections, budgets. Un droit au soin dépend de lits, de personnels, de routes, de médicaments, de systèmes dinformation, de financements, de files dattente et de critères de priorité.</p>
Larchicratie est lorganisation sociale de cette dynamique tripartite.
<h3 class="commencer-reveal-heading">Apparition du terme archicratie</h3>
Elle peut être comprise comme lensemble des architectures par lesquelles une société articule :
<p>Il importe toutefois de ne pas surinterpréter cette première apparition. Larchicratie ne désigne pas encore le paradigme ultérieur dans toute son extension, ni la théorie complète de la régulation qui articulera plus tard fondement, opération et épreuve. Elle apparaît dabord comme découverte dune puissance constitutive : le pouvoir de bâtir les conditions effectives du commun.</p>
- ses structures stabilisatrices (arcalité),
<p>Sa force tient précisément à cette trajectoire. Née dun constat matériel, elle porte déjà une question plus vaste : comment un ordre devient-il effectif ? Comment une société transforme-t-elle ses principes en conditions ? Comment une orientation politique devient-elle monde praticable ? Comment ce qui est décidé se convertit-il en accès, en murs, en routes, en procédures, en seuils, en capacités ?</p>
- ses forces de transformation (cratialité),
<p>Larchicratie rend visible ce que les catégories précédentes laissaient dispersé : le passage des régimes aux conditions, des doctrines aux équipements, des droits aux accès, des décisions aux milieux, des institutions aux formes dexistence. Elle ne remplace ni la République, ni la démocratie, ni la bureaucratie, ni la technocratie, ni linstitution ; elle les oblige à répondre à une question plus élémentaire : quel monde rendent-elles effectivement habitable ?</p>
- et les mécanismes de régulation qui les relient (archicration).
Cette articulation constitue le niveau fondamental par lequel les sociétés maintiennent leur co-viabilité.
Lorsque cette articulation fonctionne, les tensions collectives demeurent compatibles avec la continuité sociale. Les transformations peuvent être absorbées, redistribuées ou intégrées dans lordre existant.
Lorsque cette articulation se fragilise, les tensions peuvent saccumuler, se déplacer brutalement ou dépasser les capacités de régulation du système. Les crises politiques, économiques ou institutionnelles apparaissent alors comme des moments où les architectures archicratiques deviennent incapables de maintenir léquilibre dynamique entre structures et forces.
Dans cette perspective, larchicratie ne désigne pas une institution particulière. Elle désigne une propriété structurelle des sociétés complexes : la manière dont elles organisent la régulation permanente des tensions qui les traversent.
Toute société possède ainsi une forme darchicratie. Mais les modalités de cette régulation varient profondément selon les contextes historiques, les configurations institutionnelles et les architectures techniques disponibles.
Cest pourquoi larchicratie doit également être pensée comme un phénomène historique.
Les sociétés ne cessent de transformer les architectures par lesquelles elles assurent leur propre tenue.
Cest à lanalyse de ces transformations que doit désormais se consacrer lexamen de larchicratie dans lhistoire des sociétés humaines.
## IV — Larchicratie dans lhistoire des sociétés humaines
Si larchicratie articule arcalité, cratialité et archicration, elle ne peut être réduite aux sociétés contemporaines. Elle constitue une dimension structurelle de toute organisation sociale complexe.
Lhistoire des sociétés humaines peut être relue comme une succession de configurations entre structures stabilisatrices, dynamiques de transformation et mécanismes de régulation.
Dans toute société, une arcalité se met en place : un ensemble de structures relativement durables qui stabilisent lordre collectif. Ces structures peuvent prendre la forme dinstitutions politiques, de systèmes juridiques, de normes religieuses, dinfrastructures matérielles ou dorganisations administratives. Elles définissent le cadre dans lequel les interactions sociales peuvent se déployer.
Mais ces structures ne sont jamais immobiles. Elles sont constamment traversées par des forces dynamiques — économiques, techniques, démographiques ou culturelles — qui exercent une pression sur les formes établies. Ces forces constituent la cratialité des sociétés : lensemble des dynamiques qui déplacent les équilibres, introduisent de nouvelles tensions et transforment les conditions de lexistence collective.
Lhistoire sociale peut ainsi être comprise comme une tension permanente entre arcalité et cratialité.
Cependant, cette tension ne conduit pas nécessairement à la rupture. Les sociétés développent des dispositifs capables dabsorber, de redistribuer ou de transformer ces tensions. Ces dispositifs constituent larchicration : lensemble des mécanismes par lesquels un système social régule les dynamiques qui le traversent afin de maintenir sa co-viabilité.
Dans les sociétés anciennes, larchicration repose largement sur des dispositifs symboliques et institutionnels imbriqués : rites religieux, formes coutumières de droit, mécanismes de redistribution ou structures territoriales stabilisent les tensions produites par les dynamiques sociales.
Avec lémergence des États modernes, les architectures darchicration se transforment. Les administrations permanentes, les systèmes fiscaux, les dispositifs juridiques formalisés ou les infrastructures de circulation deviennent des opérateurs majeurs de régulation. Larchicration se matérialise alors dans des architectures administratives capables de traiter des flux de population, de ressources et dinformation à une échelle croissante.
Les sociétés industrielles du XIXᵉ et du XXᵉ siècle développent à leur tour de nouvelles architectures archicratiques. Les réseaux de transport, les systèmes énergétiques, les dispositifs statistiques, les institutions de protection sociale ou les instruments de planification économique participent à la régulation des tensions produites par lindustrialisation, lurbanisation et lexpansion des marchés.
Chaque grande transformation historique peut ainsi être interprétée comme une reconfiguration de larticulation entre arcalité, cratialité et archicration.
Lorsque les dynamiques de transformation excèdent la capacité des architectures régulatrices à redistribuer les tensions, les sociétés entrent dans des phases de crise. Les structures stabilisatrices deviennent incapables dabsorber les forces qui les traversent. De nouvelles architectures doivent alors émerger pour rétablir une forme de co-viabilité.
Dans cette perspective, lhistoire politique ne peut être comprise uniquement à partir de lévolution des régimes visibles. Elle doit également être pensée comme une histoire des architectures archicratiques par lesquelles les sociétés organisent la régulation de leurs tensions internes.
Or les transformations contemporaines semblent introduire une mutation particulière dans cette dynamique longue. Les dispositifs darchicration deviennent de plus en plus intégrés à des infrastructures techniques et informationnelles complexes, capables de traiter les tensions sociales à travers des systèmes de calcul, de mesure et dautomatisation.
Cette transformation ouvre la possibilité dun déplacement majeur dans lhistoire de larchicratie : le passage vers des configurations où les architectures régulatrices tendent à acquérir une autonomie croissante à légard des scènes politiques traditionnelles.
Cest cette mutation contemporaine quil convient désormais dexaminer.
## V — La mutation contemporaine : vers lautarchicratie
Si larchicratie correspond à larticulation entre arcalité, cratialité et archicration, alors chaque transformation majeure des infrastructures sociales modifie nécessairement la manière dont les sociétés régulent leurs tensions internes. Lhistoire des sociétés humaines peut ainsi être comprise comme une succession de configurations archicratiques distinctes, dans lesquelles les structures stabilisatrices, les dynamiques de transformation et les mécanismes de régulation sarticulent selon des équilibres variables.
Les sociétés contemporaines traversent aujourdhui une mutation profonde de cette articulation.
Depuis plusieurs décennies, les infrastructures techniques, informationnelles et organisationnelles qui structurent les sociétés connaissent une transformation dune ampleur inédite. Lexpansion des réseaux numériques, la circulation massive de données, la généralisation des dispositifs de mesure et lintégration croissante de systèmes de calcul dans les processus décisionnels modifient profondément les architectures par lesquelles les tensions collectives sont traitées.
Dans cette transformation, larcalité des sociétés se reconfigure. Aux structures institutionnelles et administratives héritées des sociétés industrielles sajoutent désormais des architectures techniques complexes : réseaux numériques globaux, infrastructures de données, systèmes algorithmiques, plateformes numériques, dispositifs automatisés de gestion et dévaluation. Ces infrastructures deviennent progressivement des éléments constitutifs de lenvironnement dans lequel se déploient les interactions sociales, économiques et politiques.
Parallèlement, la cratialité des sociétés sintensifie. Les flux économiques se mondialisent, les innovations technologiques se succèdent à un rythme accéléré, les transformations écologiques introduisent de nouvelles pressions systémiques, tandis que les dynamiques informationnelles multiplient les interactions et les rétroactions entre acteurs sociaux. Les sociétés contemporaines sont ainsi traversées par des dynamiques de transformation dune densité et dune vitesse inédites.
Dans ce contexte, la fonction darchicration — cest-à-dire la capacité des sociétés à réguler les tensions entre structures et dynamiques — tend à se reconfigurer profondément.
Traditionnellement, cette régulation reposait sur des dispositifs institutionnels relativement identifiables : administrations publiques, cadres juridiques, mécanismes politiques de décision, instruments économiques de régulation. Ces dispositifs rendaient visible, au moins partiellement, lorganisation de la régulation sociale. Ils pouvaient être contestés, modifiés ou réorientés à travers des procédures politiques ou institutionnelles.
Or les architectures contemporaines darchicration tendent de plus en plus à sinscrire dans des infrastructures techniques distribuées. Les dispositifs de calcul, les modèles algorithmiques, les systèmes dinformation et les architectures de données participent désormais directement à la régulation des flux économiques, des interactions sociales et des décisions collectives.
Les dispositifs statistiques orientent les politiques publiques. Les indicateurs de performance conditionnent lallocation des ressources. Les systèmes algorithmiques hiérarchisent laccès à linformation, organisent la visibilité des contenus ou anticipent certains comportements sociaux. Les plateformes numériques structurent des espaces entiers dinteraction économique et culturelle.
Ces dispositifs ne remplacent pas nécessairement les institutions politiques. Mais ils transforment profondément les conditions dans lesquelles celles-ci opèrent.
La régulation des tensions collectives ne disparaît pas ; elle se déplace.
Elle sinscrit dans des architectures techniques, dans des chaînes de calcul, dans des infrastructures informationnelles et dans des systèmes de mesure qui orientent les dynamiques sociales sans apparaître toujours comme des lieux explicites de décision politique.
Ce déplacement marque une mutation majeure de larchicration contemporaine.
À mesure que les architectures techniques deviennent plus complexes et plus intégrées, les mécanismes de régulation peuvent acquérir une forme dautonomie relative par rapport aux scènes politiques dans lesquelles ils pourraient être discutés, contestés ou transformés. Les dispositifs continuent dorganiser la régulation des tensions collectives, mais leur fonctionnement devient plus difficile à appréhender dans sa totalité.
Cest cette configuration particulière que lon peut désigner par le terme dautarchicratie.
Lautarchicratie ne correspond pas à la disparition de larchicratie. Elle désigne au contraire une situation dans laquelle les architectures régulatrices deviennent partiellement autonomes par rapport aux espaces publics de délibération et de décision. Les dispositifs techniques, administratifs ou informationnels continuent dorganiser la régulation sociale, mais ils tendent à se refermer sur leurs propres logiques opératoires.
Dans une configuration autarchicratique, les mécanismes darchicration demeurent actifs, mais leur intelligibilité collective se réduit. Les sociétés continuent de se réguler, mais elles perdent progressivement la capacité de comprendre, de discuter et dorienter les architectures qui assurent cette régulation.
La question politique contemporaine se déplace alors.
Elle ne concerne plus seulement la distribution de lautorité ou les formes institutionnelles du pouvoir. Elle concerne la capacité des sociétés à maintenir un rapport réflexif avec les architectures techniques, administratives et informationnelles qui structurent leur propre fonctionnement.
Elle concerne la possibilité de faire comparaître larchicratie dans lespace du débat public.
Car si larchicratie désigne les architectures par lesquelles les sociétés organisent leur propre tenue, lautarchicratie désigne la situation dans laquelle ces architectures cessent dêtre pleinement exposées à la délibération et à la transformation collective.
La mutation contemporaine de larchicratie ne se réduit donc pas à lexpansion des technologies numériques. Elle correspond à une transformation plus profonde de larticulation entre arcalité, cratialité et archicration.
Les sociétés contemporaines doivent désormais réguler des dynamiques dune intensité et dune complexité croissantes à travers des architectures techniques qui tendent elles-mêmes à devenir des environnements structurants de laction collective.
Dans ce contexte, la question centrale nest plus simplement celle du gouvernement des sociétés, mais celle de la maîtrise collective des architectures qui assurent leur co-viabilité.
Cest dans cet écart entre archicratie et autarchicratie que se joue aujourdhui une part décisive de lavenir politique des sociétés humaines.
## VI — Quatre scènes de gouvernance algorithmique
Les transformations contemporaines de larchicratie deviennent particulièrement visibles lorsquon observe certains dispositifs concrets qui participent désormais à la régulation quotidienne des sociétés. Loin de constituer de simples outils techniques, ces dispositifs sinsèrent dans les architectures darchicration et contribuent directement à la redistribution des tensions collectives.
Quatre scènes permettent den prendre la mesure.
### 1 — Le score administratif : gouverner par le calcul
Dans de nombreuses administrations contemporaines, la gestion des politiques publiques sappuie désormais sur des dispositifs algorithmiques capables de traiter des volumes considérables de données.
Les systèmes dévaluation du risque de fraude, les modèles prédictifs dattribution de prestations et les dispositifs de priorisation administrative agrègent une multitude dinformations : revenus déclarés, historique administratif, données territoriales, statistiques socio-économiques.
Dans plusieurs pays, ces systèmes participent directement à la sélection des dossiers à contrôler ou à la hiérarchisation des demandes.
Larcalité se manifeste ici dans larchitecture administrative et juridique de lÉtat social. La cratialité apparaît dans la pression exercée par la massification des demandes, les contraintes budgétaires et les exigences defficacité bureaucratique. Larchicration se déplace alors vers des dispositifs de calcul capables dorienter la gestion de ces tensions.
La décision administrative reste officiellement humaine, mais le calcul configure de plus en plus lespace dans lequel elle devient possible.
### 2 — La visibilité algorithmique : organiser lespace public informationnel
Une seconde scène archicratique apparaît dans lorganisation contemporaine de la visibilité publique.
Les grandes plateformes numériques — YouTube, TikTok, Facebook, X ou Instagram — reposent sur des systèmes de recommandation capables de sélectionner et de hiérarchiser les contenus à partir dune multitude de paramètres : interactions passées, signaux dengagement, comportements dutilisateurs comparables, prédictions dattention.
Ces systèmes décident en grande partie de ce qui devient visible ou invisible dans lespace informationnel.
Dans cette configuration, larcalité réside dans linfrastructure technique des plateformes et dans leurs architectures logicielles. La cratialité se manifeste dans la production massive de contenus et dans la compétition pour lattention collective. Larchicration se déploie dans les algorithmes qui redistribuent lattention sociale en hiérarchisant laccès à la visibilité.
Une part croissante de lespace public contemporain est ainsi structurée par des architectures de calcul qui orientent la circulation des informations et la formation des opinions.
### 3 — La régulation automatisée des flux économiques
Une troisième scène archicratique apparaît dans la gestion algorithmique des flux économiques.
Les plateformes de transport, les systèmes logistiques mondiaux, les marchés financiers automatisés ou les dispositifs de tarification dynamique reposent désormais sur des infrastructures capables dajuster en temps réel lallocation de ressources.
Les prix peuvent varier en fonction de la demande instantanée. Les trajets sont redistribués entre conducteurs et passagers par des algorithmes doptimisation. Les marchés financiers voient circuler des flux de capitaux pilotés par des programmes capables dexécuter des milliers dopérations par seconde.
Dans ces architectures, larcalité correspond aux infrastructures économiques et logistiques qui structurent les réseaux de production et déchange. La cratialité se manifeste dans les fluctuations permanentes de loffre, de la demande et de la concurrence. Larchicration se déploie dans les systèmes de calcul qui redistribuent en continu ces tensions.
La régulation économique devient ainsi partiellement inscrite dans des architectures techniques capables dorganiser la circulation des flux à une vitesse et à une échelle inédites.
### 4 — Larchicration sécuritaire : Palantir et la guerre algorithmique
Une quatrième scène archicratique apparaît dans le domaine de la sécurité et de la guerre.
Des systèmes danalyse de données massives comme ceux développés par la société **Palantir** permettent aujourdhui dagréger dimmenses volumes dinformations provenant de sources multiples : bases administratives, données de surveillance, communications numériques, informations géographiques ou flux logistiques.
Ces plateformes sont utilisées par des agences de renseignement, des forces de police ou des armées pour cartographier des réseaux, identifier des corrélations invisibles à lœil humain et orienter des opérations de sécurité.
Dans le même temps, le développement des **armes autonomes** et des systèmes militaires pilotés par intelligence artificielle introduit la possibilité dune régulation partiellement automatisée de la violence organisée.
Dans ces configurations, larcalité correspond aux infrastructures sécuritaires et militaires qui structurent les appareils dÉtat. La cratialité apparaît dans la complexité croissante des menaces, des conflits asymétriques et des flux dinformation stratégiques. Larchicration se déploie dans des architectures de calcul capables dintégrer et danalyser des données à grande échelle afin dorienter les décisions opérationnelles.
Larchicration entre ainsi dans un domaine où les enjeux ne concernent plus seulement lorganisation de léconomie ou de linformation, mais la gestion même de la violence collective.
### Larchicratie à lère des architectures de calcul
Ces quatre scènes ne constituent pas des anomalies isolées. Elles illustrent une transformation structurelle des architectures archicratiques contemporaines.
La régulation des tensions sociales, économiques, informationnelles et sécuritaires sinscrit de plus en plus dans des infrastructures techniques capables de traiter des volumes dinformation considérables et de redistribuer en temps réel les équilibres collectifs.
Autrement dit, larchicration tend désormais à se déployer au cœur même des architectures de calcul qui structurent les sociétés contemporaines.
Cest précisément ce déplacement qui ouvre la possibilité dune dérive autarchicratique : la situation dans laquelle les architectures de régulation deviennent progressivement moins visibles, moins intelligibles et moins contestables pour les sociétés quelles organisent.
## VII — Ce que change le concept darchicratie
Introduire le concept darchicratie ne consiste pas simplement à ajouter une notion supplémentaire au vocabulaire de la théorie politique. Cela implique un déplacement décisif : un changement de perspective sur ce qui fait réellement tenir les sociétés humaines.
La tradition politique moderne sest principalement construite autour de la question du pouvoir : qui gouverne, qui décide, selon quelles règles et au nom de quelle légitimité. Cette perspective a permis de penser les institutions politiques, les formes de la souveraineté, les mécanismes de la représentation et les conditions de la légitimité démocratique.
Mais elle repose implicitement sur une hypothèse rarement interrogée : celle selon laquelle la stabilité des sociétés dépend principalement de leurs institutions politiques visibles.
Or lanalyse archicratique montre que cette hypothèse est insuffisante.
Les sociétés ne tiennent pas uniquement par leurs régimes politiques. Elles tiennent par lensemble des architectures matérielles, techniques, normatives et organisationnelles qui rendent possible la régulation des tensions collectives.
Le concept darchicratie permet ainsi de déplacer la focale de la théorie politique : du pouvoir visible vers les architectures de régulation qui structurent la co-viabilité sociale.
Ce déplacement produit plusieurs conséquences importantes.
### 1 — Déplacer lobjet de la théorie politique
La première conséquence concerne lobjet même de la théorie politique.
Traditionnellement, celle-ci sintéresse aux institutions qui exercent explicitement le pouvoir : gouvernements, parlements, administrations, tribunaux, partis politiques.
Lapproche archicratique invite à élargir ce champ danalyse.
Les infrastructures techniques, les architectures informationnelles, les dispositifs statistiques, les systèmes de mesure ou les plateformes numériques deviennent également des objets pleinement politiques, dans la mesure où ils participent directement à la régulation des tensions collectives.
Autrement dit, la politique ne se limite plus aux institutions qui gouvernent. Elle inclut les architectures qui organisent les conditions mêmes de la gouvernabilité des sociétés.
### 2 — Repenser la crise politique contemporaine
La seconde conséquence concerne linterprétation des crises politiques contemporaines.
Les analyses dominantes expliquent souvent ces crises par un déficit de représentation, une perte de confiance dans les institutions ou une fragmentation de lespace public.
Ces facteurs sont réels. Mais lanalyse archicratique suggère quils ne suffisent pas à expliquer la situation actuelle.
Les crises contemporaines peuvent également être interprétées comme des crises darchicration : des situations dans lesquelles les architectures régulatrices existantes peinent à absorber les tensions produites par les transformations économiques, technologiques et écologiques.
Lorsque larticulation entre arcalité, cratialité et archicration se fragilise, les sociétés peuvent connaître des phases dinstabilité institutionnelle, de polarisation sociale ou de désorientation politique.
Les tensions ne disparaissent pas ; elles deviennent simplement plus difficiles à réguler dans les architectures existantes.
### 3 — Comprendre les transformations du pouvoir
La troisième conséquence concerne la nature même du pouvoir dans les sociétés contemporaines.
Dans la perspective classique, le pouvoir est principalement associé à la capacité de prendre des décisions contraignantes : voter une loi, imposer une règle, exercer une autorité.
Lanalyse archicratique montre quune part croissante du pouvoir contemporain sexerce à travers la conception et lorganisation des architectures régulatrices.
Définir les indicateurs qui orientent laction publique, concevoir les systèmes dinformation qui structurent les flux administratifs, paramétrer les algorithmes qui redistribuent la visibilité ou organiser les infrastructures qui pilotent les flux économiques constitue aujourdhui une forme déterminante dexercice du pouvoir.
Le pouvoir ne disparaît pas ; il se déplace vers les architectures qui organisent les conditions mêmes de laction collective.
### 4 — Réouvrir la question politique
Enfin, lintroduction du concept darchicratie permet de reformuler la question politique elle-même.
Si les sociétés se maintiennent par des architectures de régulation qui structurent leurs dynamiques internes, alors la question politique ne peut se limiter à la désignation des gouvernants ou à la distribution de lautorité.
Elle concerne également la capacité collective à comprendre, à discuter et à orienter les architectures qui assurent la co-viabilité sociale.
Autrement dit, la politique devient aussi une question darchitecture.
Il ne sagit plus seulement de décider qui gouverne, mais de déterminer comment sont conçues, organisées et transformées les infrastructures matérielles, techniques et institutionnelles qui structurent la régulation des tensions collectives.
### Lenjeu archicratique
Dans cette perspective, lenjeu central des sociétés contemporaines apparaît sous un jour nouveau.
Il ne sagit pas uniquement de préserver des institutions démocratiques formelles, mais de maintenir la capacité collective à faire comparaître les architectures régulatrices dans lespace du débat public.
Car si larchicratie désigne les architectures par lesquelles les sociétés organisent leur propre tenue, lautarchicratie désigne la situation dans laquelle ces architectures cessent dêtre pleinement intelligibles et transformables pour les sociétés quelles structurent.
La question politique contemporaine peut alors se formuler de manière simple :
les sociétés humaines seront-elles capables de maintenir une maîtrise collective des architectures qui assurent leur co-viabilité, ou entreront-elles dans une phase où ces architectures fonctionneront de manière de plus en plus autonome ?
Cest dans cet écart entre archicratie et autarchicratie que se joue aujourdhui une part décisive de lavenir politique du monde contemporain.
## VIII — Conclusion
### Faire comparaître les architectures qui nous gouvernent
Les sociétés humaines ont longtemps pensé la politique à travers la question du pouvoir visible : qui gouverne, selon quelles règles et au nom de quelle légitimité. Cette interrogation demeure essentielle. Mais elle ne suffit plus à rendre intelligible la manière dont les sociétés contemporaines fonctionnent réellement.
Car les sociétés ne tiennent pas uniquement par leurs institutions politiques explicites. Elles tiennent par les architectures matérielles, techniques, normatives et organisationnelles qui organisent la régulation permanente des tensions collectives. Ces architectures structurent la circulation des ressources, orientent les dynamiques économiques, redistribuent lattention informationnelle et participent à la gestion des risques sociaux ou sécuritaires.
Cest cet ensemble que désigne le concept darchicratie.
Larchicratie ne remplace pas les institutions politiques ; elle en constitue le soubassement opérationnel. Elle correspond au niveau où sarticulent les structures stabilisatrices, les dynamiques de transformation et les mécanismes de régulation qui permettent aux sociétés de maintenir leur co-viabilité.
Lanalyse archicratique invite ainsi à déplacer le regard. Elle conduit à considérer que les infrastructures techniques, les dispositifs administratifs, les architectures informationnelles ou les systèmes de calcul participent désormais directement à lorganisation du politique.
Dans les sociétés contemporaines, une part croissante de la régulation collective sinscrit dans ces architectures. Les indicateurs orientent les politiques publiques, les algorithmes redistribuent la visibilité informationnelle, les plateformes structurent les interactions économiques et les systèmes de calcul participent à la gestion des flux sociaux ou sécuritaires.
La politique ne disparaît pas dans ces transformations ; elle change de lieu.
Elle se déploie de plus en plus dans la conception et lorganisation des architectures qui structurent la régulation des sociétés.
Mais ce déplacement ouvre également une tension nouvelle.
Car à mesure que les architectures archicratiques deviennent plus complexes, plus techniques et plus intégrées à des infrastructures globales de calcul, elles peuvent progressivement séloigner des espaces où elles pourraient être comprises, discutées et transformées collectivement.
Cest dans cette possibilité que réside le risque autarchicratique.
Une société entre dans une configuration autarchicratique lorsque les architectures qui assurent sa régulation continuent de fonctionner tout en devenant de moins en moins intelligibles pour ceux quelles gouvernent. Les dispositifs demeurent efficaces, mais leur logique échappe progressivement à la délibération collective.
La question politique centrale du XXIᵉ siècle pourrait bien se situer précisément à cet endroit.
Il ne sagit plus seulement de savoir qui gouverne, mais de déterminer si les sociétés humaines demeureront capables de comprendre, dorienter et de transformer les architectures qui organisent leur propre tenue.
Autrement dit : les architectures archicratiques continueront-elles de comparaître dans lespace du débat collectif, ou entreront-elles dans une phase dautonomisation où la régulation sociale se déploiera à travers des dispositifs de plus en plus opaques ?
La théorie de larchicratie ne prétend pas résoudre cette tension. Elle vise dabord à la rendre visible.
Nommer une réalité est souvent la première condition pour agir sur elle.
En identifiant les architectures par lesquelles les sociétés organisent leur co-viabilité, le concept darchicratie ouvre un nouveau champ danalyse pour la théorie politique contemporaine. Il invite à penser ensemble les institutions visibles du pouvoir et les infrastructures plus profondes qui rendent leur fonctionnement possible.
Comprendre larchicratie, cest ainsi reconnaître que la politique ne se joue pas seulement dans les lieux où lautorité est proclamée, mais aussi dans les architectures où la régulation collective sopère silencieusement.
Faire comparaître ces architectures devient alors lune des tâches essentielles de la pensée politique contemporaine.
Car cest dans leur capacité à comprendre et à orienter les architectures qui les gouvernent que se joue une part décisive de leur avenir.
</div>
</div>

View File

@@ -0,0 +1,98 @@
---
title: "Agencement machinique"
term: "Agencement machinique"
aliases: ["Agencement", "Théorie des agencements"]
urlAliases: ["agencement-machinique"]
mobilizedAuthors: ["Gilles Deleuze", "Félix Guattari"]
comparisonTraditions: ["post-structuralisme", "schizoanalyse", "ontologie des agencements"]
edition: "glossaire"
status: "referentiel"
version: "0.2.0"
definitionShort: "Paradigme de régulation fondé sur des agencements hétérogènes de flux, de machines, de signes, de corps et de dispositifs, sans centre souverain unique ni forme close préalable."
concepts: ["agencement-machinique", "agencement", "machine", "flux", "dispositif", "tension", "heterogeneite"]
links: []
kind: "paradigme"
family: "paradigme"
domain: "theorie"
level: "avance"
related: ["archicratie", "cratialite", "archicration", "tension", "co-viabilite", "theorie-de-lacteur-reseau", "transduction-et-individuation", "configuration-et-interdependance"]
opposedTo: ["decisionnisme-souverain", "domination-legale-rationnelle"]
seeAlso: ["pharmacologie-technique", "preemption-algorithmique", "technodiversite-et-cosmotechnie"]
navigation:
primaryNext: "cratialite"
primaryReason: "La cratialité permet de traduire lintuition des agencements en termes de chaînes opératoires, de prises effectives et de transformations régulatrices."
paths:
understand: ["cratialite", "archicration", "co-viabilite"]
deepen: ["theorie-de-lacteur-reseau", "transduction-et-individuation", "configuration-et-interdependance"]
compare: ["decisionnisme-souverain", "domination-legale-rationnelle", "cybernetique"]
apply: ["audit-archicratique", "gouvernementalite-algorithmique"]
---
Lagencement machinique désigne ici un paradigme de régulation fondé sur des compositions hétérogènes de corps, signes, flux, machines, institutions et affects, sans centre souverain unique ni forme close préalable.
## Ancrage théorique minimal
Chez Deleuze et Guattari, lagencement ne se réduit pas à un simple assemblage déléments déjà constitués. Il renvoie à une composition opératoire dans laquelle des corps, des signes, des flux, des affects, des institutions, des techniques, des énoncés et des pratiques se connectent, se stabilisent provisoirement et produisent des effets réels.
Le terme de « machine » ne doit donc pas être entendu au sens strictement technique ou mécanique. Une machine peut être sociale, sémiotique, désirante, institutionnelle, économique ou politique. Elle nomme moins un objet quun mode de production de relations, de prises, de contraintes, de circulations et de transformations.
Dans *Mille plateaux*, Deleuze et Guattari distinguent notamment lagencement machinique de corps et lagencement collectif dénonciation. Le premier concerne les compositions matérielles, corporelles, techniques et pratiques ; le second concerne les régimes de signes, de paroles, de catégories et dénoncés qui rendent ces compositions exprimables, transmissibles ou gouvernables.
Lintérêt du concept tient donc à ce quil permet de penser une régulation sans la réduire à un centre souverain, à une norme unique, à une intention subjective ou à une institution dominante. Une régulation peut émerger dun branchement hétérogène entre dispositifs techniques, habitudes incorporées, langages administratifs, affects collectifs, protocoles, infrastructures, classements et pratiques ordinaires.
Lusage archicratique du concept retient cette puissance descriptive, mais la déplace vers une question spécifique : comment ces prises composées deviennent-elles visibles, imputables, discutables et révisables ? Autrement dit, lagencement machinique permet de comprendre comment une cratialité distribuée opère ; larchicration demande à quelles conditions cette cratialité peut comparaître sur une scène dépreuve.
## Distinction
Lagencement machinique ne se confond ni avec lidée vague de réseau ni avec une pure horizontalité.
Il met en jeu une logique de composition dans laquelle des éléments hétérogènes se connectent de manière productive et transforment les conditions mêmes de la régulation. La machine y désigne donc une puissance de composition plutôt quun simple objet technique.
## Fonction dans le paysage théorique
Ce paradigme permet de penser :
- des compositions régulatrices décentrées ;
- les articulations entre technique, langage, institutions et affects ;
- les stabilisations locales sans fondation unitaire ;
- les lignes de fuite, reconfigurations et reprises de lordre.
## Rapport à larchicratie
Larchicratie trouve dans lagencement machinique une ressource majeure pour penser des régulations non réductibles à lÉtat, au droit, à la norme centrale ou à ladministration classique.
Lagencement permet de comprendre comment une régulation peut émerger de branchements distribués : infrastructures techniques, chaînes institutionnelles, langages, affects, protocoles, automatismes, habitudes et dispositifs de capture.
Mais larchicratie introduit une exigence supplémentaire : elle ne demande pas seulement comment les agencements fonctionnent, mais où, comment et devant qui leurs effets peuvent comparaître.
Autrement dit, lagencement machinique éclaire puissamment la cratialité distribuée ; larchicration demande en plus la scène où cette cratialité devient exposable, contestable et transformable.
## Limite archicratique
Le gain deleuzo-guattarien est considérable : il permet de décrire des compositions hétérogènes, mobiles, décentrées et productives, là où les modèles classiques cherchent souvent un centre, une norme ou une institution principale.
Mais du point de vue archicratique, cette puissance descriptive laisse une difficulté ouverte. Un agencement peut produire des effets très réels tout en demeurant infra-scénique, diffus, non imputable ou difficilement adressable. Il peut expliquer comment une puissance circule sans toujours dire comment cette puissance peut être exposée, contestée, qualifiée ou transformée collectivement.
La question décisive devient alors : comment transformer une composition opératoire en scène dépreuve ?
Cest précisément là que larchicratie se distingue. Elle ne nie pas lagencement ; elle en reprend la puissance danalyse des compositions distribuées, mais elle ajoute une exigence de comparution. Une régulation ne suffit pas à fonctionner : elle doit pouvoir être rendue lisible, disputable, révisable et co-viabilisable.
Ainsi, lagencement machinique éclaire la cratialité distribuée ; larchicration cherche les conditions institutionnelles, symboliques et pratiques par lesquelles cette cratialité devient politiquement et collectivement traitable.
## Références minimales
- Gilles Deleuze et Félix Guattari, *LAnti-Œdipe. Capitalisme et schizophrénie 1*, 1972.
- Gilles Deleuze et Félix Guattari, *Mille plateaux. Capitalisme et schizophrénie 2*, 1980.
## Renvois
- [Théorie de lacteur-réseau](/glossaire/theorie-de-lacteur-reseau/)
- [Transduction et individuation](/glossaire/transduction-et-individuation/)
- [Configuration et interdépendance](/glossaire/configuration-et-interdependance/)
- [Pharmacologie technique](/glossaire/pharmacologie-technique/)
- [Préemption algorithmique](/glossaire/preemption-algorithmique/)
- [Technodiversité et cosmotechnie](/glossaire/technodiversite-et-cosmotechnie/)
- [Archicratie](/glossaire/archicratie/)
- [Archicration](/glossaire/archicration/)
- [Cratialité](/glossaire/cratialite/)
- [Tension](/glossaire/tension/)
- [Co-viabilité](/glossaire/co-viabilite/)

View File

@@ -0,0 +1,75 @@
---
title: "Arcalité"
term: "Arcalité"
aliases: []
edition: "glossaire"
status: "referentiel"
version: "0.1.0"
definitionShort: "Vecteur fondationnel et structurant de la régulation : ensemble des prises de légitimation, de stabilisation et de cadrage qui donnent forme et tenue à la vie collective."
concepts: ["arcalite", "archicratie", "cratialite", "archicration", "co-viabilite"]
links: []
kind: "concept"
family: "concept-fondamental"
domain: "transversal"
level: "fondamental"
related: ["archicratie", "cratialite", "archicration", "co-viabilite", "tension", "domination-legale-rationnelle", "fait-social-total"]
opposedTo: ["autarchicratie"]
seeAlso: ["obliteration-archicratique", "hyperarcalite", "archicrations-scripturo-normatives"]
navigation:
primaryNext: "cratialite"
primaryReason: "Après le vecteur fondationnel, la cratialité permet de comprendre comment une régulation devient effective, opératoire et transformatrice."
paths:
understand: ["cratialite", "archicration", "co-viabilite"]
deepen: ["hyperarcalite", "archicrations-scripturo-normatives", "domination-legale-rationnelle"]
compare: ["autarchicratie", "fait-social-total", "cratialite"]
apply: ["audit-archicratique", "cartographie-des-scenes-manquantes"]
---
Larcalité désigne le vecteur fondationnel et structurant de toute régulation.
Elle correspond à lensemble des prises de légitimation, de stabilisation et de cadrage par lesquelles un ordre collectif se donne une forme, sinscrit dans une durée et rend certaines actions possibles tandis que dautres deviennent plus difficiles ou illégitimes.
Larcalité peut prendre une grande diversité de formes : institutionnelles, juridiques, scripturales, symboliques, cosmologiques, théologiques, techniques, administratives ou épistémiques.
Elle ne se réduit donc ni à une institution isolée ni à un simple cadre juridique. Elle désigne plus largement tout ce qui, dans une société, fonde, stabilise, ordonne et donne tenue à la vie collective.
## Distinction
Larcalité ne doit pas être pensée comme un bloc unique et homogène.
Il existe toujours une pluralité darcalités effectives, parfois complémentaires, parfois concurrentes, parfois contradictoires. Une société peut ainsi articuler des arcalités juridiques, administratives, techniques, rituelles, économiques ou symboliques dont les logiques ne coïncident pas nécessairement.
Larcalité ne se confond pas non plus avec la puissance dagir elle-même. Là où larcalité stabilise et fonde, la [Cratialité](/glossaire/cratialite/) met en mouvement, transforme, intensifie ou redistribue.
## Fonction dans le paradigme
Dans la théorie de l[Archicratie](/glossaire/archicratie/), larcalité constitue lun des trois vecteurs fondamentaux de la dynamique régulatrice :
- larcalité : fondation et structuration ;
- la cratialité : effectuation et transformation ;
- larchicration : régulation et comparution.
Larcalité définit les formes relativement durables dans lesquelles les dynamiques sociales peuvent se déployer et dans lesquelles les [Tensions](/glossaire/tension/) peuvent être absorbées, redistribuées ou transformées.
## Pathologies possibles
On parlera de pathologie arcale lorsque larcalité se rigidifie au point de ne plus pouvoir intégrer les transformations qui affectent la société. L[Hyperarcalité](/glossaire/hyperarcalite/) en constitue une forme accentuée.
Ses formes pathologiques incluent notamment :
- la rigidification institutionnelle ;
- la fermeture dogmatique ;
- linertie bureaucratique ;
- la sacralisation des cadres existants ;
- lincapacité à se laisser réviser.
Dans ces cas, les structures cessent de soutenir la [Co-viabilité](/glossaire/co-viabilite/) et peuvent au contraire amplifier les blocages du système social.
## Renvois
- [Archicratie](/glossaire/archicratie/)
- [Cratialité](/glossaire/cratialite/)
- [Archicration](/glossaire/archicration/)
- [Co-viabilité](/glossaire/co-viabilite/)
- [Tension](/glossaire/tension/)
- [Autarchicratie](/glossaire/autarchicratie/)

View File

@@ -0,0 +1,91 @@
---
title: "Archéogenèse"
term: "Archéogenèse"
aliases: []
edition: "glossaire"
status: "referentiel"
version: "0.2.0"
definitionShort: "Analyse de la genèse longue des régimes de co-viabilité : processus par lequel émergent, se sédimentent, se transforment et se recomposent des prises fondationnelles, opératoires et régulatrices."
concepts: ["archeogenese", "emergence", "genese", "sedimentation", "seuil", "transfert", "arcalite", "cratialite", "archicration"]
links: []
kind: "concept"
family: "dynamique"
domain: "transversal"
level: "avance"
related: ["archicratie", "arcalite", "cratialite", "archicration", "meta-regime-archicratique", "regime-de-co-viabilite", "co-viabilisation", "meta-regime", "archicrations-proto-symboliques", "archicrations-differentielles-et-formes-hybrides"]
opposedTo: []
seeAlso: ["transduction-et-individuation"]
navigation:
primaryNext: "meta-regime-archicratique"
primaryReason: "Le méta-régime formalise les formes stabilisées issues des processus darchéogenèse."
paths:
understand: ["archicratie", "archicration", "co-viabilite"]
deepen: ["meta-regime-archicratique", "regime-de-co-viabilite", "co-viabilisation"]
compare: ["meta-regime", "archicrations-differentielles-et-formes-hybrides"]
apply: ["transduction-et-individuation", "configuration-et-interdependance"]
---
Larchéogenèse correspond à lanalyse de la genèse longue des régimes de co-viabilité : le processus par lequel émergent, se sédimentent, se transforment et se recomposent des prises fondationnelles, opératoires et régulatrices.
Elle ne renvoie ni à un commencement absolu ni à une origine mythique. Elle désigne le moment analytique où lon reconstruit les seuils, les tensions, les transferts et les stratifications par lesquels des formes encore dispersées de coordination, de légitimation, de contrainte, de transmission et de comparution commencent à sarticuler en un régime relativement tenable.
## Distinction
Larchéogenèse ne doit pas être confondue avec l[Archicratie](/glossaire/archicratie/).
Larchicratie constitue le cadre théorique général de la régulation co-viabilisante.
Larchéogenèse désigne le processus démergence, de transformation et de stratification de cette régulation dans la durée.
Elle ne doit pas non plus être réduite à une simple chronologie.
Une chronologie ordonne des événements dans le temps.
Larchéogenèse reconstruit des couches, des seuils, des recompositions et des transmissions partielles entre régimes.
Autrement dit :
- la chronologie décrit une succession ;
- larchéogenèse reconstruit une genèse structurale.
## Fonction dans le paradigme
Cette notion permet de penser comment un ordre collectif se constitue avant même de disposer dinstitutions pleinement stabilisées ou dun régime réflexif élaboré.
Larchéogenèse permet dobserver :
- lapparition de premières arcalités ;
- la distribution de premières chaînes de cratialité ;
- lesquisse de scènes où les tensions peuvent être prises en charge ;
- la manière dont des couches anciennes persistent, se déplacent ou se réactivent dans des régimes plus récents.
Elle rend ainsi pensable la formation historique des régimes de co-viabilité.
## Portée analytique
Lintérêt de cette notion est déviter deux erreurs :
- croire quun ordre social apparaît tout armé ;
- réduire son émergence à une simple accumulation de pouvoirs bruts ou à une téléologie linéaire.
Larchéogenèse oblige à analyser la co-formation des fondements, des dispositifs, des scènes et des tensions.
Elle montre aussi quun méta-régime nouveau nefface pas nécessairement les précédents : il peut les recoder, les inhiber, les subordonner ou les recombiner.
## Enjeu historique
Larchéogenèse permet de lire les régimes de régulation comme des formations historiques épaisses, faites de reprises, de ruptures, de sédimentations et de bifurcations.
Elle ouvre ainsi le passage entre la typologie des méta-régimes et leur historiographie comparée.
## Renvois
- [Archicratie](/glossaire/archicratie/)
- [Arcalité](/glossaire/arcalite/)
- [Cratialité](/glossaire/cratialite/)
- [Archicration](/glossaire/archicration/)
- [Méta-régime](/glossaire/meta-regime/)
- [Méta-régime archicratique](/glossaire/meta-regime-archicratique/)
- [Régime de co-viabilité](/glossaire/regime-de-co-viabilite/)
- [Co-viabilisation](/glossaire/co-viabilisation/)
- [Archicrations proto-symboliques](/glossaire/archicrations-proto-symboliques/)
- [Archicrations différentielles et formes hybrides](/glossaire/archicrations-differentielles-et-formes-hybrides/)
- [Transduction et individuation](/glossaire/transduction-et-individuation/)

View File

@@ -0,0 +1,86 @@
---
title: "Archicrate"
term: "Archicrate"
aliases: []
edition: "glossaire"
status: "referentiel"
version: "0.2.0"
definitionShort: "Figure individuelle, institutionnelle ou techno-organisationnelle qui concentre une capacité régulatrice décisive en articulant une arcalité identifiable, une cratialité effective et une position déterminante dans les scènes où cette puissance peut être exposée, disputée ou soustraite à lépreuve."
concepts: ["archicrate", "cratialite", "arcalite", "scene", "concentration", "regulation"]
links: []
kind: "figure"
family: "figure"
domain: "transversal"
level: "avance"
related: ["figures-archicratiques", "archicratie", "arcalite", "cratialite", "scene-darchicration", "autarchicratie", "hypercratialite", "hyperarcalite", "institution-invisible", "autarchicration"]
opposedTo: []
seeAlso: ["obliteration-archicratique", "scene-empechee"]
navigation:
paths:
understand: ["figures-archicratiques", "archicratique", "archicratistique"]
deepen: ["institution-invisible", "archidiagnostic", "monde-instituable"]
compare: ["hyperarcalite", "hypercratialite", "autarchicration"]
apply: ["scene-darchicration", "audit-archicratique", "cartographie-des-scenes-manquantes"]
---
Larchicrate désigne une figure — individuelle, institutionnelle ou techno-organisationnelle — qui concentre une capacité régulatrice décisive dans une configuration donnée. Il ne sagit pas nécessairement dun chef visible, dun souverain formel ou dun décideur unique, mais dun opérateur capable de structurer durablement les conditions dans lesquelles une régulation se fonde, seffectue et peut être mise à lépreuve.
La notion est donc analytiquement neutre à son niveau premier : elle sert à repérer une fonction de concentration régulatrice. Elle ouvre une analyse critique lorsque cette concentration affaiblit, filtre, capture ou neutralise les scènes où la puissance ainsi exercée pourrait comparaître.
## Distinction
Larchicrate ne se réduit ni au souverain classique, ni au chef visible, ni à lautorité formelle.
Une banque centrale, une grande plateforme numérique, une direction administrative, une agence de notation, une autorité religieuse, un dispositif algorithmique structurant ou un opérateur logistique peuvent jouer un rôle archicratique dès lors quils configurent durablement la régulation et occupent une position déterminante dans les conditions de son effectuation, de sa recevabilité ou de sa mise à lépreuve.
La notion désigne donc une **fonction de concentration régulatrice** plus quun statut juridique.
## Fonction dans le paradigme
Le concept darchicrate permet de repérer les figures à partir desquelles une capacité régulatrice se concentre.
Cette concentration peut sinscrire dans des configurations où la puissance reste exposée à des scènes dépreuve, ou au contraire dans des configurations où ces scènes sont réduites, déplacées, capturées ou empêchées.
La notion darchicrate ne préjuge donc pas du caractère viable ou non de la régulation : elle désigne le point de concentration à partir duquel cette question peut être posée.
Il sert à repérer les lieux où :
- une arcalité vient légitimer ou stabiliser une prise ;
- une cratialité permet dagir effectivement sur la configuration ;
- une scène dépreuve existe, se transforme, se fragilise ou se trouve soustraite à la contestation.
## Formes possibles
Selon les contextes, larchicrate peut prendre des formes très différentes :
- autorité monétaire ;
- plateforme numérique structurante ;
- organe dexpertise ;
- direction technico-administrative ;
- institution sanitaire ou éducative ;
- appareil normatif ou religieux ;
- opérateur logistique ou algorithmique.
Le concept nimpose donc aucune forme unique de domination. Il désigne la **concentration régulatrice** là où elle devient politiquement décisive.
## Enjeu politique
Penser larchicrate, cest identifier les figures à partir desquelles une architecture de régulation se concentre, soriente et produit des effets durables.
La question nest pas seulement : qui décide ?
Mais : qui configure la possibilité même de la décision, de sa recevabilité, de son effectuation et de sa contestation ?
Lenjeu critique apparaît lorsque cette fonction de concentration cesse dêtre exposable, contestable ou révisable.
## Renvois
- [Figures archicratiques](/glossaire/figures-archicratiques/)
- [Archicratie](/glossaire/archicratie/)
- [Arcalité](/glossaire/arcalite/)
- [Cratialité](/glossaire/cratialite/)
- [Scène darchicration](/glossaire/scene-darchicration/)
- [Hypercratialité](/glossaire/hypercratialite/)
- [Hyperarcalité](/glossaire/hyperarcalite/)
- [Institution invisible](/glossaire/institution-invisible/)
- [Autarchicratie](/glossaire/autarchicratie/)
- [Autarchicration](/glossaire/autarchicration/)

View File

@@ -4,11 +4,95 @@ term: "Archicratie"
aliases: ["Paradigme archicratique"]
edition: "glossaire"
status: "referentiel"
version: "0.0.1"
definitionShort: "Régime où linstance régulatrice est tenue dexposer ses prises, ses critères et ses scènes dépreuve."
concepts: ["archicratie"]
version: "0.1.0"
definitionShort: "Paradigme critique de la régulation destiné à examiner comment une configuration collective articule — ou échoue à articuler — ce qui la fonde, ce qui lopère et ce qui la met à lépreuve."
concepts: ["archicratie", "arcalite", "cratialite", "archicration", "co-viabilite", "tension"]
links: []
kind: "concept"
family: "concept-fondamental"
domain: "transversal"
level: "fondamental"
related: ["arcalite", "cratialite", "archicration", "co-viabilite", "tension"]
opposedTo: ["autarchicratie"]
seeAlso: ["scene-depreuve", "obliteration-archicratique", "coexistence-ontologique-et-necessite-regulatrice", "formes-de-vie-et-cadres-dhabitabilite", "egalisation-normative-et-differenciation-singuliere"]
navigation:
primaryNext: "arcalite"
primaryReason: "Commencer par larcalité permet dentrer dans le premier vecteur constitutif de toute architecture régulatrice."
paths:
understand: ["arcalite", "cratialite", "archicration", "co-viabilite", "tension"]
deepen: ["scene-depreuve", "regime-de-co-viabilite", "meta-regime-archicratique"]
compare: ["decisionnisme-souverain", "domination-legale-rationnelle", "gouvernance-des-communs"]
apply: ["audit-archicratique", "cartographie-des-scenes-manquantes", "journal-de-justification"]
---
Larchicratie désigne un paradigme critique de la régulation : une matrice de lecture destinée à examiner comment une configuration collective articule — ou échoue à articuler — ce qui la fonde, ce qui lopère et ce qui la met à lépreuve.
Définition longue (à enrichir).
Ici, on mettra la définition complète, les usages, les distinctions, et des renvois typés.
Elle ne se confond ni avec un régime politique particulier, ni avec une doctrine normative, ni avec un simple outil méthodologique. Elle constitue le niveau de lisibilité à partir duquel les architectures matérielles, techniques, normatives, symboliques et organisationnelles dune société peuvent être analysées selon leurs conditions de fondation, deffectuation, dexposition et de révision.
Elle ne correspond pas à une forme particulière de gouvernement. Elle renvoie au niveau plus profond où sarticulent les architectures matérielles, techniques, normatives, symboliques et organisationnelles qui permettent à une société de maintenir la continuité de son existence collective malgré les tensions qui la traversent.
Toute société humaine est travaillée par une multiplicité de dynamiques : transformations économiques, innovations techniques, conflits sociaux, mutations culturelles, pressions écologiques ou recompositions institutionnelles. Ces dynamiques produisent des tensions permanentes qui peuvent fragiliser lordre social.
La continuité dune société dépend alors de sa capacité à organiser un traitement durable de ces tensions. Ce traitement ne repose pas uniquement sur les institutions politiques visibles. Il sappuie sur un ensemble beaucoup plus large de dispositifs stabilisateurs, opératoires et régulateurs.
Cest cet ensemble articulé que le concept darchicratie cherche à rendre intelligible.
## Distinction
Larchicratie nest pas un régime politique parmi dautres. Elle ne désigne ni une constitution particulière, ni une doctrine explicite, ni une simple technique de gouvernement.
Elle ouvre le niveau danalyse à partir duquel on peut comprendre comment un ordre collectif tient, se transforme, se justifie, se dispute et se régule.
Elle ne doit donc pas être pensée comme un bloc homogène. Il existe au contraire une pluralité de formes archicratiques, selon les manières dont sy composent les prises de fondation, les chaînes deffectuation et les scènes dépreuve.
## Statut théorique
Larchicratie possède un statut pluriel, mais hiérarchisé.
Elle est dabord un paradigme critique de la régulation : elle permet de déplacer lanalyse politique depuis les régimes visibles vers les architectures qui rendent les régulations effectivement tenables.
Elle comporte ensuite une structure théorique interne, organisée autour de la triade arcalité, cratialité et archicration.
Elle fonctionne également comme une heuristique denquête : devant tout dispositif, elle conduit à demander ce qui fonde, ce qui opère, où se situe la scène dépreuve et si cette scène est réelle ou seulement figurée.
Elle possède enfin une portée herméneutique et ontologique limitée : elle permet dinterpréter les configurations sociales à partir de leur capacité de tenue, sans prétendre fournir une métaphysique générale du politique.
En ce sens, larchicratie nest pas seulement un concept descriptif. Elle est un opérateur de discernement de la tenue du social.
## Structure conceptuelle
La théorie archicratique distingue trois vecteurs fondamentaux présents dans toute organisation sociale complexe :
- l[Arcalité](/glossaire/arcalite/), qui désigne le vecteur fondationnel et structurant de la régulation ;
- la [Cratialité](/glossaire/cratialite/), qui désigne le vecteur opératoire, dynamique et transformateur ;
- l[Archicration](/glossaire/archicration/), qui désigne le vecteur régulateur par lequel les tensions entre structures et dynamiques sont organisées, exposées et rendues révisables.
Ces trois vecteurs nexistent jamais à létat pur. Ils prennent des formes multiples, situées, différentielles, parfois concurrentes ou antagonistes, et leur composition varie selon les sociétés, les époques et les régimes de régulation.
Larchicratie correspond à cette composition dynamique.
## Fonction dans le paradigme
Larchicratie permet de penser les sociétés non à partir de leurs seules formes institutionnelles visibles, mais à partir des architectures de régulation qui rendent possible leur tenue effective.
Elle déplace ainsi lanalyse politique :
- du régime affiché vers les architectures de régulation ;
- de la seule autorité visible vers les infrastructures qui organisent la vie collective ;
- de la simple domination vers la capacité à maintenir la [Co-viabilité](/glossaire/co-viabilite/) dun système traversé de [Tensions](/glossaire/tension/).
## Enjeu politique
Dans cette perspective, la question politique ne se limite pas à savoir qui gouverne. Elle concerne aussi la capacité collective à comprendre, discuter et orienter les architectures qui assurent la régulation des sociétés humaines.
Une société archicratique nest donc pas une société sans tensions. Cest une société capable de les traiter sans basculer dans la désagrégation ou dans la fermeture opaque de ses propres mécanismes régulateurs.
## Renvois
- [Arcalité](/glossaire/arcalite/)
- [Cratialité](/glossaire/cratialite/)
- [Archicration](/glossaire/archicration/)
- [Co-viabilité](/glossaire/co-viabilite/)
- [Tension](/glossaire/tension/)
- [Scène dépreuve](/glossaire/scene-depreuve/)
- [Autarchicratie](/glossaire/autarchicratie/)
- [Oblitération archicratique](/glossaire/obliteration-archicratique/)

View File

@@ -0,0 +1,79 @@
---
title: "Archicration oblitérée"
term: "Archicration oblitérée"
aliases: []
edition: "glossaire"
status: "referentiel"
version: "0.2.0"
definitionShort: "Situation dans laquelle larchicration continue dopérer, mais sous une forme devenue partiellement invisible, introuvable, indisputable ou soustraite aux scènes où elle pourrait être effectivement reprise."
concepts: ["archicration-obliteree", "archicration", "oblitération", "opacite", "hors-scene", "regulation"]
links: []
kind: "diagnostic"
family: "pathologie"
domain: "transversal"
level: "avance"
related: ["archicration", "obliteration-archicratique", "autarchicration", "autarchicratie", "scene-empechee", "scene-manquante", "hypotopie", "atopie", "desarchicration", "institution-invisible"]
opposedTo: ["scene-darchicration", "monde-instituable"]
seeAlso: ["hypercratialite", "hyperarcalite", "desarchicratisation"]
navigation:
primaryNext: "hypercratialite"
primaryReason: "Loblitération de la scène ouvre à une domination pure où la cratialité se déchaîne sans régulation."
---
Larchicration oblitérée désigne la situation dans laquelle larchicration continue dexister et de produire des effets, mais sous une forme devenue partiellement invisible, introuvable ou difficilement disputable.
La régulation ny a donc pas disparu. Elle agit encore, parfois avec une grande efficacité, mais sans accéder pleinement au statut dobjet visible de comparution.
## Distinction
Larchicration oblitérée ne se confond ni avec labsence totale de scène, ni avec lautarchicratie pleinement consolidée.
Elle désigne un état intermédiaire et souvent décisif :
- des formes dépreuve subsistent ;
- certaines scènes existent encore ;
- mais les prises décisives se déplacent, se compactent ou se dissimulent ;
- la révision devient plus difficile que la simple apparence de procédure ne le laisse croire.
Elle se situe ainsi entre larchicration encore praticable et la fermeture plus avancée de l[Autarchicratie](/glossaire/autarchicratie/).
## Fonction dans le paradigme
Cette notion permet de décrire des mondes où la régulation reste forte mais où la scène devient déficiente.
Il y a archicration oblitérée lorsque :
- la chaîne opératoire est trop compacte pour comparaître ;
- les critères décisifs demeurent hors de portée ;
- la scène est juridiquement ouverte mais matériellement pauvre ;
- la procédure existe mais ne permet plus datteindre les fondements et les seuils de décision ;
- lépreuve est reléguée dans des espaces techniques, managériaux ou experts peu accessibles.
## Rapport à loblitération archicratique
L[Oblitération archicratique](/glossaire/obliteration-archicratique/) désigne le processus général par lequel les architectures de régulation cessent dapparaître comme des constructions discutables.
Larchicration oblitérée en désigne une forme plus localisée ou plus processuelle : le moment où lépreuve nest pas encore totalement abolie, mais déjà gravement compromise.
## Portée analytique
Le concept est utile parce quil évite deux erreurs :
- croire quil ny a plus aucune scène dès quune scène devient faible ;
- croire quune scène visible suffit à garantir une archicration réelle.
Il permet de nommer les zones grises, les scènes appauvries, les procédures dont la fonction régulatrice subsiste sans pleine comparution.
## Renvois
- [Archicration](/glossaire/archicration/)
- [Oblitération archicratique](/glossaire/obliteration-archicratique/)
- [Autarchicration](/glossaire/autarchicration/)
- [Autarchicratie](/glossaire/autarchicratie/)
- [Scène empêchée](/glossaire/scene-empechee/)
- [Scène manquante](/glossaire/scene-manquante/)
- [Hypotopie](/glossaire/hypotopie/)
- [Atopie](/glossaire/atopie/)
- [Désarchicration](/glossaire/desarchicration/)
- [Institution invisible](/glossaire/institution-invisible/)
- [Monde instituable](/glossaire/monde-instituable/)

View File

@@ -0,0 +1,103 @@
---
title: "Archicration"
term: "Archicration"
aliases: []
edition: "glossaire"
status: "referentiel"
version: "0.2.0"
definitionShort: "Vecteur régulateur par lequel les tensions entre arcalités et cratialités sont mises en forme, exposées, redistribuées et rendues plus ou moins révisables dans des scènes, dispositifs et médiations déterminés."
concepts: ["archicration", "archicratie", "arcalite", "cratialite", "co-viabilite", "tension", "scene-depreuve", "scene-darchicration"]
links: []
kind: "concept"
family: "concept-fondamental"
domain: "transversal"
level: "fondamental"
related: ["archicratie", "arcalite", "cratialite", "co-viabilite", "tension", "scene-depreuve", "scene-darchicration"]
opposedTo: ["autarchicratie", "obliteration-archicratique"]
seeAlso: ["archicration-obliteree", "autarchicration", "desarchicration", "scene-manquante", "scene-empechee", "regulation-technique-et-legitimation-democratique", "souverainetes-territoriales-et-interdependances-globales", "memoire-symbolique-et-instantaneite-computationnelle"]
navigation:
primaryNext: "scene-depreuve"
primaryReason: "La scène dépreuve montre où larchicration devient concrètement visible, disputable et révisable."
paths:
understand: ["archicratie", "arcalite", "cratialite"]
deepen: ["scene-depreuve", "scene-darchicration", "co-viabilite"]
compare: ["autarchicratie", "obliteration-archicratique", "archicration-obliteree"]
apply: ["journal-de-justification", "audit-archicratique", "cartographie-des-scenes-manquantes"]
---
Larchicration désigne le vecteur régulateur par lequel les tensions entre arcalités et cratialités sont mises en forme, exposées, redistribuées et rendues plus ou moins révisables.
Elle correspond à lensemble des scènes, dispositifs, procédures, médiations, rythmes et objets à travers lesquels une société traite les écarts produits par ses propres fondements et ses propres chaînes deffectuation. Elle ne supprime pas les tensions ; elle les travaille, les met en rapport, les qualifie et les oriente.
## Distinction
Larchicration ne doit pas être confondue avec l[Arcalité](/glossaire/arcalite/) ni avec la [Cratialité](/glossaire/cratialite/).
- larcalité fonde, stabilise, cadre ;
- la cratialité opère, déploie, transforme ;
- larchicration règle leur rapport, en organisant les scènes où ce rapport devient praticable, disputable ou révisable.
Elle ne doit pas non plus être comprise comme nécessairement juste, démocratique ou émancipatrice. Il existe des archicrations hiérarchiques, rituelles, inquisitoriales, bureaucratiques, guerrières, sacrificielles, marchandes ou algorithmiques. Ce qui les définit nest pas leur valeur morale, mais le fait quelles donnent une forme régulatrice au traitement des tensions.
## Fonction dans le paradigme
Dans la théorie de l[Archicratie](/glossaire/archicratie/), larchicration constitue la dimension proprement régulatrice du triangle archicratique.
Elle rend possible :
- la comparution de certaines prises de pouvoir ;
- la mise en rapport entre fondements et opérations ;
- la redistribution des écarts devenus problématiques ;
- le maintien, même précaire, dune [Co-viabilité](/glossaire/co-viabilite/).
Sans archicration, les tensions ne disparaissent pas : elles saccumulent, se déplacent hors-scène ou sont traitées par simple opérativité nue.
## Scènes et médiations
Larchicration ne se réduit pas à une seule forme institutionnelle.
Elle peut prendre la forme :
- dune juridiction ;
- dune procédure contradictoire ;
- dun rituel de réparation ;
- dune scène délibérative ;
- dun protocole dinstruction ;
- dun dispositif documentaire ;
- dun format de saisine ou de recours ;
- dun espace hybride associant expertise, publicité et décision.
Ce qui compte, ce nest pas seulement quune scène existe, mais quelle permette réellement dexposer les prises dun ordre, den discuter les critères et den modifier au moins partiellement les effets.
## Pathologies
Larchicration se dégrade lorsquelle :
- devient purement décorative ;
- subsiste sans révisabilité réelle ;
- est déplacée dans des hypertopies fermées ;
- se fragmente au point de devenir introuvable ;
- ou laisse lopérativité se soustraire à la scène.
Cest alors quapparaissent des figures comme l[Archicration oblitérée](/glossaire/archicration-obliteree/), l[Autarchicration](/glossaire/autarchicration/) ou la [Désarchicration](/glossaire/desarchicration/).
## Enjeu politique
Lenjeu archicratique nest pas seulement de savoir sil existe du pouvoir, mais sil existe encore des formes où ce pouvoir puisse comparaître, être qualifié, contredit et reconfiguré.
Larchicration est le nom de cette exigence de mise en forme de lépreuve.
## Renvois
- [Archicratie](/glossaire/archicratie/)
- [Arcalité](/glossaire/arcalite/)
- [Cratialité](/glossaire/cratialite/)
- [Co-viabilité](/glossaire/co-viabilite/)
- [Tension](/glossaire/tension/)
- [Scène dépreuve](/glossaire/scene-depreuve/)
- [Scène darchicration](/glossaire/scene-darchicration/)
- [Archicration oblitérée](/glossaire/archicration-obliteree/)
- [Autarchicration](/glossaire/autarchicration/)
- [Désarchicration](/glossaire/desarchicration/)
- [Autarchicratie](/glossaire/autarchicratie/)
- [Oblitération archicratique](/glossaire/obliteration-archicratique/)

View File

@@ -0,0 +1,122 @@
---
title: "Archicrations différentielles et formes hybrides"
term: "Archicrations différentielles et formes hybrides"
aliases: ["Archicrations différentielles", "Formes hybrides de larchicration"]
urlAliases: []
mobilizedAuthors: ["Norbert Elias", "David Graeber", "Pierre Clastres", "Arnold Van Gennep", "Gilbert Rouget", "Charles Tilly", "Émile Durkheim", "Paulo Freire", "John Dewey"]
comparisonTraditions: ["anthropologie politique comparative", "sociologie processuelle", "pragmatisme démocratique"]
edition: "glossaire"
status: "referentiel"
version: "0.2.0"
definitionShort: "Configurations dans lesquelles les méta-régimes archicratiques se modulent, sinhibent, se fragmentent ou se combinent sans se stabiliser sous une forme unique."
concepts: ["archicrations-differentielles-et-formes-hybrides", "archicration", "hybridation", "modulation", "plasticite", "composition", "co-viabilite"]
links: []
kind: "topologie"
family: "meta-regime"
domain: "transversal"
level: "avance"
related: ["archicratie", "arcalite", "cratialite", "archicration", "co-viabilite", "scene-depreuve", "meta-regime-archicratique", "archeogenese", "regime-de-co-viabilite", "archicrations-normativo-politiques", "archicrations-marchandes", "archicrations-guerrieres"]
opposedTo: []
seeAlso: ["archicrations-epistemiques", "archicrations-esthetico-symboliques", "archicrations-techno-logistiques"]
navigation:
primaryNext: "co-viabilisation"
primaryReason: "Après lanalyse des formes hybrides, la co-viabilisation permet de comprendre comment ces compositions hétérogènes peuvent devenir effectivement tenables."
paths:
understand: ["meta-regime-archicratique", "regime-de-co-viabilite"]
deepen: ["configuration-et-interdependance", "transduction-et-individuation"]
compare: ["archicrations-marchandes", "archicrations-theologiques", "archicrations-techno-logistiques"]
apply: ["co-viabilisation", "regulation-morphogenetique-des-interdependances", "audit-archicratique"]
---
Les archicrations différentielles et formes hybrides désignent lensemble des configurations dans lesquelles les méta-régimes archicratiques ne se déploient ni dans la pureté formelle ni dans lisolement dune cohérence close.
Cette topologie de clôture typologique ne constitue pas un simple appendice secondaire. Elle désigne au contraire la zone méthodologiquement indispensable où la typologie est mise à lépreuve du réel : là où un régime se module, sinhibe, se fragmente, alterne ou se combine à dautres sans produire une synthèse stable.
## Principe régulateur
Aucune société historique ne déploie ses régimes dordre sous forme chimiquement pure.
Les formes effectives de co-viabilité sont le plus souvent :
- différentielles, lorsquun régime est activé de manière discontinue, inhibée, saisonnière, localisée ou partielle ;
- hybrides, lorsque plusieurs régimes sont co-présents, enchevêtrés ou articulés de manière pragmatique et souvent instable dans une même configuration.
Ces formes ne sont ni des résidus, ni des anomalies, ni des exceptions secondaires. Elles sont des formes structurantes de la régulation, parce quelles révèlent la plasticité concrète de larchicration.
## Archicrations différentielles
Les formes différentielles correspondent à des modulations internes de régimes déjà identifiés.
Elles peuvent prendre la forme :
- dune intériorisation psychique de la régulation ;
- dune alternance saisonnière, cyclique ou contextuelle ;
- dune inhibition volontaire du pouvoir ;
- dune transmission générationnelle ou initiatique ;
- dune activation locale, provisoire ou stratifiée dun régime dominant.
Dans tous ces cas, il ne sagit pas de nouveaux régimes autonomes, mais de variations internes qui rendent visible la souplesse morphologique de larchicratie.
## Formes hybrides
Les formes hybrides apparaissent lorsque plusieurs méta-régimes sont articulés dans une même configuration historique sans se fondre en une unité supérieure.
On peut ainsi rencontrer des agencements :
- coercitivo-capitalistes ;
- pédagogiques ;
- cérémoniels ;
- domestiques ;
- salarials ;
- éco-symboliques ;
- technico-juridiques ;
- transitoires ou instables.
Lhybridité ne dissout pas la typologie : elle en éprouve les seuils, les lisières, les recouvrements et les entrecroisements.
## Arcalité, cratialité, archicration
Cette topologie montre que larchicratie nest jamais une essence simple, mais une relation dynamique entre ses trois vecteurs constitutifs : arcalité, cratialité, archicration.
Dans les formes différentielles et hybrides :
- larcalité peut être diffuse, flottante, fragmentée ou composite ;
- la cratialité peut être empêchée, intermittente, distribuée, parasitaire ou renforcée par couplage ;
- larchicration peut se déplacer hors de la scène manifeste, sintérioriser, salterner, se superposer ou se reconfigurer selon les situations.
La régulation ny prend pas toujours la forme dun triangle équilibré. Elle peut devenir composition disjointe, agencement instable, superposition partielle ou montage régulatoire hétérogène.
## Portée archicratique
Cette fiche est décisive, parce quelle évite deux écueils :
- le réductionnisme, qui ramènerait toute régulation à la loi, à lÉtat ou à un régime unique ;
- le purisme typologique, qui refuserait de penser la régulation dès lors quelle ne sinscrit pas dans un méta-régime chimiquement stable.
Larchicration doit au contraire être pensée comme un opérateur de cohérence différenciée, capable de maintenir des compositions hétérogènes de régulation.
## Enjeu méthodologique
Cette topologie joue un rôle de charnière entre typologie et histoire.
Elle rappelle que les méta-régimes sont des formes-types nécessaires à lanalyse, mais que les régimes effectifs sont presque toujours stratifiés, composites, désajustés ou en transition.
Cest en ce sens quelle clôt et déborde la typologie : non comme un treizième régime plaqué artificiellement, mais comme lespace où la typologie accepte de se mesurer à la morphologie réelle des régimes de co-viabilité.
## Renvois
- [Archicratie](/glossaire/archicratie/)
- [Arcalité](/glossaire/arcalite/)
- [Cratialité](/glossaire/cratialite/)
- [Archicration](/glossaire/archicration/)
- [Co-viabilité](/glossaire/co-viabilite/)
- [Scène dépreuve](/glossaire/scene-depreuve/)
- [Méta-régime archicratique](/glossaire/meta-regime-archicratique/)
- [Régime de co-viabilité](/glossaire/regime-de-co-viabilite/)
- [Archéogenèse](/glossaire/archeogenese/)
- [Archicrations normativo-politiques](/glossaire/archicrations-normativo-politiques/)
- [Archicrations marchandes](/glossaire/archicrations-marchandes/)
- [Archicrations guerrières](/glossaire/archicrations-guerrieres/)
- [Archicrations épistémiques](/glossaire/archicrations-epistemiques/)
- [Archicrations esthético-symboliques](/glossaire/archicrations-esthetico-symboliques/)
- [Archicrations techno-logistiques](/glossaire/archicrations-techno-logistiques/)

View File

@@ -0,0 +1,116 @@
---
title: "Archicrations épistémiques"
term: "Archicrations épistémiques"
aliases: []
urlAliases: ["archicrations-epistemiques"]
mobilizedAuthors: ["Michel Foucault", "Thomas Kuhn", "Ludwik Fleck"]
comparisonTraditions: ["épistémologie historique", "histoire des sciences", "sociologie de la connaissance"]
edition: "glossaire"
status: "referentiel"
version: "0.2.0"
definitionShort: "Méta-régime de co-viabilité dans lequel la régulation collective repose sur la production, la validation, la hiérarchisation et linstitutionnalisation de régimes de vérité."
concepts: ["archicrations-epistemiques", "archicration", "savoir", "episteme", "paradigme", "verite", "expertise", "validation"]
links: []
kind: "topologie"
family: "meta-regime"
domain: "transversal"
level: "avance"
related: ["archicratie", "arcalite", "cratialite", "archicration", "co-viabilite", "gouvernementalite", "archicrations-historiographiques", "archicrations-esthetico-symboliques"]
opposedTo: []
seeAlso: ["cybernetique", "theorie-de-la-justification", "gouvernementalite-algorithmique", "regulation-technique-et-legitimation-democratique"]
navigation:
primaryNext: "archicrations-differentielles-et-formes-hybrides"
primaryReason: "Les formes différentielles émergent de la combinaison des régulations épistémiques avec dautres régimes."
paths:
understand: ["archicrations-historiographiques"]
deepen: ["archicrations-differentielles-et-formes-hybrides"]
compare: ["archicrations-theologiques", "archicrations-marchandes"]
apply: ["gouvernementalite", "pensee-complexe"]
---
On appelle archicrations épistémiques les configurations de co-viabilité dans lequel la régulation collective sappuie sur la production, la validation, la hiérarchisation et la diffusion institutionnelle du savoir.
Dans ces régimes, la stabilité du collectif dépend en grande partie de la capacité à produire des énoncés tenus pour recevables, à distinguer le vrai du faux, le valide de linvalide, lexpertise de lopinion, et à organiser autour de ces distinctions des formes de décision, dorientation ou dautorité.
## Principe régulateur
La co-viabilité du collectif repose ici sur des dispositifs capables de produire, vérifier, corriger, classer et transmettre des régimes de vérité.
Les institutions savantes, les disciplines, les communautés expertes, les procédures de validation, les formats de preuve, les normes méthodologiques et les hiérarchies de compétence jouent alors un rôle structurant dans la tenue du commun.
Le savoir ny est pas seulement ressource cognitive.
Il devient infrastructure régulatrice.
## Distinction
Les archicrations épistémiques ne se confondent ni avec les [Archicrations historiographiques](/glossaire/archicrations-historiographiques/) ni avec les [Archicrations esthético-symboliques](/glossaire/archicrations-esthetico-symboliques/).
- dans les archicrations épistémiques, le cœur de la régulation réside dans la validité du savoir et dans les procédures qui lautorisent ;
- dans les archicrations historiographiques, la régulation passe prioritairement par la maîtrise légitime du récit du passé ;
- dans les archicrations esthético-symboliques, elle passe par la forme sensible, la représentation et la circulation dimaginaires partagés.
Ces régimes peuvent évidemment se croiser, mais ils ne fondent pas la co-viabilité sur le même type de scène.
## Arcalité, cratialité, archicration
Larcalité se manifeste dans les cadres conceptuels qui organisent le savoir : paradigmes, disciplines, taxonomies, méthodes, critères de recevabilité, protocoles de preuve.
La cratialité sexerce dans la capacité de certaines institutions, communautés ou appareils dexpertise à déterminer ce qui comptera comme connaissance valide, ce qui sera marginalisé comme erreur, ignorance, pseudo-savoir ou bruit.
Larchicration se joue dans les scènes de validation et de révision : expérience, publication, controverse savante, évaluation par les pairs, institution académique, expertise publique, comité de preuve, protocole de test, mesure standardisée.
## Portée archicratique
Ces régimes montrent que le savoir peut devenir une infrastructure de régulation collective.
La production du vrai ny est pas simplement spéculative. Elle oriente les politiques publiques, légitime les décisions, redistribue la crédibilité, hiérarchise les voix recevables et configure la manière dont un collectif se représente ses propres contraintes.
Larchicratie y trouve donc un champ danalyse décisif : celui où la régulation opère à travers des autorités cognitives plutôt quà travers la seule loi, la seule souveraineté ou la seule contrainte matérielle.
## Formes contemporaines
Dans les configurations contemporaines, les archicrations épistémiques se recomposent souvent avec des formes de calcul, de modélisation, dexpertise distribuée et dautomatisation.
Les systèmes dindicateurs, les tableaux de bord, les métriques, les modèles prédictifs ou les chaînes de scoring peuvent prolonger ce régime en donnant au savoir validé une puissance opératoire accrue.
Mais cette montée en opérativité peut aussi déplacer la scène de validation vers des zones plus opaques, plus techniques ou moins contestables.
## Pathologies possibles
Les archicrations épistémiques deviennent pathologiques lorsque la production du vrai se ferme contre sa propre révision ou lorsquelle se transforme en pouvoir indisputable dexpertise.
Leurs dérives typiques incluent notamment :
- la technocratisation de la décision ;
- la clôture des communautés de validation ;
- la confusion entre expertise et autorité ultime ;
- la dépolitisation des arbitrages sous couvert de nécessité cognitive ;
- lillusion selon laquelle une preuve suffirait à résoudre des tensions qui demeurent normatives ou politiques.
Langle mort dun tel régime est de faire comme si la validité du savoir suffisait à elle seule à produire la légitimité de la régulation.
## Enjeu politique
Le problème nest donc pas de discréditer le savoir, mais dinterroger les scènes où il devient puissance régulatrice.
Une archicration épistémique soutenable suppose non seulement des procédures robustes de validation, mais aussi des formes de comparution où puissent être discutés :
- les critères de preuve ;
- les cadrages implicites ;
- les usages politiques du savoir ;
- et les médiations qui transforment une vérité recevable en décision structurante.
## Renvois
- [Archicratie](/glossaire/archicratie/)
- [Arcalité](/glossaire/arcalite/)
- [Cratialité](/glossaire/cratialite/)
- [Archicration](/glossaire/archicration/)
- [Co-viabilité](/glossaire/co-viabilite/)
- [Gouvernementalité](/glossaire/gouvernementalite/)
- [Archicrations historiographiques](/glossaire/archicrations-historiographiques/)
- [Archicrations esthético-symboliques](/glossaire/archicrations-esthetico-symboliques/)
- [Cybernétique](/glossaire/cybernetique/)
- [Théorie de la justification](/glossaire/theorie-de-la-justification/)
- [Gouvernementalité algorithmique](/glossaire/gouvernementalite-algorithmique/)
- [Régulation technique / légitimation démocratique](/glossaire/regulation-technique-et-legitimation-democratique/)

View File

@@ -0,0 +1,117 @@
---
title: "Archicrations esthético-symboliques"
term: "Archicrations esthético-symboliques"
aliases: []
urlAliases: ["archicrations-esthetico-symboliques"]
mobilizedAuthors: ["Ernst Cassirer", "Clifford Geertz", "Cornelius Castoriadis"]
comparisonTraditions: ["anthropologie interprétative", "philosophie des formes symboliques", "théorie de limaginaire instituant"]
edition: "glossaire"
status: "referentiel"
version: "0.2.0"
definitionShort: "Méta-régime de co-viabilité dans lequel la régulation collective passe par la production, la circulation et la reconnaissance de formes symboliques et esthétiques partageables."
concepts: ["archicrations-esthetico-symboliques", "archicration", "forme-symbolique", "imaginaire", "representation", "esthetique", "sensible", "mise-en-scene"]
links: []
kind: "topologie"
family: "meta-regime"
domain: "transversal"
level: "avance"
related: ["archicratie", "arcalite", "cratialite", "archicration", "co-viabilite", "dissensus-politique", "visibilite-mediatique-et-reconnaissance-symbolique", "archicrations-historiographiques", "archicrations-epistemiques"]
opposedTo: []
seeAlso: ["theorie-de-la-resonance", "fait-social-total", "lieu-vide-du-pouvoir"]
navigation:
primaryNext: "archicrations-historiographiques"
primaryReason: "Les formes historiographiques prolongent les régulations symboliques dans des récits structurés."
paths:
understand: ["archicrations-epistemiques"]
deepen: ["archicrations-historiographiques"]
compare: ["archicrations-scripturo-normatives", "archicrations-marchandes"]
apply: ["dissensus-politique", "visibilite-mediatique-et-reconnaissance-symbolique"]
---
Les archicrations esthético-symboliques désignent un méta-régime de co-viabilité dans lequel la régulation collective sappuie sur la production, la circulation et la reconnaissance de formes symboliques partageables.
Dans ces régimes, la cohésion du collectif ne tient pas dabord à la seule loi, au seul calcul, ni même au seul récit historique, mais à la capacité de rendre sensible, visible, audible et partageable une certaine configuration du commun.
Ce régime ne se limite donc pas à lexpression culturelle : il organise les conditions sensibles de reconnaissance, de visibilité et de conflictualité à travers lesquelles un monde commun devient perceptible.
## Principe régulateur
La stabilité sociale dépend ici de la capacité à produire des formes sensibles capables dorienter lattention, de configurer limaginaire, de distribuer le visible et linvisible, le dicible et lindicible, le recevable et lirrecevable.
Les arts, les symboles, les figures, les rituels esthétiques, les mises en scène collectives, les emblèmes, les images, les styles de représentation ou les dispositifs médiatiques deviennent alors des opérateurs de régulation.
Le collectif tient en partie par ce quil parvient à se rendre sensible à lui-même.
## Distinction
Les archicrations esthético-symboliques ne se confondent ni avec les [Archicrations historiographiques](/glossaire/archicrations-historiographiques/) ni avec les [Archicrations épistémiques](/glossaire/archicrations-epistemiques/).
- dans les archicrations esthético-symboliques, la régulation passe prioritairement par la forme sensible, la représentation et limaginaire partagé ;
- dans les archicrations historiographiques, elle passe par lautorité du récit du passé ;
- dans les archicrations épistémiques, elle passe par la validité institutionnelle du savoir.
Une forme symbolique peut transmettre de lhistoire ou du savoir, mais son efficacité propre réside dans la mise en scène du monde commun.
## Arcalité, cratialité, archicration
Larcalité réside dans les imaginaires collectifs qui configurent les figures du monde, les schèmes de représentation, les signes légitimes et les formes de sensibilité partagée.
La cratialité se manifeste dans la capacité de certaines institutions culturelles, traditions symboliques, industries de visibilité, figures créatrices ou appareils médiatiques à produire, imposer ou rendre dominantes certaines représentations du commun.
Larchicration se joue dans les scènes de création, de circulation et de réception : cérémonies, performances, œuvres, rites publics, productions culturelles, espaces médiatiques, formes dexposition et dappropriation collective.
## Portée archicratique
Ce régime montre que la co-viabilité peut être stabilisée par des dispositifs sensibles et symboliques.
Mais ces formes ne se contentent pas de refléter un ordre déjà là.
Elles participent activement à sa tenue, à sa légitimation, à sa contestation ou à sa reconfiguration.
Larchicratie y trouve donc un terrain majeur : celui où les architectures de régulation passent par la forme même du perceptible.
## Ambivalence régulatrice
Les archicrations esthético-symboliques peuvent soutenir :
- la reconnaissance dun commun ;
- la densification dun monde partageable ;
- la transmission sensible dune appartenance ;
- louverture de scènes de dissensus, de déplacement ou de réinvention.
Mais elles peuvent aussi servir :
- à saturer la visibilité ;
- à naturaliser certains partages symboliques ;
- à capter lattention au profit dimages closes ;
- à substituer lexposition médiatique à la reconnaissance réelle.
Elles relèvent donc dun régime profondément ambivalent.
## Formes contemporaines
Dans les sociétés contemporaines, ces archicrations passent souvent par des circuits intensifs de médiatisation, de design symbolique, desthétisation politique et de mise en scène institutionnelle.
Le problème nest alors pas seulement celui de la création ou de lœuvre, mais celui de la manière dont les formes de visibilité organisent laccès à la parole, à la reconnaissance et à la conflictualité légitime.
Une société peut être saturée dimages tout en étant pauvre en scènes de comparution réelle.
## Enjeu politique
Lenjeu nest pas simplement de “produire plus de symboles”, mais de comprendre quelles formes sensibles soutiennent une co-viabilité plus riche, plus contestable et plus réinstituable.
Une archicration esthético-symbolique soutenable suppose des scènes où la forme ne sert pas seulement à recouvrir le conflit, mais aussi à le rendre perceptible, partageable et transformable.
## Renvois
- [Archicratie](/glossaire/archicratie/)
- [Arcalité](/glossaire/arcalite/)
- [Cratialité](/glossaire/cratialite/)
- [Archicration](/glossaire/archicration/)
- [Co-viabilité](/glossaire/co-viabilite/)
- [Dissensus politique](/glossaire/dissensus-politique/)
- [Visibilité médiatique / reconnaissance symbolique](/glossaire/visibilite-mediatique-et-reconnaissance-symbolique/)
- [Archicrations historiographiques](/glossaire/archicrations-historiographiques/)
- [Archicrations épistémiques](/glossaire/archicrations-epistemiques/)
- [Théorie de la résonance](/glossaire/theorie-de-la-resonance/)
- [Fait social total](/glossaire/fait-social-total/)
- [Lieu vide du pouvoir](/glossaire/lieu-vide-du-pouvoir/)

Some files were not shown because too many files have changed in this diff Show More