[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,173 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://oto-enterprise-os-dtp/devops/deploy.schema.json",
|
||||
"title": "Run-book de déploiement VPS unifié (agrégat de tous les livrables gated)",
|
||||
"description": "Contrat de sortie de deploy_runbook_gen.py. Validé par le validateur maison Publiciste (zéro pip) dans le job CI devops-deploy-runbook-tests. Ordonne le déploiement VPS de TOUS les livrables gated du mandat en un plan de phases dérivé de .gitea/workflows/ci.yml. Aucun chiffre métier : les paramètres non confirmés restent des confirmations sourcées.",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["runbook", "manifest"],
|
||||
"properties": {
|
||||
"runbook": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": { "$ref": "#/definitions/phase" }
|
||||
},
|
||||
"manifest": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"generated_from",
|
||||
"reference_cadre",
|
||||
"cible_portage",
|
||||
"self_module",
|
||||
"counts",
|
||||
"coverage",
|
||||
"graph",
|
||||
"confirmations_ouvertes"
|
||||
],
|
||||
"properties": {
|
||||
"generated_from": { "type": "string", "minLength": 1 },
|
||||
"reference_cadre": { "type": "string", "minLength": 1 },
|
||||
"cible_portage": { "type": "string", "minLength": 1 },
|
||||
"self_module": { "type": "string", "const": "devops/deploy_runbook" },
|
||||
"counts": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"phases",
|
||||
"modules",
|
||||
"modules_mapped",
|
||||
"confirmations",
|
||||
"confirmations_referenced"
|
||||
],
|
||||
"properties": {
|
||||
"phases": { "type": "integer", "minimum": 1 },
|
||||
"modules": { "type": "integer", "minimum": 1 },
|
||||
"modules_mapped": { "type": "integer", "minimum": 1 },
|
||||
"confirmations": { "type": "integer", "minimum": 0 },
|
||||
"confirmations_referenced": { "type": "integer", "minimum": 0 }
|
||||
}
|
||||
},
|
||||
"coverage": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"ci_modules_count",
|
||||
"mapped_modules_count",
|
||||
"bijective",
|
||||
"missing_in_map",
|
||||
"extra_in_map",
|
||||
"unknown_phase",
|
||||
"self_module_excluded"
|
||||
],
|
||||
"properties": {
|
||||
"ci_modules_count": { "type": "integer", "minimum": 1 },
|
||||
"mapped_modules_count": { "type": "integer", "minimum": 1 },
|
||||
"bijective": { "type": "boolean", "const": true },
|
||||
"missing_in_map": {
|
||||
"type": "array",
|
||||
"uniqueItems": true,
|
||||
"items": { "type": "string", "minLength": 1 }
|
||||
},
|
||||
"extra_in_map": {
|
||||
"type": "array",
|
||||
"uniqueItems": true,
|
||||
"items": { "type": "string", "minLength": 1 }
|
||||
},
|
||||
"unknown_phase": {
|
||||
"type": "array",
|
||||
"uniqueItems": true,
|
||||
"items": { "type": "string", "minLength": 1 }
|
||||
},
|
||||
"self_module_excluded": { "type": "string", "const": "devops/deploy_runbook" }
|
||||
}
|
||||
},
|
||||
"graph": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["phase_order", "orphan_confirmations", "unknown_confirmations"],
|
||||
"properties": {
|
||||
"phase_order": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"uniqueItems": true,
|
||||
"items": { "type": "string", "pattern": "^[a-z0-9-]+$" }
|
||||
},
|
||||
"orphan_confirmations": {
|
||||
"type": "array",
|
||||
"uniqueItems": true,
|
||||
"items": { "type": "string", "minLength": 1 }
|
||||
},
|
||||
"unknown_confirmations": {
|
||||
"type": "array",
|
||||
"uniqueItems": true,
|
||||
"items": { "type": "string", "minLength": 1 }
|
||||
}
|
||||
}
|
||||
},
|
||||
"confirmations_ouvertes": {
|
||||
"type": "array",
|
||||
"uniqueItems": true,
|
||||
"items": { "type": "string", "minLength": 1 }
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"definitions": {
|
||||
"phase": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"order",
|
||||
"id",
|
||||
"titre",
|
||||
"responsable",
|
||||
"rationale",
|
||||
"depends_on",
|
||||
"modules",
|
||||
"confirmations"
|
||||
],
|
||||
"properties": {
|
||||
"order": { "type": "integer", "minimum": 1 },
|
||||
"id": { "type": "string", "pattern": "^[a-z0-9-]+$" },
|
||||
"titre": { "type": "string", "minLength": 1 },
|
||||
"responsable": { "type": "string", "enum": ["worker", "vps", "worker+vps"] },
|
||||
"rationale": { "type": "string", "minLength": 1 },
|
||||
"depends_on": {
|
||||
"type": "array",
|
||||
"uniqueItems": true,
|
||||
"items": { "type": "string", "pattern": "^[a-z0-9-]+$" }
|
||||
},
|
||||
"modules": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": { "$ref": "#/definitions/module" }
|
||||
},
|
||||
"confirmations": {
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/definitions/confirmation" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"module": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["module", "ci_job"],
|
||||
"properties": {
|
||||
"module": { "type": "string", "minLength": 1 },
|
||||
"ci_job": { "type": "string", "minLength": 1 }
|
||||
}
|
||||
},
|
||||
"confirmation": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["id", "libelle", "owner", "source"],
|
||||
"properties": {
|
||||
"id": { "type": "string", "pattern": "^[a-z0-9_]+$" },
|
||||
"libelle": { "type": "string", "minLength": 1 },
|
||||
"owner": { "type": "string", "minLength": 1 },
|
||||
"source": { "type": "string", "minLength": 1 }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user