{
  "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 »",
  "pass_score": 95,
  "coverage": {
    "ok": true,
    "ci_modules_count": 24,
    "registry_modules_count": 24,
    "missing_in_registry": [],
    "missing_in_ci": [],
    "not_in_gate": [],
    "self_module_excluded": "qa/audit_4big"
  },
  "criteria": [
    {
      "id": "DOC",
      "label": "Documentation livrable (README / SPEC ≥ seuil)",
      "weight": 20
    },
    {
      "id": "CONTRAT",
      "label": "Contrat de sortie explicite (*.schema.json)",
      "weight": 20
    },
    {
      "id": "TESTS",
      "label": "Couverture de tests (≥ seuil de méthodes test_*)",
      "weight": 25
    },
    {
      "id": "CLI",
      "label": "CLI reproductible (entrypoint __main__ + sous-commandes argparse)",
      "weight": 15
    },
    {
      "id": "HANDOFF",
      "label": "Hand-off VPS présent et intègre (out/MANIFEST.json + artefact JSON valide)",
      "weight": 20
    }
  ],
  "modules": [
    {
      "id": "publiciste",
      "path": "publiciste",
      "sprint": "S2",
      "archetype": "parser",
      "applicable_weight": 60,
      "earned_weight": 60,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (3901 octets)"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "22 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "publiciste.py (argparse + __main__)"
        }
      ]
    },
    {
      "id": "rbac",
      "path": "rbac",
      "sprint": "S2",
      "archetype": "contract",
      "applicable_weight": 65,
      "earned_weight": 65,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "RBAC_50_ROLES_SPEC.md (10039 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "rbac.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "10 méthodes test_* dans 1 fichier(s) (seuil 8)"
        }
      ]
    },
    {
      "id": "rbac-applyplan",
      "path": "rbac/apply_plan",
      "sprint": "S2",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (5267 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "apply_plan.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "16 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "rbac_apply_plan.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 1 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "rbac-fixtures",
      "path": "rbac/fixtures_gen",
      "sprint": "S2",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (3876 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "fixtures.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "11 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "rbac_fixtures_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 2 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "rbac-roleprofile",
      "path": "rbac/roleprofile_gen",
      "sprint": "S2",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (5376 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "roleprofile.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "11 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "roleprofile_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 1 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "rbac-userperm",
      "path": "rbac/userperm_gen",
      "sprint": "S2",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (5259 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "userperm.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "12 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "userperm_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 1 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "bancable",
      "path": "faisabilite/bancable",
      "sprint": "S3",
      "archetype": "data_room",
      "applicable_weight": 80,
      "earned_weight": 80,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (6439 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "bancable.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "22 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "bancable_gen.py (argparse + __main__)"
        }
      ]
    },
    {
      "id": "faisabilite-generator",
      "path": "faisabilite/generator",
      "sprint": "S3",
      "archetype": "data_room",
      "applicable_weight": 80,
      "earned_weight": 80,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (4797 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "brief.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "16 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "faisabilite_gen.py (argparse + __main__)"
        }
      ]
    },
    {
      "id": "crm-commissions",
      "path": "crm/commissions",
      "sprint": "S4",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (4838 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "bareme.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "25 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "commissions_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 1 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "crm-dossier-vente",
      "path": "crm/dossier_vente",
      "sprint": "S4",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (4383 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "doctype.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "31 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "doctype_dossier_vente_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 1 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "crm-financement-bancaire",
      "path": "crm/financement_bancaire",
      "sprint": "S4",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (6280 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "financement.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "35 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "financement_bancaire_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 6 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "crm-workflow-vente",
      "path": "crm/workflow_vente",
      "sprint": "S4",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (6852 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "workflow.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "25 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "workflow_vente_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 3 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "fiscal-ecf",
      "path": "fiscal/ecf_dgii",
      "sprint": "S4",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (6064 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "ecf.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "39 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "ecf_dgii_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 1 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "frontend-portails",
      "path": "frontend/portails",
      "sprint": "S4",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (5109 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "workspace.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "19 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "workspaces_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 1 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "legal-confotur",
      "path": "legal/confotur",
      "sprint": "S5",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (4888 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "confotur.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "44 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "confotur_application_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 1 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "mobile-app-config",
      "path": "mobile/app_config",
      "sprint": "S5",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (4931 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "mobile.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "22 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "app_config_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 4 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "qa-audit-5d",
      "path": "qa/audit_5d",
      "sprint": "S5",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (4374 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "audit.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "37 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "audit_5d_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 1 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "frontend-chat-otoia",
      "path": "frontend/chat_otoia",
      "sprint": "S6",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (3762 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "chat.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "31 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "chat_otoia_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 2 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "seo",
      "path": "seo",
      "sprint": "S6",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (3901 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "seo.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "36 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "seo_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 3 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "demo-scenarios",
      "path": "demo/scenarios",
      "sprint": "S7",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (5575 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "scenario.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "39 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "demo_scenario_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 1 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "devops-deploy-runbook",
      "path": "devops/deploy_runbook",
      "sprint": "S8",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (5512 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "deploy.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "29 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "deploy_runbook_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 1 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "pie-manifest",
      "path": "pie/manifest",
      "sprint": "S8",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (4015 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "pie.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "20 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "pie_manifest_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 1 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "qa-acceptance",
      "path": "qa/acceptance",
      "sprint": "S8",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (4061 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "acceptance.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "37 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "acceptance_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 1 artefact(s) JSON valides"
        }
      ]
    },
    {
      "id": "qa-regression",
      "path": "qa/regression",
      "sprint": "S8",
      "archetype": "generator",
      "applicable_weight": 100,
      "earned_weight": 100,
      "score": 100,
      "verdict": "PASS",
      "checks": [
        {
          "criterion": "DOC",
          "weight": 20,
          "passed": true,
          "evidence": "README.md (4948 octets)"
        },
        {
          "criterion": "CONTRAT",
          "weight": 20,
          "passed": true,
          "evidence": "regression.schema.json"
        },
        {
          "criterion": "TESTS",
          "weight": 25,
          "passed": true,
          "evidence": "26 méthodes test_* dans 1 fichier(s) (seuil 8)"
        },
        {
          "criterion": "CLI",
          "weight": 15,
          "passed": true,
          "evidence": "regression_gen.py (argparse + __main__)"
        },
        {
          "criterion": "HANDOFF",
          "weight": 20,
          "passed": true,
          "evidence": "MANIFEST + 2 artefact(s) JSON valides"
        }
      ]
    }
  ],
  "totals": {
    "modules": 24,
    "pass": 24,
    "fail": 0,
    "min_score": 100,
    "max_score": 100,
    "pass_rate_pct": 100
  },
  "verdict": "PASS",
  "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)."
  ]
}
