632 lines
14 KiB
XML
632 lines
14 KiB
XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||
<svg
|
||
width="1600"
|
||
height="1020"
|
||
viewBox="0 0 1600 1020"
|
||
version="1.1"
|
||
id="svg77"
|
||
sodipodi:docname="archicratie-web-edition-machine-editoriale.svg"
|
||
inkscape:version="1.3-alpha (95f74fb, 2023-03-31)"
|
||
inkscape:export-filename="out/archicratie-web-edition-machine-editoriale.png"
|
||
inkscape:export-xdpi="96"
|
||
inkscape:export-ydpi="96"
|
||
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="namedview77"
|
||
pagecolor="#ffffff"
|
||
bordercolor="#000000"
|
||
borderopacity="0.25"
|
||
inkscape:showpageshadow="2"
|
||
inkscape:pageopacity="0.0"
|
||
inkscape:pagecheckerboard="0"
|
||
inkscape:deskcolor="#d1d1d1"
|
||
inkscape:zoom="0.82625"
|
||
inkscape:cx="409.07716"
|
||
inkscape:cy="573.0711"
|
||
inkscape:window-width="1472"
|
||
inkscape:window-height="1022"
|
||
inkscape:window-x="234"
|
||
inkscape:window-y="30"
|
||
inkscape:window-maximized="0"
|
||
inkscape:current-layer="svg77" />
|
||
<defs
|
||
id="defs1">
|
||
<marker
|
||
id="arrow"
|
||
viewBox="0 0 10 10"
|
||
refX="9.5"
|
||
refY="5"
|
||
markerWidth="8"
|
||
markerHeight="8"
|
||
orient="auto-start-reverse">
|
||
<path
|
||
d="M 0 0 L 10 5 L 0 10 z"
|
||
fill="#222"
|
||
id="path1" />
|
||
</marker>
|
||
<style
|
||
id="style1">
|
||
.title { font: 700 22px sans-serif; fill:#111; }
|
||
.small { font: 12px sans-serif; fill:#111; }
|
||
.h2 { font: 700 16px sans-serif; fill:#111; }
|
||
.h3 { font: 700 14px sans-serif; fill:#111; }
|
||
.txt { font: 13px sans-serif; fill:#111; }
|
||
.mono { font: 12px ui-monospace, SFMono-Regular, Menlo, monospace; fill:#111; }
|
||
.zone { fill:#f3f3f3; stroke:#111; stroke-width:2; }
|
||
.box { fill:#fafafa; stroke:#222; stroke-width:1.5; }
|
||
.note { fill:#fff; stroke:#666; stroke-width:1.2; }
|
||
.line { stroke:#222; stroke-width:2; fill:none; marker-end:url(#arrow); }
|
||
.dash { stroke:#222; stroke-width:2; fill:none; stroke-dasharray:7 6; marker-end:url(#arrow); }
|
||
</style>
|
||
</defs>
|
||
<!-- Header -->
|
||
<text
|
||
x="40"
|
||
y="45"
|
||
class="title"
|
||
id="text1">Archicratie – Web Edition : Machine éditoriale VERBATIM (Proposer / Citer / /_auth/whoami / aliases / apply-ticket)</text>
|
||
<text
|
||
x="40"
|
||
y="75"
|
||
class="small"
|
||
id="text2">Sources “vraies” : src/layouts/EditionLayout.astro (WHOAMI_PATH="/_auth/whoami", GITEA_* via import.meta.env.PUBLIC_*), src/anchors/anchor-aliases.json, scripts/inject-anchor-aliases.mjs, scripts/apply-ticket.mjs --alias.</text>
|
||
<!-- ZONE A: Runtime -->
|
||
<rect
|
||
x="35"
|
||
y="110"
|
||
width="1530"
|
||
height="420"
|
||
rx="18"
|
||
class="zone"
|
||
id="rect2" />
|
||
<text
|
||
x="60"
|
||
y="145"
|
||
class="h2"
|
||
id="text3">A — Runtime (navigateur) : paragraphe → outils (¶ / Citer / Proposer) → issue Gitea</text>
|
||
<!-- Reader -->
|
||
<rect
|
||
x="60"
|
||
y="175"
|
||
width="380"
|
||
height="160"
|
||
rx="12"
|
||
class="box"
|
||
id="rect3" />
|
||
<text
|
||
x="80"
|
||
y="205"
|
||
class="h2"
|
||
id="text4">Utilisateur (lecteur/éditeur)</text>
|
||
<text
|
||
x="80"
|
||
y="230"
|
||
class="txt"
|
||
id="text5">• lit une page</text>
|
||
<text
|
||
x="80"
|
||
y="252"
|
||
class="txt"
|
||
id="text6">• sur un paragraphe : ¶ / Citer / Proposer</text>
|
||
<text
|
||
x="80"
|
||
y="274"
|
||
class="txt"
|
||
id="text7">• Proposer visible uniquement si “editors”</text>
|
||
<text
|
||
x="80"
|
||
y="300"
|
||
class="small"
|
||
id="text8">(le gate est runtime via whoami)</text>
|
||
<!-- Astro page + EditionLayout -->
|
||
<rect
|
||
x="470"
|
||
y="175"
|
||
width="560"
|
||
height="330"
|
||
rx="12"
|
||
class="box"
|
||
id="rect8" />
|
||
<text
|
||
x="490"
|
||
y="205"
|
||
class="h2"
|
||
id="text9">Site Astro statique — EditionLayout</text>
|
||
<text
|
||
x="490"
|
||
y="230"
|
||
class="mono"
|
||
id="text10">src/layouts/EditionLayout.astro</text>
|
||
<text
|
||
x="490"
|
||
y="260"
|
||
class="h3"
|
||
id="text11">Variables publiques injectées</text>
|
||
<text
|
||
x="490"
|
||
y="282"
|
||
class="txt"
|
||
id="text13">• <tspan
|
||
class="mono"
|
||
id="tspan11">PUBLIC_GITEA_BASE</tspan>, <tspan
|
||
class="mono"
|
||
id="tspan12">PUBLIC_GITEA_OWNER</tspan>, <tspan
|
||
class="mono"
|
||
id="tspan13">PUBLIC_GITEA_REPO</tspan></text>
|
||
<text
|
||
x="490"
|
||
y="304"
|
||
class="txt"
|
||
id="text14">• si une manque : giteaReady=false → Proposer désactivé</text>
|
||
<text
|
||
x="490"
|
||
y="338"
|
||
class="h3"
|
||
id="text15">Outils paragraphe</text>
|
||
<text
|
||
x="490"
|
||
y="360"
|
||
class="txt"
|
||
id="text16">• ¶ : lien d’ancre vers <tspan
|
||
class="mono"
|
||
id="tspan15">#p-…</tspan></text>
|
||
<text
|
||
x="490"
|
||
y="382"
|
||
class="txt"
|
||
id="text17">• Citer : copie une citation structurée (titre + URL#ancre)</text>
|
||
<text
|
||
x="490"
|
||
y="404"
|
||
class="txt"
|
||
id="text18">• Proposer : modal 2 étapes → ouvre <tspan
|
||
class="mono"
|
||
id="tspan17">/issues/new?...</tspan></text>
|
||
<text
|
||
x="490"
|
||
y="438"
|
||
class="h3"
|
||
id="text19">Gate “editors” (whoami)</text>
|
||
<text
|
||
x="490"
|
||
y="460"
|
||
class="txt"
|
||
id="text20">• <tspan
|
||
class="mono"
|
||
id="tspan19">WHOAMI_PATH="/_auth/whoami"</tspan> + fetch same-origin</text>
|
||
<text
|
||
x="490"
|
||
y="482"
|
||
class="txt"
|
||
id="text21">• lit header <tspan
|
||
class="mono"
|
||
id="tspan20">Remote-Groups</tspan> → affiche/retire Proposer du DOM</text>
|
||
<!-- Edge/Auth -->
|
||
<rect
|
||
x="1060"
|
||
y="175"
|
||
width="250"
|
||
height="160"
|
||
rx="12"
|
||
class="box"
|
||
id="rect21" />
|
||
<text
|
||
x="1080"
|
||
y="205"
|
||
class="h2"
|
||
id="text22">Traefik edge</text>
|
||
<text
|
||
x="1080"
|
||
y="230"
|
||
class="txt"
|
||
id="text23">• Host(archicratie…)</text>
|
||
<text
|
||
x="1080"
|
||
y="252"
|
||
class="txt"
|
||
id="text24">• middleware : chain-auth</text>
|
||
<text
|
||
x="1080"
|
||
y="274"
|
||
class="txt"
|
||
id="text25">• route <tspan
|
||
class="mono"
|
||
id="tspan24">/_auth/whoami</tspan></text>
|
||
<text
|
||
x="1080"
|
||
y="300"
|
||
class="small"
|
||
id="text26">forward-auth vers Authelia</text>
|
||
<rect
|
||
x="1060"
|
||
y="350"
|
||
width="250"
|
||
height="155"
|
||
rx="12"
|
||
class="box"
|
||
id="rect26" />
|
||
<text
|
||
x="1080"
|
||
y="380"
|
||
class="h2"
|
||
id="text27">Authelia + LLDAP</text>
|
||
<text
|
||
x="1080"
|
||
y="405"
|
||
class="txt"
|
||
id="text28">• forward-auth : <tspan
|
||
class="mono"
|
||
id="tspan27">:9091</tspan></text>
|
||
<text
|
||
x="1080"
|
||
y="427"
|
||
class="txt"
|
||
id="text29">• groupes via LDAP</text>
|
||
<text
|
||
x="1080"
|
||
y="449"
|
||
class="txt"
|
||
id="text30">• injecte headers Remote-*</text>
|
||
<text
|
||
x="1080"
|
||
y="471"
|
||
class="small"
|
||
id="text31">non auth ⇒ 302 vers auth.*</text>
|
||
<!-- Gitea issue -->
|
||
<rect
|
||
x="1330"
|
||
y="175"
|
||
width="220.47655"
|
||
height="328.7897"
|
||
rx="12"
|
||
class="box"
|
||
id="rect31" />
|
||
<text
|
||
x="1350"
|
||
y="205"
|
||
class="h2"
|
||
id="text32">Gitea (UI)</text>
|
||
<text
|
||
x="1350"
|
||
y="230"
|
||
class="txt"
|
||
id="text33">Issue préremplie :</text>
|
||
<text
|
||
x="1350"
|
||
y="255"
|
||
class="mono"
|
||
id="text34">BASE/OWNER/REPO/issues/new</text>
|
||
<text
|
||
x="1350"
|
||
y="287"
|
||
class="txt"
|
||
id="text35">Contenu typique :</text>
|
||
<text
|
||
x="1350"
|
||
y="309"
|
||
class="txt"
|
||
id="text36">• URL page + <tspan
|
||
class="mono"
|
||
id="tspan35">#p-…</tspan></text>
|
||
<text
|
||
x="1350"
|
||
y="331"
|
||
class="txt"
|
||
id="text37">• Type / State / Category</text>
|
||
<text
|
||
x="1350"
|
||
y="353"
|
||
class="txt"
|
||
id="text38">• proposition / commentaire</text>
|
||
<text
|
||
x="1350"
|
||
y="385"
|
||
class="txt"
|
||
id="text39">Résultat :</text>
|
||
<text
|
||
x="1350"
|
||
y="407"
|
||
class="txt"
|
||
id="text40">• issue = backlog éditorial</text>
|
||
<text
|
||
x="1350"
|
||
y="429"
|
||
class="txt"
|
||
id="text41">• labels (CI/bot) pour tri</text>
|
||
<!-- Runtime connections -->
|
||
<path
|
||
d="M 440 260 L 470 260"
|
||
class="line"
|
||
id="path41" />
|
||
<path
|
||
d="M 1030 470 L 1060 470"
|
||
class="dash"
|
||
id="path42" />
|
||
<path
|
||
d="M 1310 320 L 1330 320"
|
||
class="line"
|
||
id="path43" />
|
||
<path
|
||
d="M 1030 270 L 1060 270"
|
||
class="dash"
|
||
id="path44" />
|
||
<rect
|
||
x="60"
|
||
y="355"
|
||
width="380"
|
||
height="150"
|
||
rx="12"
|
||
class="note"
|
||
id="rect44" />
|
||
<text
|
||
x="80"
|
||
y="385"
|
||
class="h2"
|
||
id="text44">Contrat runtime (robuste)</text>
|
||
<text
|
||
x="80"
|
||
y="410"
|
||
class="txt"
|
||
id="text45">• Citer marche sans droits (copie + lien)</text>
|
||
<text
|
||
x="80"
|
||
y="432"
|
||
class="txt"
|
||
id="text46">• Proposer n’existe pas si non “editors”</text>
|
||
<text
|
||
x="80"
|
||
y="454"
|
||
class="txt"
|
||
id="text47">• whoami renvoie 302 login si non auth</text>
|
||
<text
|
||
x="80"
|
||
y="476"
|
||
class="txt"
|
||
id="text48">• si PUBLIC_GITEA_* faux → 404/login loop</text>
|
||
<!-- ZONE B: CI / labels -->
|
||
<rect
|
||
x="35"
|
||
y="545"
|
||
width="1530"
|
||
height="210"
|
||
rx="18"
|
||
class="zone"
|
||
id="rect48" />
|
||
<text
|
||
x="60"
|
||
y="580"
|
||
class="h2"
|
||
id="text49">B — Automatisation : issue → labels + checks qualité</text>
|
||
<rect
|
||
x="60"
|
||
y="610"
|
||
width="520"
|
||
height="120"
|
||
rx="12"
|
||
class="box"
|
||
id="rect49" />
|
||
<text
|
||
x="80"
|
||
y="640"
|
||
class="h2"
|
||
id="text50">Gitea Actions (workflows)</text>
|
||
<text
|
||
x="80"
|
||
y="665"
|
||
class="txt"
|
||
id="text51">• triggers : issues opened / edited (labels)</text>
|
||
<text
|
||
x="80"
|
||
y="687"
|
||
class="txt"
|
||
id="text52">• checks build : anchors / aliases / inline-js / dist audit</text>
|
||
<text
|
||
x="80"
|
||
y="709"
|
||
class="small"
|
||
id="text53">token API requis côté job (ex : FORGE_TOKEN) pour écrire labels</text>
|
||
<rect
|
||
x="610"
|
||
y="610"
|
||
width="430"
|
||
height="120"
|
||
rx="12"
|
||
class="box"
|
||
id="rect53" />
|
||
<text
|
||
x="630"
|
||
y="640"
|
||
class="h2"
|
||
id="text54">Runner</text>
|
||
<text
|
||
x="630"
|
||
y="665"
|
||
class="txt"
|
||
id="text55">• conteneur : <tspan
|
||
class="mono"
|
||
id="tspan54">gitea-act-runner (gitea/act_runner)</tspan></text>
|
||
<text
|
||
x="630"
|
||
y="687"
|
||
class="txt"
|
||
id="text56">• exécute jobs (souvent en conteneur)</text>
|
||
<text
|
||
x="630"
|
||
y="709"
|
||
class="txt"
|
||
id="text57">• appelle API Gitea pour labels</text>
|
||
<rect
|
||
x="1070"
|
||
y="610"
|
||
width="465"
|
||
height="120"
|
||
rx="12"
|
||
class="box"
|
||
id="rect57" />
|
||
<text
|
||
x="1090"
|
||
y="640"
|
||
class="h2"
|
||
id="text58">Gitea (API) + labels</text>
|
||
<text
|
||
x="1090"
|
||
y="665"
|
||
class="txt"
|
||
id="text59">• labels = tri natif (type/state/cat)</text>
|
||
<text
|
||
x="1090"
|
||
y="687"
|
||
class="txt"
|
||
id="text60">• backlog propre, opérable</text>
|
||
<text
|
||
x="1090"
|
||
y="709"
|
||
class="small"
|
||
id="text61">si 401 : token manquant/mauvais droits</text>
|
||
<path
|
||
d="M 580 670 L 610 670"
|
||
class="line"
|
||
id="path61" />
|
||
<path
|
||
d="M 1040 670 L 1070 670"
|
||
class="line"
|
||
id="path62" />
|
||
<!-- ZONE C: Re-integration + anchors -->
|
||
<rect
|
||
x="35"
|
||
y="780"
|
||
width="1530"
|
||
height="210"
|
||
rx="18"
|
||
class="zone"
|
||
id="rect62" />
|
||
<text
|
||
x="300"
|
||
y="815"
|
||
class="h2"
|
||
id="text62"
|
||
style="font-style:normal;font-variant:normal;font-weight:700;font-stretch:normal;font-size:16px;line-height:normal;font-family:sans-serif">C — Réintégration : correction → contenu web + stabilité des ancres (aliases build-time)</text>
|
||
<rect
|
||
x="60"
|
||
y="850"
|
||
width="520"
|
||
height="115"
|
||
rx="12"
|
||
class="box"
|
||
id="rect63" />
|
||
<text
|
||
x="80"
|
||
y="880"
|
||
class="h2"
|
||
id="text63">Apply-ticket</text>
|
||
<text
|
||
x="80"
|
||
y="905"
|
||
class="mono"
|
||
id="text64">scripts/apply-ticket.mjs <issue_number> --alias</text>
|
||
<text
|
||
x="80"
|
||
y="929"
|
||
class="txt"
|
||
id="text65">• applique patch dans src/content/…</text>
|
||
<text
|
||
x="80"
|
||
y="951"
|
||
class="txt"
|
||
id="text66">• écrit alias old→new dans <tspan
|
||
class="mono"
|
||
id="tspan65">src/anchors/anchor-aliases.json</tspan></text>
|
||
<rect
|
||
x="610"
|
||
y="850"
|
||
width="518.78973"
|
||
height="130.73373"
|
||
rx="12"
|
||
class="box"
|
||
id="rect66" />
|
||
<text
|
||
x="630"
|
||
y="880"
|
||
class="h2"
|
||
id="text67">Aliases canon + injection</text>
|
||
<text
|
||
x="630"
|
||
y="905"
|
||
class="mono"
|
||
id="text68">src/anchors/anchor-aliases.json</text>
|
||
<text
|
||
x="630"
|
||
y="929"
|
||
class="txt"
|
||
id="text69">postbuild : <tspan
|
||
class="mono"
|
||
id="tspan68">node scripts/inject-anchor-aliases.mjs</tspan></text>
|
||
<text
|
||
x="630"
|
||
y="951"
|
||
class="txt"
|
||
id="text70"
|
||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13px;line-height:normal;font-family:sans-serif"><tspan
|
||
sodipodi:role="line"
|
||
id="tspan77"
|
||
x="630"
|
||
y="951">• injecte</tspan><tspan
|
||
sodipodi:role="line"
|
||
id="tspan78"
|
||
x="630"
|
||
y="967.25"><span id="oldId" class="para-alias"> avant newId dans dist/**/index.html</tspan></text>
|
||
<rect
|
||
x="1160"
|
||
y="850"
|
||
width="375"
|
||
height="115"
|
||
rx="12"
|
||
class="box"
|
||
id="rect70" />
|
||
<text
|
||
x="1180"
|
||
y="880"
|
||
class="h2"
|
||
id="text71">Preuves (tests)</text>
|
||
<text
|
||
x="1180"
|
||
y="905"
|
||
class="txt"
|
||
id="text72">• <tspan
|
||
class="mono"
|
||
id="tspan71">scripts/check-anchor-aliases.mjs</tspan></text>
|
||
<text
|
||
x="1180"
|
||
y="929"
|
||
class="txt"
|
||
id="text73">• <tspan
|
||
class="mono"
|
||
id="tspan72">scripts/verify-anchor-aliases-in-dist.mjs</tspan></text>
|
||
<text
|
||
x="1180"
|
||
y="951"
|
||
class="txt"
|
||
id="text74">• <tspan
|
||
class="mono"
|
||
id="tspan73">scripts/check-anchors.mjs</tspan></text>
|
||
<path
|
||
d="M 1495 545 L 1495 505"
|
||
class="dash"
|
||
id="path74" />
|
||
<path
|
||
d="M 220,730 V 850"
|
||
class="line"
|
||
id="path75" />
|
||
<path
|
||
d="M 580 908 L 610 908"
|
||
class="line"
|
||
id="path76" />
|
||
<path
|
||
d="M 1130 908 L 1160 908"
|
||
class="line"
|
||
id="path77" />
|
||
</svg>
|