diff --git a/CHANGELOG.md b/CHANGELOG.md index 52a9164..705e2b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,45 @@ # CHANGELOG — Set-OPS +## 2026-09-09 (2) — Le wiki d'`origin` : une garde qui bloquait au lieu de proteger + +**Les deux forges servent desormais le meme wiki**, 26 pages, contenu identique au fichier +pres (`diff -rq` : aucune difference). + +### Ce que je disais, et qui etait faux + +« Il n'y a rien sur `origin` » — non. **Le depot y est, et a jour** : `git ls-remote` rend +exactement notre HEAD. C'est le WIKI qui etait vide. L'ecart entre « le depot est absent » +et « son wiki n'a pas de branche » est tout l'ecart entre une panne et une formalite, et je +l'avais recopie d'une session precedente sans le remesurer. + +### La garde avait raison de refuser, et tort de s'arreter la + +`make wiki-publier` refuse un wiki VIDE : sans commit il n'a aucune branche, et publier en +inventerait une — `master` sur ce poste, alors que le wiki en service vit sur `main`. Le +message disait « creer une premiere page dans l'interface Forgejo ». Or l'interface n'est +pas joignable depuis ce poste, et ce n'est pas une panne : la forge du site n'accepte le +443 que des machines qui DECLARENT le flux. + +**Forgejo declare pourtant la reponse.** `GET /api/v1/repos/genome/set-ops-public` rend +`wiki_branch`. Interroge depuis `ops-01` — une machine qui a le flux — il repond `main`. +On ne devinait donc pas : on ne demandait pas. + +`WIKI_BRANCHE=` a ete ajoute a la recette. Le refus reste le DEFAUT ; qui a la reponse peut +la donner. Les deux cotes sont eprouves : un wiki vide sans la variable est refuse, avec +`WIKI_BRANCHE=main` il est initialise sur `main` exactement. + +### Au passage, une lecon d'instrument + +Trois sondes fausses avant la bonne. Un `connect()` direct sur `10.0.33.11:443` depuis le +poste rend `TimeoutError` — route presente, paquets avales : une POLITIQUE, pas une route +manquante. Un tunnel par la frontiere ne repondait pas davantage. Et pendant ce temps +`git ls-remote` fonctionnait tres bien, parce que `~/.ssh/config` passe par un +`ProxyJump ansible@10.17.0.1` que la sonde ignorait. + +L'instrument juste etait `ops-01` : la machine dont le flux vers la forge est DECLARE. Elle +repond `HTTP 200` en 443, et 22 muet — l'exact inverse du poste. *Verifier d'ou l'instrument +mesure*, encore une fois. + ## 2026-09-09 — cloud-init nait avec la VM et ne lui survit pas **63 preuves (P01-P63). `make prouver` : CONFORME, 62 OK, 0 echec, 1 saute.** diff --git a/Makefile b/Makefile index 1c58b3f..1c3d6e0 100644 --- a/Makefile +++ b/Makefile @@ -825,13 +825,27 @@ wiki-publier: ## Publie le wiki (wiki/) vers la forge : ' de branche etait DEVINE, et il divergeait d une forge a l autre.'; \ : ' On refuse donc plutot que de choisir a la place de Forgejo : creer une premiere'; \ : ' page dans son interface initialise le wiki avec LA branche qu il attend.'; \ + : ' ON NE DEVINE PAS — ON DEMANDE. Forgejo DECLARE la branche qu il attend, dans'; \ + : ' `wiki_branch` de son API : GET /api/v1/repos//. Mesure du'; \ + : ' 2026-09-09 sur forge.genese.internal : `wiki_branch = main`. Le refus ci-dessous'; \ + : ' reste le DEFAUT — depuis ce poste l API n est pas joignable (la forge du site'; \ + : ' n accepte le 443 que des machines qui declarent le flux) — mais qui a la reponse'; \ + : ' peut la donner, au lieu de passer par l interface web :'; \ + : ' make wiki-publier WIKI_REMOTE=... WIKI_BRANCHE=main'; \ + : ' C est la difference entre une garde qui protege et une garde qui bloque.'; \ if ! git -C "$$tmp/wiki" rev-parse --verify --quiet HEAD >/dev/null; then \ - printf '%s\n' 'Refus: ce wiki est VIDE (aucun commit).' \ - 'Publier ici inventerait un nom de branche — sur ce poste `master`, alors que' \ - 'le wiki deja en service vit sur `main`. Creer une premiere page dans' \ - "l interface Forgejo de $(WIKI_REMOTE), puis relancer :" \ - ' make wiki-publier WIKI_REMOTE=...'; \ - exit 2; \ + if [[ -n "$(WIKI_BRANCHE)" ]]; then \ + printf '%s\n' "Wiki vide : initialisation sur la branche declaree « $(WIKI_BRANCHE) »."; \ + git -C "$$tmp/wiki" checkout -q -b "$(WIKI_BRANCHE)"; \ + else \ + printf '%s\n' 'Refus: ce wiki est VIDE (aucun commit).' \ + 'Publier ici inventerait un nom de branche — sur ce poste `master`, alors que' \ + 'le wiki deja en service vit sur `main`. Deux issues :' \ + ' - demander a Forgejo : GET /api/v1/repos// -> `wiki_branch`,' \ + ' puis make wiki-publier WIKI_REMOTE=... WIKI_BRANCHE=' \ + " - ou creer une premiere page dans l interface Forgejo de $(WIKI_REMOTE)"; \ + exit 2; \ + fi; \ fi; \ find "$$tmp/wiki" -maxdepth 1 -name '*.md' -delete; \ for f in "$$src"/*.md; do \ diff --git a/docs/audit/preuve-2026-09-09.md b/docs/audit/preuve-2026-09-09.md index df2a8ab..23775d0 100644 --- a/docs/audit/preuve-2026-09-09.md +++ b/docs/audit/preuve-2026-09-09.md @@ -72,7 +72,7 @@ | P57 | Comptes en prose : les chiffres du depot sur lui-meme | — | ✅ OK | Les comptes ecrits en prose correspondent a la mesure (63 preuves, 66 roles, 40 groupes). | | P58 | Habilitations : chaque service dit a quel GROUPE, et par quoi | — | ✅ OK | 8 habilitation(s) declarees, toutes nommant un groupe, un mecanisme connu et une raison ; les `role-realm` sont projetees. | | P59 | Enumerations annoncees : le nombre correspond a ce qui suit | — | ✅ OK | 2 enumeration(s) annoncee(s) correspondent a ce qu'elles annoncent (formes non ambigues seulement). | -| P60 | Wiki publie : la forge sert ce que le depot dit | AFF-002 | ✅ OK | Le wiki publie correspond au depot : `wiki/` n'a pas bouge depuis `f89b097` (publie le 2026-09-09). | +| P60 | Wiki publie : la forge sert ce que le depot dit | AFF-002 | ✅ OK | Le wiki publie correspond au depot : `wiki/` n'a pas bouge depuis `2d9dc86` (publie le 2026-09-09). | | P61 | Schema du plan : il decrit tout ce que les plans contiennent | AFF-033 | ✅ OK | Le schema decrit 47 champ(s) sur 6 registres ; il couvre tout ce que les plans reels contiennent, et la FORME de chaque champ (scalaire / objet / table) corresp | | P62 | Schema du plan : il decrit tout ce que le MOTEUR accepte | AFF-033 | ✅ OK | Les 4 validateurs n'acceptent aucun champ que le schema ignore (applications:8, bases_donnees:4, domaines_publics:5, serveurs:3 champ(s) lus par validateur). | | P63 | cloud-init nait avec la VM et ne lui survit pas | — | ✅ OK | cloud-init est au gabarit (la premiere seconde), absent du socle (pas de va-et-vient), et retire par le durcissement — avec la garde qui verifie que le reseau s | diff --git a/docs/audit/wiki-publie.yml b/docs/audit/wiki-publie.yml index 526bddd..0cc3ff1 100644 --- a/docs/audit/wiki-publie.yml +++ b/docs/audit/wiki-publie.yml @@ -1,5 +1,5 @@ --- # Ecrit par `make wiki-publier`, lu par la preuve P60. Ne pas editer a la main. -remote: ssh://git@eregion.chezlepro.ca:2222/Alliance-Boreale/Set-OPS-Public.wiki.git -source: f89b097 +remote: ssh://git@forge.genese.internal/genome/set-ops-public.wiki.git +source: 2d9dc86 date: 2026-09-09