Essai 2 - trace brute assainie

Essai 2 - 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; }\n        #filters button { margin-right: 5px; }\n        @media (max-width: 600px) {\n            body { font-size: 14px; }\n        }\n    </style>\n</head>\n<body>\n    <h1>Carnet des heures manquantes</h1>\n    <div id=\"filters\">\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 id=\"summary\"></div>\n\n    <script>\n        const eventsData = [\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\"}\n        ];\n\n        function renderEvents(filter = 'all') {\n            const eventsContainer = document.getElementById('events');\n            eventsContainer.innerHTML = '';\n            let count = 0;\n            eventsData.forEach(event => {\n                if (filter === 'all' || event.type === filter) {\n                    const eventElement = document.createElement('div');\n                    eventElement.className = `event ${event.type}`;\n                    eventElement.textContent = `${event.heure} - ${event.texte || 'Texte manquant'}`;\n                    eventsContainer.appendChild(eventElement);\n                    count++;\n                }\n            });\n\n            const summary = document.getElementById('summary');\n            summary.textContent = `Total événements : ${count}`;\n            if (filter === 'all') {\n                summary.textContent += " - 23:20 : Texte manquant";\n            }\n        }\n\n        function filterEvents(filter) {\n            renderEvents(filter);\n        }\n\n        document.addEventListener('DOMContentLoaded', () => {\n            renderEvents();\n        });\n    </script>\n</body>\n</html>",
  "test_js": "const { JSDOM } = require('jsdom');\n\nconst dom = new JSDOM(`<!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</head>\n<body>\n    <div id=\"summary\"></div>\n\n    <script>\n        const eventsData = [\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\"}\n        ];\n\n        function renderEvents(filter = 'all') {\n            const eventsContainer = document.getElementById('events');\n            eventsContainer.innerHTML = '';\n            let count = 0;\n            eventsData.forEach(event => {\n                if (filter === 'all' || event.type === filter) {\n                    const eventElement = document.createElement('div');\n                    eventElement.className = `event ${event.type}`;\n                    eventElement.textContent = `${event.heure} - ${event.texte || 'Texte manquant'}`;\n                    eventsContainer.appendChild(eventElement);\n                    count++;\n                }\n            });\n\n            const summary = document.getElementById('summary');\n            summary.textContent = `Total événements : ${count}`;\n            if (filter === 'all') {\n                summary.textContent += " - 23:20 : Texte manquant";\n            }\n        }\n\n        function filterEvents(filter) {\n            renderEvents(filter);\n        }\n\n        document.addEventListener('DOMContentLoaded', () => {\n            renderEvents();\n        });\n    </script>\n</body>\n</html>`);\n\nconst summaryText = dom.window.document.getElementById('summary').textContent;\nif (!summaryText.includes(\"23:20 : Texte manquant\")) {\n    process.exit(1);\n}\nprocess.exit(0);"
}
```