597 lines
14 KiB
XML
597 lines
14 KiB
XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||
<svg
|
||
width="1500"
|
||
height="940"
|
||
viewBox="0 0 1500 940"
|
||
role="img"
|
||
aria-label="Archicratie — Machine éditoriale (synthèse) : DEV/PROD, indices, postbuild, proposer/bridge"
|
||
version="1.1"
|
||
id="svg71"
|
||
sodipodi:docname="archicratie-web-edition-machine-editoriale-v3.svg"
|
||
inkscape:version="1.3-alpha (95f74fb, 2023-03-31)"
|
||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||
xmlns="http://www.w3.org/2000/svg"
|
||
xmlns:svg="http://www.w3.org/2000/svg">
|
||
<sodipodi:namedview
|
||
id="namedview71"
|
||
pagecolor="#ffffff"
|
||
bordercolor="#000000"
|
||
borderopacity="0.25"
|
||
inkscape:showpageshadow="2"
|
||
inkscape:pageopacity="0.0"
|
||
inkscape:pagecheckerboard="0"
|
||
inkscape:deskcolor="#d1d1d1"
|
||
inkscape:zoom="0.88133333"
|
||
inkscape:cx="794.25113"
|
||
inkscape:cy="350.03782"
|
||
inkscape:window-width="1472"
|
||
inkscape:window-height="1022"
|
||
inkscape:window-x="234"
|
||
inkscape:window-y="30"
|
||
inkscape:window-maximized="0"
|
||
inkscape:current-layer="svg71" />
|
||
<defs
|
||
id="defs2">
|
||
<style
|
||
id="style1">
|
||
/* Inkscape-safe: pas de CSS variables, fond explicite */
|
||
.title{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial; font-size:26px; font-weight:800; fill:#0f172a;}
|
||
.sub{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial; font-size:14px; font-weight:600; fill:#475569;}
|
||
.laneT{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial; font-size:14px; font-weight:800; fill:#0f172a; letter-spacing:.2px;}
|
||
.laneN{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial; font-size:12px; font-weight:600; fill:#475569;}
|
||
.h{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial; font-size:14px; font-weight:800; fill:#0f172a;}
|
||
.p{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial; font-size:12px; font-weight:600; fill:#475569;}
|
||
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace; font-size:11px; font-weight:700; fill:#334155;}
|
||
.small{font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial; font-size:11px; font-weight:600; fill:#475569;}
|
||
|
||
.canvas{fill:#f8fafc; stroke:#e2e8f0; stroke-width:1;}
|
||
.lane{fill:#f1f5f9; stroke:#cbd5e1; stroke-width:1;}
|
||
.laneAlt{fill:#eef2f7; stroke:#cbd5e1; stroke-width:1;}
|
||
|
||
.box{fill:#ffffff; stroke:#94a3b8; stroke-width:1.4;}
|
||
.boxAlt{fill:#f8fafc; stroke:#94a3b8; stroke-width:1.4;}
|
||
.call{fill:#ffffff; fill-opacity:.72; stroke:#cbd5e1; stroke-width:1.1;}
|
||
|
||
.arrow{stroke:#64748b; stroke-width:2.2; fill:none; marker-end:url(#ah);}
|
||
.arrowSoft{stroke:#94a3b8; stroke-width:2; fill:none; marker-end:url(#ahSoft);}
|
||
.dash{stroke-dasharray:7 6;}
|
||
</style>
|
||
<marker
|
||
id="ah"
|
||
markerWidth="10"
|
||
markerHeight="10"
|
||
refX="9"
|
||
refY="5"
|
||
orient="auto">
|
||
<path
|
||
d="M0,0 L10,5 L0,10 Z"
|
||
fill="#64748b"
|
||
id="path1" />
|
||
</marker>
|
||
<marker
|
||
id="ahSoft"
|
||
markerWidth="10"
|
||
markerHeight="10"
|
||
refX="9"
|
||
refY="5"
|
||
orient="auto">
|
||
<path
|
||
d="M0,0 L10,5 L0,10 Z"
|
||
fill="#94a3b8"
|
||
id="path2" />
|
||
</marker>
|
||
</defs>
|
||
<!-- Fond explicite -->
|
||
<rect
|
||
x="0.5"
|
||
y="0.5"
|
||
width="1499"
|
||
height="939"
|
||
rx="26"
|
||
class="canvas"
|
||
id="rect2" />
|
||
<!-- Titre -->
|
||
<text
|
||
x="44"
|
||
y="54"
|
||
class="title"
|
||
id="text2">Archicratie — Machine éditoriale (synthèse “exploitation + onboarding”)</text>
|
||
<text
|
||
x="44"
|
||
y="82"
|
||
class="sub"
|
||
id="text3">Inclut : DEV vs PROD (indices), ordre exact du postbuild, et fork “Proposer” (direct vs bridge same-origin).</text>
|
||
<!-- Lanes -->
|
||
<rect
|
||
x="40"
|
||
y="115"
|
||
width="390"
|
||
height="770"
|
||
rx="18"
|
||
class="lane"
|
||
id="rect3" />
|
||
<rect
|
||
x="450"
|
||
y="115"
|
||
width="390"
|
||
height="770"
|
||
rx="18"
|
||
class="laneAlt"
|
||
id="rect4" />
|
||
<rect
|
||
x="860"
|
||
y="115"
|
||
width="330"
|
||
height="770"
|
||
rx="18"
|
||
class="lane"
|
||
id="rect5" />
|
||
<rect
|
||
x="1210"
|
||
y="115"
|
||
width="250"
|
||
height="770"
|
||
rx="18"
|
||
class="laneAlt"
|
||
id="rect6" />
|
||
<text
|
||
x="60"
|
||
y="148"
|
||
class="laneT"
|
||
id="text6">1) Sources & vérité éditoriale</text>
|
||
<text
|
||
x="60"
|
||
y="170"
|
||
class="laneN"
|
||
id="text7">Ce qui est versionné (canon) et transforme l’édition</text>
|
||
<text
|
||
x="470"
|
||
y="148"
|
||
class="laneT"
|
||
id="text8">2) Build Astro (static)</text>
|
||
<text
|
||
x="470"
|
||
y="170"
|
||
class="laneN"
|
||
id="text9">Rendu HTML + UI d’édition (EditionLayout)</text>
|
||
<text
|
||
x="880"
|
||
y="148"
|
||
class="laneT"
|
||
id="text10">3) Postbuild (ordre exact)</text>
|
||
<text
|
||
x="880"
|
||
y="170"
|
||
class="laneN"
|
||
id="text11">Anti-régressions + index + recherche</text>
|
||
<text
|
||
x="1230"
|
||
y="148"
|
||
class="laneT"
|
||
id="text12">4) Runtime & feedback</text>
|
||
<text
|
||
x="1230"
|
||
y="170"
|
||
class="laneN"
|
||
id="text13">DEV (public) / PROD (dist) + Proposer</text>
|
||
<!-- Lane 1 -->
|
||
<rect
|
||
x="70"
|
||
y="210"
|
||
width="330"
|
||
height="135"
|
||
rx="16"
|
||
class="box"
|
||
id="rect13" />
|
||
<text
|
||
x="92"
|
||
y="238"
|
||
class="h"
|
||
id="text14">Sources amont (traçabilité)</text>
|
||
<text
|
||
x="92"
|
||
y="260"
|
||
class="p"
|
||
id="text15">Fichiers “sources/” (docx/pdf) + historiques.</text>
|
||
<text
|
||
x="92"
|
||
y="282"
|
||
class="mono"
|
||
id="text16">sources/** (non servi tel quel)</text>
|
||
<text
|
||
x="92"
|
||
y="304"
|
||
class="small"
|
||
id="text17">→ import/pipeline vers le contenu canon.</text>
|
||
<rect
|
||
x="70"
|
||
y="365"
|
||
width="330"
|
||
height="190"
|
||
rx="16"
|
||
class="boxAlt"
|
||
id="rect17" />
|
||
<text
|
||
x="92"
|
||
y="393"
|
||
class="h"
|
||
id="text18">Contenu canon (site)</text>
|
||
<text
|
||
x="92"
|
||
y="415"
|
||
class="p"
|
||
id="text19">Pages : MD/MDX (Astro content)</text>
|
||
<text
|
||
x="92"
|
||
y="437"
|
||
class="mono"
|
||
id="text20">src/content/**</text>
|
||
<text
|
||
x="92"
|
||
y="461"
|
||
class="p"
|
||
id="text21">Annotations : YAML</text>
|
||
<text
|
||
x="92"
|
||
y="483"
|
||
class="mono"
|
||
id="text22">src/annotations/**</text>
|
||
<text
|
||
x="78"
|
||
y="507"
|
||
class="small"
|
||
id="text23">Ces deux entrées alimentent l’UI (SidePanel, highlights, etc.).</text>
|
||
<rect
|
||
x="70"
|
||
y="575"
|
||
width="330"
|
||
height="140"
|
||
rx="16"
|
||
class="box"
|
||
id="rect23" />
|
||
<text
|
||
x="92"
|
||
y="603"
|
||
class="h"
|
||
id="text24">Scripts d’import / qualité</text>
|
||
<text
|
||
x="92"
|
||
y="625"
|
||
class="p"
|
||
id="text25">Import DOCX, contrôle d’IDs, aliases, etc.</text>
|
||
<text
|
||
x="92"
|
||
y="647"
|
||
class="mono"
|
||
id="text26">scripts/*.mjs</text>
|
||
<text
|
||
x="86"
|
||
y="671"
|
||
class="small"
|
||
id="text27">Objectif : build reproductible + pas de régression d’ancres.</text>
|
||
<!-- Lane 2 -->
|
||
<rect
|
||
x="480"
|
||
y="210"
|
||
width="330"
|
||
height="170"
|
||
rx="16"
|
||
class="box"
|
||
id="rect27" />
|
||
<text
|
||
x="502"
|
||
y="238"
|
||
class="h"
|
||
id="text28">EditionLayout (UI d’édition)</text>
|
||
<text
|
||
x="502"
|
||
y="260"
|
||
class="p"
|
||
id="text29"><tspan
|
||
sodipodi:role="line"
|
||
id="tspan71"
|
||
x="502"
|
||
y="260">SiteNav + TOC global + TOC local + reading-follow</tspan><tspan
|
||
sodipodi:role="line"
|
||
id="tspan72"
|
||
x="502"
|
||
y="275">+ SidePanel.</tspan></text>
|
||
<text
|
||
x="508"
|
||
y="300"
|
||
class="mono"
|
||
id="text30">src/layouts/EditionLayout.astro</text>
|
||
<text
|
||
x="508"
|
||
y="322"
|
||
class="mono"
|
||
id="text31">src/components/SidePanel.astro</text>
|
||
<text
|
||
x="508"
|
||
y="344"
|
||
class="small"
|
||
id="text32"><tspan
|
||
sodipodi:role="line"
|
||
id="tspan73"
|
||
x="508"
|
||
y="344">Globals boot (flags/env)</tspan><tspan
|
||
sodipodi:role="line"
|
||
id="tspan74"
|
||
x="508"
|
||
y="357.75">+ interactions “Propos / Réfs / Illus / Com”.</tspan></text>
|
||
<rect
|
||
x="480"
|
||
y="400"
|
||
width="330"
|
||
height="160"
|
||
rx="16"
|
||
class="boxAlt"
|
||
id="rect32" />
|
||
<text
|
||
x="502"
|
||
y="428"
|
||
class="h"
|
||
id="text33">Build statique</text>
|
||
<text
|
||
x="502"
|
||
y="450"
|
||
class="p"
|
||
id="text34">Astro génère HTML & assets.</text>
|
||
<text
|
||
x="502"
|
||
y="472"
|
||
class="mono"
|
||
id="text35">npm run build → astro build</text>
|
||
<text
|
||
x="502"
|
||
y="496"
|
||
class="p"
|
||
id="text36">Sortie :</text>
|
||
<text
|
||
x="502"
|
||
y="518"
|
||
class="mono"
|
||
id="text37">dist/**</text>
|
||
<!-- Lane 3 -->
|
||
<rect
|
||
x="890"
|
||
y="210"
|
||
width="270"
|
||
height="265"
|
||
rx="16"
|
||
class="box"
|
||
id="rect37" />
|
||
<text
|
||
x="912"
|
||
y="238"
|
||
class="h"
|
||
id="text38">Postbuild : ordre exact (fixe)</text>
|
||
<text
|
||
x="912"
|
||
y="264"
|
||
class="mono"
|
||
id="text39">1) inject-anchor-aliases.mjs</text>
|
||
<text
|
||
x="912"
|
||
y="286"
|
||
class="mono"
|
||
id="text40">2) dedupe-ids-dist.mjs</text>
|
||
<text
|
||
x="912"
|
||
y="308"
|
||
class="mono"
|
||
id="text41">3) build-para-index.mjs</text>
|
||
<text
|
||
x="912"
|
||
y="330"
|
||
class="mono"
|
||
id="text42">4) build-annotations-index.mjs</text>
|
||
<text
|
||
x="912"
|
||
y="352"
|
||
class="mono"
|
||
id="text43">5) pagefind</text>
|
||
<text
|
||
x="912"
|
||
y="380"
|
||
class="p"
|
||
id="text44">Sorties PROD :</text>
|
||
<text
|
||
x="912"
|
||
y="402"
|
||
class="mono"
|
||
id="text45">dist/para-index.json</text>
|
||
<text
|
||
x="912"
|
||
y="424"
|
||
class="mono"
|
||
id="text46">dist/annotations-index.json</text>
|
||
<text
|
||
x="912"
|
||
y="446"
|
||
class="mono"
|
||
id="text47">dist/pagefind/**</text>
|
||
<!-- Lane 4 -->
|
||
<rect
|
||
x="1230"
|
||
y="210"
|
||
width="210"
|
||
height="200"
|
||
rx="16"
|
||
class="box"
|
||
id="rect47" />
|
||
<text
|
||
x="1252"
|
||
y="238"
|
||
class="h"
|
||
id="text48">DEV vs PROD : indices</text>
|
||
<text
|
||
x="1252"
|
||
y="262"
|
||
class="p"
|
||
id="text49">PROD (statique) lit dans :</text>
|
||
<text
|
||
x="1252"
|
||
y="284"
|
||
class="mono"
|
||
id="text50">dist/*.json</text>
|
||
<text
|
||
x="1252"
|
||
y="308"
|
||
class="p"
|
||
id="text51">DEV (astro dev) sert depuis :</text>
|
||
<text
|
||
x="1252"
|
||
y="330"
|
||
class="mono"
|
||
id="text52">public/*.json</text>
|
||
<text
|
||
x="1252"
|
||
y="356"
|
||
class="small"
|
||
id="text53"><tspan
|
||
sodipodi:role="line"
|
||
id="tspan75"
|
||
x="1252"
|
||
y="356">DEV : predev copie/génère</tspan><tspan
|
||
sodipodi:role="line"
|
||
id="tspan76"
|
||
x="1252"
|
||
y="369.75">les index pour éviter les 404.</tspan></text>
|
||
<rect
|
||
x="1230"
|
||
y="430"
|
||
width="210"
|
||
height="215"
|
||
rx="16"
|
||
class="boxAlt"
|
||
id="rect53" />
|
||
<text
|
||
x="1252"
|
||
y="458"
|
||
class="h"
|
||
id="text54">“Proposer” : 2 modes</text>
|
||
<text
|
||
x="1252"
|
||
y="482"
|
||
class="p"
|
||
id="text55">A) Direct client → Gitea API</text>
|
||
<text
|
||
x="1252"
|
||
y="504"
|
||
class="small"
|
||
id="text56">⚠️ CORS/auth/token (déconseillé)</text>
|
||
<text
|
||
x="1252"
|
||
y="536"
|
||
class="p"
|
||
id="text57">B) Bridge same-origin (reco)</text>
|
||
<text
|
||
x="1252"
|
||
y="558"
|
||
class="mono"
|
||
id="text58">PUBLIC_ISSUE_BRIDGE_PATH</text>
|
||
<text
|
||
x="1252"
|
||
y="582"
|
||
class="small"
|
||
id="text59"><tspan
|
||
sodipodi:role="line"
|
||
id="tspan77"
|
||
x="1252"
|
||
y="582">UI → bridge → Gitea</tspan><tspan
|
||
sodipodi:role="line"
|
||
id="tspan78"
|
||
x="1252"
|
||
y="596.18488">(secrets côté serveur)</tspan></text>
|
||
<rect
|
||
x="1230"
|
||
y="665"
|
||
width="210"
|
||
height="120"
|
||
rx="16"
|
||
class="box"
|
||
id="rect59" />
|
||
<text
|
||
x="1252"
|
||
y="693"
|
||
class="h"
|
||
id="text60">Gitea (Issues)</text>
|
||
<text
|
||
x="1252"
|
||
y="717"
|
||
class="p"
|
||
id="text61">Création + suivi</text>
|
||
<text
|
||
x="1252"
|
||
y="739"
|
||
class="mono"
|
||
id="text62">/issues/new</text>
|
||
<text
|
||
x="1232"
|
||
y="763"
|
||
class="small"
|
||
id="text63">Labels/assignee selon règles d’équipe.</text>
|
||
<!-- Callout (rappel pro) -->
|
||
<rect
|
||
x="470"
|
||
y="590"
|
||
width="720"
|
||
height="120"
|
||
rx="14"
|
||
class="call"
|
||
id="rect63" />
|
||
<text
|
||
x="490"
|
||
y="618"
|
||
class="h"
|
||
id="text64">Rappel “pro” (anti régression)</text>
|
||
<text
|
||
x="490"
|
||
y="642"
|
||
class="p"
|
||
id="text65">• L’ordre du postbuild ne doit pas changer sans raison : il garantit ancres stables + index cohérents.</text>
|
||
<text
|
||
x="490"
|
||
y="664"
|
||
class="p"
|
||
id="text66">• DEV sert des index dans <tspan
|
||
class="mono"
|
||
id="tspan65">public/</tspan> ; PROD lit dans <tspan
|
||
class="mono"
|
||
id="tspan66">dist/</tspan>.</text>
|
||
<text
|
||
x="490"
|
||
y="686"
|
||
class="p"
|
||
id="text67">• Pour “Proposer”, préférer le bridge same-origin : pas de token côté navigateur.</text>
|
||
<!-- Arrows -->
|
||
<path
|
||
class="arrow"
|
||
d="M400 460 C430 460, 450 450, 480 480"
|
||
id="path67" />
|
||
<path
|
||
class="arrow"
|
||
d="M810 480 C840 480, 860 470, 890 430"
|
||
id="path68" />
|
||
<path
|
||
class="arrowSoft dash"
|
||
d="M1030 460 C1120 500, 1180 520, 1230 330"
|
||
id="path69" />
|
||
<path
|
||
class="arrow"
|
||
d="M1180 590 C1210 590, 1220 590, 1230 540"
|
||
id="path70" />
|
||
<path
|
||
class="arrow"
|
||
d="M1340 645 C1340 660, 1340 660, 1340 665"
|
||
id="path71" />
|
||
<!-- Foot -->
|
||
<text
|
||
x="44"
|
||
y="916"
|
||
class="sub"
|
||
id="text71">Astuce : si Inkscape affichait “noir”, c’était très souvent des CSS variables. Ici : couleurs explicites + fond explicite.</text>
|
||
</svg>
|