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);"
}
```