Essai 1 - trace brute assainie

Essai 1 - sortie brute

Contenu conserve tel que produit. Seuls les chemins et adresses internes eventuels sont neutralises.

```json
{
  "index_html": "<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Carnet des heures manquantes</title>\n    <style>\n        body { font-family: Arial, sans-serif; }\n        .event { margin-bottom: 10px; padding: 5px; border: 1px solid #ccc; }\n        .filter { margin-bottom: 20px; }\n        .summary { margin-top: 20px; font-weight: bold; }\n    </style>\n</head>\n<body>\n    <div class=\"filter\">\n        <button onclick=\"filterEvents('all')\">Tous</button>\n        <button onclick=\"filterEvents('note')\">Notes</button>\n        <button onclick=\"filterEvents('decision')\">Décisions</button>\n        <button onclick=\"filterEvents('question')\">Questions</button>\n    </div>\n    <div id=\"events\"></div>\n    <div class=\"summary\" id=\"summary\"></div>\n\n    <script>\n        const events = [\n            { heure: '09:10', type: 'note', texte: 'Café, reprise du chantier WSL.' },\n            { heure: '11:40', type: 'decision', texte: 'Garder le local comme socle principal.' },\n            { heure: '18:05', type: 'question', texte: 'Quel modèle léger utiliser pour les brouillons ?' },\n            { heure: '23:20', type: 'note', texte: '' }\n        ];\n\n        function displayEvents(filter = 'all') {\n            const eventContainer = document.getElementById('events');\n            eventContainer.innerHTML = '';\n            events.forEach(event => {\n                if (filter === 'all' || filter === event.type) {\n                    const eventElement = document.createElement('div');\n                    eventElement.className = `event ${event.type}`;\n                    eventElement.textContent = `${event.heure} - ${event.texte || 'Texte manquant'}`;\n                    eventContainer.appendChild(eventElement);\n                }\n            });\n        }\n\n        function filterEvents(type) {\n            displayEvents(type);\n            updateSummary();\n        }\n\n        function updateSummary() {\n            const summary = document.getElementById('summary');\n            const totalNotes = events.filter(e => e.type === 'note').length;\n            const totalDecisions = events.filter(e => e.type === 'decision').length;\n            const totalQuestions = events.filter(e => e.type === 'question').length;\n            summary.textContent = `Notes: ${totalNotes}, Décisions: ${totalDecisions}, Questions: ${totalQuestions}`;\n        }\n\n        document.addEventListener('DOMContentLoaded', () => {\n            displayEvents();\n            updateSummary();\n        });\n    </script>\n</body>\n</html>",
  "test_js": "const events = [\n    { heure: '09:10', type: 'note', texte: 'Café, reprise du chantier WSL.' },\n    { heure: '11:40', type: 'decision', texte: 'Garder le local comme socle principal.' },\n    { heure: '18:05', type: 'question', texte: 'Quel modèle léger utiliser pour les brouillons ?' },\n    { heure: '23:20', type: 'note', texte: '' }\n];\n\nfunction countEventsByType(type) {\n    return events.filter(event => event.type === type).length;\n}\n\nif (countEventsByType('note') !== 2 || countEventsByType('decision') !== 1 || countEventsByType('question') !== 1) {\n    process.exit(1);\n}\n\nevents.forEach(event => {\n    if (event.heure === '23:20' && event.texte.trim() !== '') {\n        process.exit(1);\n    }\n});\n\nprocess.exit(0);"
}
```