{ "audit": "OTO QA · Audit 4Big Qualité", "version": "1.0", "reference_cadre": "CLAUDE.md #5 (score minimum 95/100 · niveau 4Big obligatoire) · Roadmap Sprint 7 · QA « Audit 4Big niveau 95+/100 sur 100% deliverables »", "thresholds": { "pass_score": 95, "min_doc_bytes": 400, "min_test_methods": 8 }, "seuil_note": "pass_score = 95 est repris VERBATIM de CLAUDE.md #5. min_doc_bytes / min_test_methods sont des planchers structurels (pas des chiffres métier) — aucun chiffre de projet n'est fabriqué ici.", "criteria": [ { "id": "DOC", "label": "Documentation livrable (README / SPEC ≥ seuil)", "weight": 20, "reference": "4Big · un livrable non documenté n'est pas bancable (check_docs.sh)" }, { "id": "CONTRAT", "label": "Contrat de sortie explicite (*.schema.json)", "weight": 20, "reference": "4Big · toute sortie hand-off est validée contre un schéma draft-07" }, { "id": "TESTS", "label": "Couverture de tests (≥ seuil de méthodes test_*)", "weight": 25, "reference": "4Big · zéro régression silencieuse — le gate CI exige des tests" }, { "id": "CLI", "label": "CLI reproductible (entrypoint __main__ + sous-commandes argparse)", "weight": 15, "reference": "Workflow #2 · build/validate reproductible sans réseau (Gitea Actions)" }, { "id": "HANDOFF", "label": "Hand-off VPS présent et intègre (out/MANIFEST.json + artefact JSON valide)", "weight": 20, "reference": "#8 VPS · chaque générateur produit un hand-off importable côté desk" } ], "archetypes": { "generator": { "description": "Produit un hand-off out/ importable côté VPS (fixtures/plan Frappe). Les 5 critères s'appliquent.", "applicable": ["DOC", "CONTRAT", "TESTS", "CLI", "HANDOFF"] }, "data_room": { "description": "Écrit dans data_room/PXX (template faisabilité / dossier bancable), pas de hand-off out/. HANDOFF non applicable.", "applicable": ["DOC", "CONTRAT", "TESTS", "CLI"] }, "parser": { "description": "Parse data_room/ → projets_master.json ; son contrat de sortie vit chez le consommateur (faisabilite/projets_master.schema.json). CONTRAT local et HANDOFF non applicables.", "applicable": ["DOC", "TESTS", "CLI"] }, "contract": { "description": "Contrat de données pur (JSON + schéma + tests), sans entrypoint exécutable. CLI et HANDOFF non applicables.", "applicable": ["DOC", "CONTRAT", "TESTS"] } }, "self_module": "qa/audit_4big", "self_note": "L'auditeur ne s'auto-audite pas (séparation des pouvoirs · ISA 315). Le périmètre couvre 100% des AUTRES livrables gated par le CI. La couverture est prouvée par l'invariant : {working-directory CI sous 05_deliverables_mvp} \\ {self_module} == {modules registre}.", "modules": [ { "id": "publiciste", "path": "publiciste", "sprint": "S2", "archetype": "parser", "source": "roadmap Sprint 2 · Publiciste (parser faisabilité → projets_master.json) · ci.yml publiciste-tests" }, { "id": "rbac", "path": "rbac", "sprint": "S2", "archetype": "contract", "source": "roadmap Sprint 2 · RBAC 50 rôles (contrat rbac_50_roles.json) · ci.yml rbac-tests" }, { "id": "faisabilite-generator", "path": "faisabilite/generator", "sprint": "S2", "archetype": "data_room", "source": "roadmap Sprint 2 · Faisabilité générateur 4 volets → data_room/PXX · ci.yml faisabilite-gen-tests" }, { "id": "rbac-fixtures", "path": "rbac/fixtures_gen", "sprint": "S2", "archetype": "generator", "source": "roadmap Sprint 2 · fixtures Role + Custom DocPerm · ci.yml rbac-fixtures-tests" }, { "id": "rbac-userperm", "path": "rbac/userperm_gen", "sprint": "S2", "archetype": "generator", "source": "roadmap Sprint 2 · plan User Permission · ci.yml rbac-userperm-tests" }, { "id": "rbac-roleprofile", "path": "rbac/roleprofile_gen", "sprint": "S2", "archetype": "generator", "source": "roadmap Sprint 2 · Role Profile par portail · ci.yml rbac-roleprofile-tests" }, { "id": "rbac-applyplan", "path": "rbac/apply_plan", "sprint": "S2", "archetype": "generator", "source": "roadmap Sprint 2 · agrégateur run-book RBAC · ci.yml rbac-applyplan-tests" }, { "id": "bancable", "path": "faisabilite/bancable", "sprint": "S3", "archetype": "data_room", "source": "roadmap Sprint 3 · dossier bancable trilingue → data_room/PXX/50_financier_bancable · ci.yml bancable-tests" }, { "id": "crm-workflow-vente", "path": "crm/workflow_vente", "sprint": "S4", "archetype": "generator", "source": "roadmap Sprint 4 · workflow vente lead→CONFOTUR · ci.yml crm-workflow-vente-tests" }, { "id": "crm-dossier-vente", "path": "crm/dossier_vente", "sprint": "S4", "archetype": "generator", "source": "roadmap Sprint 4 · DocType OTO Dossier Vente · ci.yml crm-dossier-vente-tests" }, { "id": "crm-commissions", "path": "crm/commissions", "sprint": "S4", "archetype": "generator", "source": "roadmap Sprint 4 · barème commissions vendeurs · ci.yml crm-commissions-tests" }, { "id": "crm-financement-bancaire", "path": "crm/financement_bancaire", "sprint": "S4", "archetype": "generator", "source": "roadmap Sprint 4 · workflow vente end-to-end (volet financement bancaire) · DIRECTIVE_FINANCEMENT_BANCAIRE_COMPLET_20260803.md · ci.yml crm-financement-bancaire-tests" }, { "id": "fiscal-ecf", "path": "fiscal/ecf_dgii", "sprint": "S4", "archetype": "generator", "source": "roadmap Sprint 4 · e-CF DGII Compupar · ci.yml fiscal-ecf-tests" }, { "id": "frontend-portails", "path": "frontend/portails", "sprint": "S4", "archetype": "generator", "source": "roadmap Sprint 4 · Workspaces 5 portails rôle · ci.yml frontend-portails-tests" }, { "id": "legal-confotur", "path": "legal/confotur", "sprint": "S5", "archetype": "generator", "source": "roadmap Sprint 5 · DocType CONFOTUR Application · ci.yml legal-confotur-tests" }, { "id": "qa-audit-5d", "path": "qa/audit_5d", "sprint": "S5", "archetype": "generator", "source": "roadmap Sprint 5 · Audit 5D conformité · ci.yml qa-audit-5d-tests" }, { "id": "seo", "path": "seo", "sprint": "S6", "archetype": "generator", "source": "roadmap Sprint 6 · SEO trilingue mots-clés/schema.org/hreflang · ci.yml seo-tests" }, { "id": "frontend-chat-otoia", "path": "frontend/chat_otoia", "sprint": "S6", "archetype": "generator", "source": "roadmap Sprint 6 · Chat OTOIA embarqué (Custom Block) · ci.yml chat-otoia-tests" }, { "id": "demo-scenarios", "path": "demo/scenarios", "sprint": "S7", "archetype": "generator", "source": "roadmap Sprint 7 · Scénarios démo (P07 banquier / P05 client) · ci.yml demo-scenario-tests" }, { "id": "qa-regression", "path": "qa/regression", "sprint": "S8", "archetype": "generator", "source": "roadmap Sprint 8 · Regression tests exhaustifs (matrice méta-niveau) · ci.yml qa-regression-tests" }, { "id": "devops-deploy-runbook", "path": "devops/deploy_runbook", "sprint": "S8", "archetype": "generator", "source": "roadmap Sprint 8 · DevOps Deployment production complet (run-book VPS unifié) · ci.yml devops-deploy-runbook-tests" }, { "id": "qa-acceptance", "path": "qa/acceptance", "sprint": "S8", "archetype": "generator", "source": "roadmap Sprint 8 · QA buffer (matrice d'acceptation / traçabilité MVP roadmap → preuve) · ci.yml qa-acceptance-tests" }, { "id": "mobile-app-config", "path": "mobile/app_config", "sprint": "S5", "archetype": "generator", "source": "roadmap Sprint 5 · Mobile (config app Expo/EAS + navigation par rôle) · ci.yml mobile-app-config-tests" } ], "notes": [ "Audit de MÉTA-NIVEAU : chaque note de module est CALCULÉE depuis des faits du dépôt (présence README/schéma, nombre de méthodes test_*, entrypoint CLI, intégrité out/) — jamais saisie à la main (#6).", "Un critère non applicable à l'archétype d'un module est EXCLU du dénominateur (pas de pénalité pour un hand-off qu'un module de contrat n'a jamais vocation à produire) ; les poids restants sont renormalisés à 100.", "Le verdict global est PASS si et seulement si TOUS les modules du registre atteignent ≥ 95/100 ET la couverture == 100% des livrables gated (hors auditeur)." ] }