[DTP-Worker] Sprint 8 · buffer · DevOps/CI : gate d'IDENTITÉ des identifiants d'infrastructure VPS (IP 153.75.250.214 + conteneurs Docker erpnext-backend-1/erpnext-frontend-1) — recomputés de CLAUDE.md §VPS · direction copie→source sur toute doc .md du mandat (hors journaux) · enveloppe conteneur DÉRIVÉE des stems service (backend/frontend) et non du préfixe compose ⇒ un renommage erpnext-*→oto-* mord · migration serveur cascade sur les 10 copies

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-08-01 15:15:24 +00:00
parent 9963279879
commit 290bd2ec02
3 changed files with 185 additions and 1 deletions
+74
View File
@@ -1634,3 +1634,77 @@ source constitutionnelle) ; restauré = green : renderer/test == #9/#10 (6 marqu
édition **hors** `05_deliverables_mvp/*/out` ⇒ 0 dérive d'artefact ; la génération
réelle des faisabilités reste côté BIM/Faisabilité).
- **Auto-score 4Big** : 96/100.
## Session `20260801_150344` · Buffer S8 · Domaine DevOps CI/CD : gate d'**IDENTITÉ des IDENTIFIANTS D'INFRASTRUCTURE VPS** (IP `153.75.250.214` + les DEUX conteneurs Docker `erpnext-backend-1`/`erpnext-frontend-1`) ancré sur **CLAUDE.md §VPS** — surface data-derived jusqu'ici **HORS de tout ancrage**.
**Tâche** : **Sprint 8 · buffer** (DevOps CI/CD · QA). Roadmap fonctionnellement
close ; poursuite de la série anti-dérive d'ANCRAGE à CLAUDE.md (classe
[[claude-md-constant-anchor-gate]] + [[agent-fiche-role-attrs-ungated]], surface
**infra ~ endpoint RunPod**). **Même patron EXACT** que le gate « endpoint GPU
RunPod » (session 130325 : un identifiant d'infra hand-transcrit dans N docs,
recomputé de la source in-repo faisant autorité) — appliqué ici aux identifiants
**serveur** dont la source de vérité est **constitutionnelle** (CLAUDE.md §VPS).
**Dérive silencieuse fermée** : CLAUDE.md §VPS FIXE l'IP du VPS `153.75.250.214`
et les 2 conteneurs Docker `erpnext-backend-1`/`erpnext-frontend-1`. Ces
identifiants sont RECOPIÉS À LA MAIN dans ~10 endroits, sans AUCUN ancrage :
- `README.md` (×2 · VPS hors périmètre + dépôt Gitea) · `02_master_prompt/
MASTER_PROMPT_DTP_v2.md` (IP ×2 + les 2 conteneurs) · `AGENTS_EXISTING_ASSETS.md`
(IP + 2 conteneurs) · `03_agents/mobile/AGENT.md` (`erpnext-backend-1`, backend
cible de l'API) · `05_deliverables_mvp/rbac/RBAC_50_ROLES_SPEC.md` (run-book
d'import) · `05_deliverables_mvp/GAP_ANALYSIS_SPRINT1.md` · `tests/README.md`
(base URL Playwright) · `ci/README.md` (instance Gitea).
- Aucun gate ne couvrait ce lien : `check_docs` ne voit qu'un lien Markdown,
`guard_constraints` qu'un terme interdit, `check_artifacts` qu'un `out/` — une IP
ni un nom de conteneur n'est aucun des trois. Aucune suite `tests/` (FONCTIONS
des modules, jamais la prose infra) ne l'attrape.
- Drift la plus réaliste, #6 : une **MIGRATION serveur** (nouvelle IP) ou un
**RENOMMAGE du projet compose** (`erpnext-*` → `oto-*`) — évènement ops COURANT :
CLAUDE.md §VPS se met à jour, les ~10 copies se PÉRIMENT en silence → un agent
câblerait l'API mobile / les tests e2e / le hand-off d'import vers un serveur
MORT ou un conteneur FANTÔME (l'invention même que #6 interdit).
- **État courant** : aucune copie périmée — l'unique IPv4 du corpus == canonique,
les seuls conteneurs cités ⊆ l'ensemble canonique (vérifié programmatiquement
AVANT édition). Le défaut est la **surface ungated**.
**Gate ajouté** (`ci/check_readme_claims.sh`, nouveau bloc « CLAUDE.md §VPS · IDENTITÉ
des IDENTIFIANTS D'INFRASTRUCTURE » avant `sys.exit`) : RE-DÉRIVE l'IP + l'ENSEMBLE
des conteneurs de CLAUDE.md §VPS (`^## VPS` → `IP <v4>` + `Docker (…)`, jamais une
liste à la main · #6 ; garde « section/format introuvable » = ancre morte).
Direction copie→source sur `git ls-files '*.md'` (hors `CLAUDE.md` = source, hors
`05_activity_log/` + `daily_reports/` = journaux figés à ne pas réécrire) : tout
token **IPv4** DOIT == l'IP canonique ; tout token **conteneur** DOIT ∈ l'ensemble
canonique. Garde anti-évaporation (IP ET ≥1 conteneur restent cités quelque part).
Le write-path interdit `/var/www/html/static` reste du ressort de
`guard_constraints`, non de ce gate d'identité.
**Piège de conception CORRIGÉ en vérif adversariale** : 1ʳᵉ version ancrait
l'enveloppe conteneur sur le préfixe LITTÉRAL `erpnext-[a-z]+-1` → un renommage de
projet compose dans une copie (`erpnext-backend-1` → `oto-backend-1`, le drift MÊME
qu'on vise) ne matchait plus le shape et **PASSAIT en silence** (M2 vert à tort).
Correctif : l'enveloppe est DÉRIVÉE des **stems de service** canoniques
(`backend`/`frontend`) via `[a-z0-9]+-(?:backend|frontend)-1`, PAS du préfixe →
`oto-backend-1` est vu comme fantôme. Le filtre source est lui aussi générique
(`[a-z0-9]+-[a-z]+-1`) pour que M4 (renommage DANS §VPS) cascade avec un message
utile plutôt qu'un « format modifié » crude.
**5 morsures vérifiées** (mutations sur fichiers DONNÉES uniquement, restaurées par
`git checkout -- <path>` ciblé — **JAMAIS** `git clean`/`checkout` large avec le
gate décommité en cours, interdit absolu + incident process en mémoire) : (M1) IP
périmée dans `README.md` (serveur migré, copie non mise à jour) → stale · (M2)
conteneur `erpnext-backend-1→oto-backend-1` dans le master prompt (compose renommé)
→ fantôme (après correctif) · (M3) IP changée DANS CLAUDE.md §VPS → **cascade sur
les 5 docs citant l'IP** · (M4) conteneurs renommés DANS §VPS → **cascade fantôme
sur les 4 docs citant un conteneur** avec message utile · (M5) header `## VPS`
retiré → ancre morte. Restauré = green : 10 assertions VPS infra (5 IP + 5
conteneur) · exit 0. **7 gates re-verts** (`check_readme_claims`/`check_artifacts`/
`check_ci_integrity`/`check_docs`/`guard_constraints`/`check_regression`/
`validate_json`).
- `ci/README.md` (clause récap du pipeline `check-readme-claims` : sous-clause
« identité d'infrastructure VPS ») mise à jour — et désormais **elle-même couverte
par le gate** (elle gagne les tokens conteneur/IP canoniques, tous verts).
- **Hors périmètre worker (VPS · #8)** : néant (gate bash/python3 stdlib en-repo ;
édition **hors** `05_deliverables_mvp/*/out` ⇒ 0 dérive d'artefact ; la migration
serveur réelle + le renommage compose restent côté DevOps/VPS production).
- **Auto-score 4Big** : 96/100.