diff --git a/CHANGELOG.md b/CHANGELOG.md index 838a541..90f8f41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,34 @@ # CHANGELOG — Set-OPS +## 2026-08-25 — Le génome vit sur la forge du SITE + +Six dépôts, 606 commits, chaque tête confrontée entre le poste et la forge : **identique**. +Le génome ne dépend plus d'un écosystème pour se reproduire. + +L'ancienne forge de patient 0 devient un second remote, nommé `patient0` — elle n'est pas +remplacée. Le README de patient 0 exige que le génome vive en **au moins trois endroits +sans coordination** : *« n'importe quel survivant réamorce les autres. Une famille, pas un +maître. »* La forge du site en fait un quatrième. + +### On vérifie l'état, on ne fait pas confiance au drapeau + +Toute l'API de la forge rendait **403**. Ni 401, ni un message de droits : jeton valide, +identité reconnue, requête rejetée. On cherche un scope, une politique, une capacité — et +la cause est un drapeau sur le compte, `must-change-password`. + +Le rôle passait pourtant **déjà** `--must-change-password=false`, corrigé le 2026-08-23 +sur la première forge de patient 0. **Forgejo 16 a ignoré l'option** : le compte est né +avec le drapeau posé malgré elle. La correction d'il y a deux jours ne protégeait plus +rien, et rien ne le disait. + +D'où la forme du remède : le rôle ne demande plus à la création de bien se comporter, il +**constate l'état voulu et le rétablit** — une tâche idempotente, sans effet quand la +création a tenu parole. C'est la même leçon que le `changed=` d'Ansible qui ne prouve pas +un service : *vérifier l'état, pas l'intention*. + +Le jeton d'amorçage est créé localement par la CLI : un mot de passe d'administrateur n'a +pas à circuler pour créer six dépôts. + ## 2026-08-25 — Un SITE a bien un plan J'ai passé la journée à répéter qu'un SITE n'est pas un plan. **C'était faux**, et le diff --git a/roles/serveur_forgejo/tasks/main.yml b/roles/serveur_forgejo/tasks/main.yml index bf6b672..3d4c9c1 100644 --- a/roles/serveur_forgejo/tasks/main.yml +++ b/roles/serveur_forgejo/tasks/main.yml @@ -323,6 +323,34 @@ GITEA_WORK_DIR: "{{ serveur_forgejo_data }}" no_log: true +# ON VERIFIE L'ETAT, ON NE FAIT PAS CONFIANCE AU DRAPEAU (2026-08-25). +# +# La creation passe deja `--must-change-password=false` — corrige le 2026-08-23, sur la +# premiere forge de patient 0. **Forgejo 16 l'a ignore** : le compte de la forge du SITE +# est ne avec le drapeau POSE malgre l'option. +# +# La panne qui en resulte n'accuse rien de juste : toute requete d'API rend **403**, pas +# 401. Le jeton est valide, l'identite reconnue, la requete rejetee quand meme — on +# cherche un scope, un droit, une politique, et la cause est un drapeau sur le compte. +# +# D'ou cette tache : elle ne demande pas a la creation de bien se comporter, elle CONSTATE +# l'etat voulu et le retablit. Idempotente, et sans effet quand la creation a tenu parole. +- name: Le compte d'administration ne doit exiger aucun changement de mot de passe + ansible.builtin.command: + cmd: >- + {{ serveur_forgejo_binaire }} admin user must-change-password --unset + {{ serveur_forgejo_admin_user }} + --config {{ serveur_forgejo_config }} + become: true + become_user: "{{ serveur_forgejo_utilisateur }}" + environment: + FORGEJO_WORK_DIR: "{{ serveur_forgejo_data }}" + register: forgejo_mcp + changed_when: "'Updated 1 users' in (forgejo_mcp.stdout | default(''))" + failed_when: + - forgejo_mcp.rc != 0 + - "'not found' not in (forgejo_mcp.stderr | default(''))" + - name: Configurer la source OAuth2 SSO (Keycloak, idempotent) ansible.builtin.shell: executable: /bin/bash