[DTP-Worker] Sprint 8 · Générateur Run-book de déploiement VPS unifié (7 phases · 20 modules gated · couverture bijective vs CI) (DevOps · roadmap L73)
Agrégateur de méta-niveau au-dessus du run-book RBAC : ordonne le déploiement VPS de TOUS les livrables gated en 7 phases (Prérequis → DocTypes → RBAC → Workflow/métier → Frontend → Contenu → Vérification QA), avec graphe de dépendances inter-phases acyclique et confirmations préalables sourcées. Anti-invention (#6) : périmètre dérivé du CI (parse_ci réutilisé), couverture bijective module→phase (un module gated non planifié OU un module planifié non gated → refus), SoD (auto-exclusion), zéro chiffre métier (confirmations sourcées via audit_5d D1.1/D1.2/D1.3/D2.3 + endpoint OTOIA). Vérifs : 29/29 tests module (dont 14 injections négatives) · audit_4big PASS 20/20 à 100 · régression run 20/20 suites · 503 tests · 0 échec · gate CI local vert. CI job devops-deploy-runbook-tests + gate ; enregistrement audit_4big (19→20) ; plan régression régénéré (19→20 suites). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
{
|
||||
"runbook": "OTO Enterprise OS · Run-book de déploiement VPS unifié",
|
||||
"version": "1.0",
|
||||
"reference_cadre": "Roadmap Sprint 8 · DevOps « Deployment production complet + monitoring » · CLAUDE.md #8 (VPS pour TOUS projets · le worker n'écrit jamais sur le VPS)",
|
||||
"self_module": "devops/deploy_runbook",
|
||||
"cible_portage": "agent DevOps / ERPNext Backend",
|
||||
"phases": [
|
||||
{
|
||||
"order": 1,
|
||||
"id": "prerequis",
|
||||
"titre": "Prérequis VPS : modules custom OTOV7 + spec RBAC validée",
|
||||
"responsable": "vps",
|
||||
"rationale": "Rien ne s'importe tant que les modules d'application custom (OTOV7 Ventes, OTOV7 CONFOTUR, …) n'existent pas et que le contrat RBAC 50 rôles n'est pas validé comme source de vérité unique.",
|
||||
"depends_on": [],
|
||||
"confirmations": ["custom_modules"]
|
||||
},
|
||||
{
|
||||
"order": 2,
|
||||
"id": "doctypes",
|
||||
"titre": "DocTypes custom (structure) avant tout ce qui les référence",
|
||||
"responsable": "vps",
|
||||
"rationale": "Les Custom DocPerm, le Workflow vente et les Workspaces référencent des DocTypes custom qui doivent exister au préalable (contrainte dure ERPNext v15).",
|
||||
"depends_on": ["prerequis"],
|
||||
"confirmations": ["custom_doctypes"]
|
||||
},
|
||||
{
|
||||
"order": 3,
|
||||
"id": "rbac-apply",
|
||||
"titre": "RBAC : Role + Custom DocPerm + User Permission + Role Profile",
|
||||
"responsable": "worker+vps",
|
||||
"rationale": "Le run-book RBAC (rbac/apply_plan) ordonne déjà ce volet ; on l'insère ici en bloc car les Has Role d'un Role Profile et les DocPerm référencent des Role/DocTypes qui doivent préexister.",
|
||||
"depends_on": ["doctypes"],
|
||||
"confirmations": []
|
||||
},
|
||||
{
|
||||
"order": 4,
|
||||
"id": "workflow-metier",
|
||||
"titre": "Workflow vente + règles métier (commissions, e-CF DGII, dépôts CONFOTUR)",
|
||||
"responsable": "worker+vps",
|
||||
"rationale": "Le Workflow pilote le DocType Dossier Vente et s'appuie sur les rôles ; commissions et e-CF se déclenchent sur ses états soumis. Paramètres réglementaires à confirmer avant activation.",
|
||||
"depends_on": ["doctypes", "rbac-apply"],
|
||||
"confirmations": ["taux_commission", "rnc_emisor", "itbis_tipocambio", "seuil_uaf"]
|
||||
},
|
||||
{
|
||||
"order": 5,
|
||||
"id": "frontend",
|
||||
"titre": "Frontend desk : Workspaces portails + Custom Block chat OTOIA",
|
||||
"responsable": "worker+vps",
|
||||
"rationale": "Les Workspaces (Has Role) et le Custom Block de chat s'ancrent sur les rôles RBAC et les DocTypes déjà en place ; l'endpoint OTOIA reste à renseigner.",
|
||||
"depends_on": ["rbac-apply"],
|
||||
"confirmations": ["endpoint_otoia"]
|
||||
},
|
||||
{
|
||||
"order": 6,
|
||||
"id": "contenu",
|
||||
"titre": "Contenu projets & publication : Publiciste, Faisabilité, Bancable, SEO, Démo",
|
||||
"responsable": "worker+vps",
|
||||
"rationale": "Génération et publication du contenu projet (data_room, dossiers bancables, balises SEO, run-sheet de démo) une fois la plateforme et le frontend en place.",
|
||||
"depends_on": ["workflow-metier", "frontend"],
|
||||
"confirmations": []
|
||||
},
|
||||
{
|
||||
"order": 7,
|
||||
"id": "verification-qa",
|
||||
"titre": "Vérification post-déploiement : HTTP + audits QA (5D · 4Big · régression)",
|
||||
"responsable": "vps",
|
||||
"rationale": "Gate final : vérification HTTP puis exécution des audits de conformité 5D, de qualité 4Big (≥95/100) et de la matrice de régression sur le desk réel.",
|
||||
"depends_on": ["workflow-metier", "frontend", "contenu"],
|
||||
"confirmations": []
|
||||
}
|
||||
],
|
||||
"module_phase": {
|
||||
"rbac": "prerequis",
|
||||
"crm/dossier_vente": "doctypes",
|
||||
"legal/confotur": "doctypes",
|
||||
"rbac/fixtures_gen": "rbac-apply",
|
||||
"rbac/userperm_gen": "rbac-apply",
|
||||
"rbac/roleprofile_gen": "rbac-apply",
|
||||
"rbac/apply_plan": "rbac-apply",
|
||||
"crm/workflow_vente": "workflow-metier",
|
||||
"crm/commissions": "workflow-metier",
|
||||
"fiscal/ecf_dgii": "workflow-metier",
|
||||
"frontend/portails": "frontend",
|
||||
"frontend/chat_otoia": "frontend",
|
||||
"publiciste": "contenu",
|
||||
"faisabilite/generator": "contenu",
|
||||
"faisabilite/bancable": "contenu",
|
||||
"seo": "contenu",
|
||||
"demo/scenarios": "contenu",
|
||||
"qa/audit_5d": "verification-qa",
|
||||
"qa/audit_4big": "verification-qa",
|
||||
"qa/regression": "verification-qa"
|
||||
},
|
||||
"confirmations": {
|
||||
"custom_modules": {
|
||||
"libelle": "Créer les modules d'application custom (OTOV7 Ventes, OTOV7 CONFOTUR, …) avant tout import de fixtures",
|
||||
"owner": "ERPNext Backend",
|
||||
"source": "sessions 12/15/16 · création module OTO Ventes / OTOV7 CONFOTUR (hors périmètre worker · CLAUDE.md #8)"
|
||||
},
|
||||
"custom_doctypes": {
|
||||
"libelle": "Créer les DocTypes custom (OTO Dossier Vente, CONFOTUR Application, Faisabilité, Publiciste Log) avant l'import des Workspaces et du Workflow",
|
||||
"owner": "ERPNext Backend",
|
||||
"source": "session 15 · DocTypes custom à créer avant import Workspaces (run-book RBAC)"
|
||||
},
|
||||
"taux_commission": {
|
||||
"libelle": "Confirmer les taux de commission vendeurs (barème reste taux_pct null tant que non confirmé)",
|
||||
"owner": "Direction",
|
||||
"source": "qa/audit_5d contrôle D1.1 (A_CONFIRMER)"
|
||||
},
|
||||
"rnc_emisor": {
|
||||
"libelle": "Confirmer le RNC émetteur pour l'émission e-CF DGII",
|
||||
"owner": "Compta",
|
||||
"source": "qa/audit_5d contrôle D1.2 (A_CONFIRMER)"
|
||||
},
|
||||
"itbis_tipocambio": {
|
||||
"libelle": "Confirmer le taux ITBIS et le TipoCambio USD/DOP pour l'e-CF",
|
||||
"owner": "Compta Fiscaliste eCF",
|
||||
"source": "qa/audit_5d contrôle D1.3 (A_CONFIRMER)"
|
||||
},
|
||||
"seuil_uaf": {
|
||||
"libelle": "Confirmer le seuil d'opération de déclaration UAF (Ley 155-17)",
|
||||
"owner": "Oficial de Cumplimiento",
|
||||
"source": "qa/audit_5d contrôle D2.3 (A_CONFIRMER)"
|
||||
},
|
||||
"endpoint_otoia": {
|
||||
"libelle": "Renseigner l'endpoint runtime du chat OTOIA (reste null / a_confirmer côté livrable)",
|
||||
"owner": "ERPNext Backend",
|
||||
"source": "session 19 · endpoint OTOIA = null (a_confirmer)"
|
||||
}
|
||||
},
|
||||
"notes": [
|
||||
"Agrégateur de MÉTA-NIVEAU, une couche au-dessus du run-book RBAC (rbac/apply_plan) : il ordonne le déploiement VPS de TOUS les livrables gated du mandat en un seul plan de phases, pas seulement des 3 volets RBAC.",
|
||||
"Périmètre PROUVÉ, pas déclaré : l'ensemble des modules à déployer est DÉRIVÉ de .gitea/workflows/ci.yml (réutilise q4lib/registry.parse_ci — zéro duplication · #5), jamais listé à la main. La couverture module→phase est BIJECTIVE avec le CI (moins le module lui-même).",
|
||||
"Séparation des pouvoirs (ISA 315) : le run-book s'exclut lui-même (self_module) — il ne s'auto-déploie pas et ne se compte pas.",
|
||||
"ANTI-INVENTION (#6) : ce spec ne contient AUCUN chiffre métier (taux, montant, seuil). Les paramètres réglementaires non confirmés restent des CONFIRMATIONS sourcées (owner + source), jamais une valeur fabriquée « pour faire PASS ». Chaque confirmation cite sa source (contrôle audit_5d ou session).",
|
||||
"Le worker N'ÉCRIT JAMAIS sur le VPS (CLAUDE.md #8) : ce module produit un plan ordonné en-repo ; l'application réelle (bench migrate, imports, vérifications HTTP) reste côté serveur, pilotée par l'agent DevOps / ERPNext Backend."
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user