Files
Codex Local 2beaaf6179 fix: atomic composition saves + deep audit P0/P1 fixes
Deep audit 2026-03-26 (10 findings, 4 fixes):
- FINDING-1 P0: saveComposition async + atomic write (tmp+rename) — prevents partial JSON on concurrent saves
- FINDING-2 P0: MAX_COMPOSITIONS (500), MAX_COMPOSITION_BYTES (512KB), MAX_TRACKS_PER_COMPOSITION (100) env-configurable
- FINDING-3 P1: ttsQueues self-cleans via .finally() after chain drains
- FINDING-4 P1: personaMemoryLocks reset to Promise.resolve() in .finally() — prevents unbounded chain growth
- lot-204: docs/LOT204_TRAINING_SPIKE.md (OpenCharacter + PCL, GO verdict, 4 sub-lots, RTX 4090 sufficient)
- lot-30: docs/LOT030_TTS_EVALUATION.md (Pocket TTS: watch — EN-only blocker, FR planned, no date)
- docs/DEEP_AUDIT_2026-03-26.md: 10 findings P0-P2 catalogued

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 11:43:26 +01:00

26 KiB

TODO

Session 2026-03-26 — TTS Evaluation lot-30 [done]

  • lot-30-pocket-tts: evaluation complete — Pocket TTS v1.1.1 (Kyutai, MIT, 100M params, CPU 6x realtime, ~200ms first chunk, voice cloning 5s ref). VERDICT: SURVEILLER. Bloquant: EN only, FR planifie sans date (issue #118). Stack actuel optimal: Qwen3-TTS :9300 + Chatterbox :9200 + Piper fallback. Action: Watch GitHub release + issue #118. Spike immediat quand FR annonce. Voir docs/LOT030_TTS_EVALUATION.md.

Session 2026-03-26 — RAG audit + Journald monitoring [done]

  • lot-28-rag-config: audit confirmé — 4 env vars impl. in rag.ts (lines 13-16), startup model check in init(), lot marked [done] in PLAN.md
  • lot-29 journald: scripts/journald-monitor.sh created (TUI colored dots, --watch, --lines, --service flags)
  • lot-29 journald: ops/v2/journald-alerts.conf created (INI config, restart policies, alert conditions per service)

Session 2026-03-26 — Timeline UI + Composition Tests [done]

  • lot-547: Timeline model v1 (already in composition-store.ts: Track, TimelineClip, TimelineMarker, TimelineModelV1)
  • lot-548: Waveform timeline UI v1 (TimelineView.tsx + CSS, routed at #timeline/:id)
  • lot-549: Composition tests renfort (20 tests, 0 fail — added setActiveComposition, BPM clamping, markers sort, multi-track clips)
  • lot-201: Schema memory persona v2 (done in prior session via feat(personas): migrate runtime memory to v2-local store)
  • lot-202: Policy engine extraction/summarization/pruning (done via feat(personas): add configurable memory policy engine)
  • lot-205: Retirer fallback legacy personas.json / persona-*.json (aucun fichier legacy sur disque)
  • lot-206: Supprimer aliases createInMemory*Repo (déjà absent — migration convergée)
  • P11 routes extraction: routes/personas.ts, routes/node-engine.ts, routes/chat-history.ts, app-middleware.ts

Session 2026-03-25 — Personas runtime V2

  • Migrer le store local runtime personas vers data/v2-local/* en fichier par persona
  • Conserver fallback de lecture legacy (personas.json, persona-*.json) pour migration douce
  • Corriger les fuites de références mutables dans repos in-memory personas/sources/feedback/proposals
  • Ajouter tests de non-régression migration + immutabilité (create-repos.test.ts)
  • Aligner scripts smoke.js et build.js sur KXKM_LOCAL_DATA_DIR=data/v2-local
  • Mettre les artefacts legacy build derrière flag explicite BUILD_INCLUDE_LEGACY_PERSONA_V1=1
  • Exposer le mode fallback API comme local au lieu de memory
  • Recaler les factories canoniques sur createLocal*Repo avec alias de compat
  • Push distant des commits locaux (bloqué dans cette session: transport git/gh indisponible)
  • lot-201: Implémenter schema memory persona v2 (working + archival blocks)
  • lot-202: Ajouter policy engine extraction/summarization/pruning configurable
  • lot-203: Benchmark runtime memory local vs approche Mem0 — verdict: garder le store local (latence <5ms, 0 deps externes, Mem0 trop lourd pour l'échelle actuelle) — voir docs/LOT203_MEMORY_BENCHMARK.md
  • lot-204: Spike training OpenCharacter + PCL sur 5 personas — GO conditionnel. RTX 4090 suffisant. Pipeline: dialogues synthétiques Ollama → SFT QLoRA Qwen2.5-7B Unsloth → DPO PCL-style → GGUF Ollama. 7-12h total. Voir docs/LOT204_TRAINING_SPIKE.md. Suite: lot-204a (enrichir profils + script génération), lot-204b (SFT), lot-204c (export + eval).
  • lot-205: Retirer le fallback legacy personas.json / persona-*.json après fermeture de fenêtre de migration
  • lot-206: Supprimer les alias createInMemory*Repo après convergence complète des imports/tests

P0 Critical (sécurité & stabilité)

  • Fix bash injection dans node-engine-runtimes.js — validation runtimeId/nodeType + timeout 30min
  • Ajouter timeout sur les appels Ollama — 15s metadata, 5min chat streaming
  • Validation des entrées sur les messages WebSocket — 64KB max frame, 8192 chars text, type checks
  • Rate limiting par user/IP sur chat — rate-limit.js + 30 msg/min par IP dans WebSocket
  • escapeHtml dédupliqué → utils.js
  • normalizeAuth consolidé dans admin-api.js
  • ensureSeedGraphs guard flag ajouté
  • finishRun comptage d'artifacts sans JSON parse
  • recoverRunnableRuns double-read corrigé

P1 V1 Quality

  • Migrer vers le SDK officiel ollama-js — fait en P7 (ollama.js réécrit)
  • Ajouter un audit logging pour les actions admin — audit-log.js + intégré dans http-api.js et server.js
  • Implémenter l'analyse image/audio dans attachment-pipeline.js — stubs factory avec adapter slot
  • Corriger la validation d'origine postMessage — déjà en place (personas.js:1476)
  • Ajouter la déduplication de requêtes dans admin-api.js — fait en P7 (deduplicatedFetch)
  • Node Engine : validation de tri topologique — déjà en place (cycle detection dans runner)
  • Node Engine : timeout d'exécution par nœud — 10min default via NODE_ENGINE_STEP_TIMEOUT_MS

P2 V2 Domaines

  • Schéma Postgres + migrations + repos typés (packages/storage) — session, persona, graph, run repos
  • Module auth réel (packages/auth) — crypto.scrypt, token gen, extractSessionId, validateLoginInput
  • Logique domaine chat (packages/chat-domain) — ChatMessage, ChatSession, compactHistory, channel validation
  • Logique domaine persona (packages/persona-domain) — validatePersonaUpdate, aggregateFeedback, computePersonaDiff
  • Brancher les repos Postgres dans apps/api — async createApp(), fallback in-memory si pas de DATABASE_URL

P3 Node Engine V2

  • Porter registry → packages/node-engine (15 node types, 7 familles)
  • Porter graph ops (topologicalSort, validateEdgeContracts, collectNodeInputs)
  • Porter run state machine (createRun, RunStep, resolveFinalStatus)
  • Porter queue logic (createQueueState, enqueue, dequeue, canDequeue)
  • Runtime definitions (5 runtimes)
  • Isoler les runtimes avec sandboxing approprié — fait en P8 (sandbox.ts)
  • Adaptateurs d'entraînement réels (LoRA, QLoRA, SFT) — fait en P8 (training.ts)
  • Brancher le runner V2 dans apps/worker — poll loop, stub executors, graceful shutdown

P4 Frontend V2

  • API client centralisé (api.ts)
  • 9 composants React (Header, Login, Nav, PersonaList, PersonaDetail, NodeEngineOverview, GraphDetail, RunStatus, ChannelList)
  • Routing hash-based + responsive CSS
  • Interface chat React (WebSocket live) — fait en P7 (Chat.tsx + useWebSocket.ts)
  • Éditeur visuel Node Engine (React Flow) — fait en P7 (NodeEditor.tsx + EngineNode.tsx)

P5 TUI & Ops

  • TUI health-check (V1+V2+Ollama+disk+memory)
  • TUI queue-viewer (runs, statuses)
  • TUI persona-manager (overview)
  • Log rotation (--dry-run, --max-age-days)
  • Packages/tui: ansi, statusDot, formatTable, drawBox

P6 Migration

  • Matrice de parité V1 → V2 — scripts/parity-check.js (persona, graph, channel, API shape checks)
  • Scripts de migration de données — scripts/migrate-v1-to-v2.js (personas, graphs, runs → Postgres, --dry-run support)
  • Smoke tests pour V2 — scripts/smoke-v2.js (22 tests, 5 catégories, npm run smoke:v2)
  • Procédure de rollback — scripts/rollback-v2.js (drop/truncate tables with confirmation, --yes, --tables filter)

P0+ Sécurité V1 (deep analyse 2026-03-16)

  • Path traversal dans storage.js — sanitisation session IDs + boundary check memory paths
  • Path traversal dans persona-registry.js / persona-store.jssafeFsId() helper
  • Path traversal dans attachment-store.js — sanitisation IDs + boundary check
  • SSRF dans web-tools.js — blocage localhost, IPs privées, .local/.internal
  • Response body limit dans web-tools.js — truncation 2 MB
  • Log injection dans storage.js — sanitisation paramètre role
  • Crash JSONL corrompu dans storage.js — try/catch par ligne
  • Map mutation during iteration dans sessions.js — collect then process
  • Session leak /msg dans commands.js — clé stable au lieu de Date.now()
  • Unbounded userRateLimits dans chat-routing.js — pruning > 200 entries
  • Session pruning O(n) dans admin-session.js — throttle 60s

P7 Intégration avancée

  • Migrer vers ollama-js SDK officiel — ollama.js réécrit avec Ollama class, même interface
  • Chat WebSocket React live — hook useWebSocket + composant Chat IRC, auto-reconnect
  • Éditeur visuel Node Engine avec React Flow — NodeEditor.tsx + EngineNode.tsx, 7 familles colorées
  • Déduplication requêtes GET dans admin-api.jsdeduplicatedFetch transparent
  • Repos Postgres pour persona sources/feedback/proposals — 3 tables + repos + fallback in-memory
  • CI/CD GitHub Actions — .github/workflows/ci.yml (check V1+V2)
  • Deep analyse finale V1+V2 — 14 modules V1 vérifiés, 3 fixes TS V2, intégrité confirmée

P8 Production Readiness

  • Adaptateurs training réels (TRL + Unsloth pour LoRA/DPO) — packages/node-engine/src/training.ts + worker intégré
  • Sandboxing runtimes Node Engine (containers/VM) — packages/node-engine/src/sandbox.ts (none/subprocess/container)
  • Turborepo pour build orchestration monorepo — turbo.json + scripts alignés + CI mis à jour
  • Tests unitaires V2 avec node:test + supertest — 102 tests, 46 suites, 6 packages + API integration
  • Tests React avec Vitest + RTL — 33 tests, 6 composants (Header, Login, Nav, PersonaList, RunStatus, ChannelList)
  • Créer le repo GitHub privé — https://github.com/electron-rare/kxkm_clown

P9 Code Quality (simplify review)

  • Triple filter → single-pass loop dans node-engine.js:deriveAsyncMeta
  • Duplicate sanitization extraite dans attachment-store.js:sanitizeId
  • Double loadModelIndex() éliminé dans node-engine-store.js:registerDeployment

P10 Lot 11 — Consolidation & Feature Parity

Phase A — Analyse & Recherche

  • Deep analyse code V1+V2 (agent en cours)
  • Veille OSS mise à jour (agent en cours)
  • Recherche HuggingFace (agent en cours)

Phase B — Correctifs sécurité (deep analyse)

  • P0 SEC-01 Path traversal node-engine-runner.js — reject absolute paths + rootDir boundary check
  • P0 SEC-04 V2 login role self-assignment — viewer par défaut, admin via ADMIN_TOKEN
  • P1 BUG-06 Health endpoint leaking DATABASE_URL — remplacé par storageMode string
  • P1 BUG-02 Timeout promise leak node-engine-runner.js — AbortSignal cancel
  • P1 SEC-03 Attachments sans auth — ajout requireAdminNetwork middleware
  • Compilation + 119 tests OK après correctifs

Phase C — Feature Parity V2

  • Recovery on crash worker — recoverStaleRuns() + worker startup recovery
  • Cancel support — requestCancel() repo + shouldCancel callback worker + API endpoint
  • Tab completion chat V2 — fuzzy matching 108+ commands + @mentions
  • Commandes slash V2 — parseSlashCommand, resolveCommand, generateHelpText + 11 commandes + 17 tests
  • Mémoire conversationnelle V2 — ConversationMemory, addToMemory, buildLlmContext, clearMemory
  • Status strip admin V2 — GET /api/v2/status (personas, graphs, runs, queue)
  • Subnet gate V2 — CIDR middleware /api/v2/admin/* avec ADMIN_SUBNET env
  • Retention sweep V2 — deleteOlderThan() repo + POST /api/v2/admin/retention-sweep
  • Export HTML V2 — GET /api/v2/export/html avec download attachment
  • Upload fichiers V2 — bouton upload base64 dans Chat.tsx, accept image/audio/text/pdf/json/csv
  • Tab completion chat V2 — nicks + commandes slash, cycling Tab, reset auto

Phase D — Déploiement & Docs

  • Docker — Dockerfile (multi-stage Node 22 alpine) + docker-compose.yml (5 services) + .dockerignore
  • Documentation utilisateur — UserGuide.tsx (8 sections accordion, lot 472)
  • Performance profiling — deep analysis API (21 findings) + frontend (15 findings), 9 fixes applied

P11 Lot 17 — Deep Audit & Refactoring

Phase A — Analyse & documentation

  • Script TUI deep-audit.js (security, perf, complexity, deps) — ops/v2/deep-audit.js
  • Veille OSS enrichie 2026-03-17 (10 nouvelles catégories) — docs/OSS_WATCH_2026-03-16.md
  • Diagrammes Mermaid (Context Store, Docker, Inter-persona) — docs/ARCHITECTURE.md
  • AGENTS.md refondu (matrice 10 agents, Mermaid routing, pipeline) — docs/AGENTS.md
  • PLAN.md consolidé avec lots 17-19
  • TODO.md consolidé avec backlog Phase 6+
  • Deep analyse — API 21 findings + frontend 15 findings, 9 fixes applied

Phase B — Refactoring code

  • P1 ws-chat.ts: extraction modules (523 LOC core + 5 modules extracted)
    • ws-upload-handler.ts (241 LOC)
    • ws-conversation-router.ts (583 LOC)
    • ws-commands-chat.ts (885 LOC)
    • ws-commands-generate.ts (1841 LOC)
    • ws-commands-info.ts (876 LOC)
  • P1 app.ts: extraction — server.ts 300 LOC + app.ts 131 LOC (already modular)
    • Extraire routes/personas.ts
    • Extraire routes/node-engine.ts
    • Extraire routes/chat.ts (→ routes/chat-history.ts)
    • Extraire middleware/auth.ts (→ app-middleware.ts)
  • P2 writeFileSync — composition-store async (lot 461)
  • P2 console.log — all migrated to pino structured logging
  • P2 React.memo sur Chat, ChatHistory, VoiceChat, NodeEditor — ChatMessage already memo'd
  • P2 Lazy load: React.lazy + Suspense pour routes lourdes — 17 lazy routes + WaveformPlayer

Phase C — Infrastructure

  • SearXNG dans docker-compose — kxkm_clown-searxng-1 :8080 (healthy)
  • MinerU/Docling dans docker-compose — kxkm_clown-docling-1 :9400 (healthy)
  • Spike BGE-M3 embeddings — default changed to bge-m3 (lot 471)
  • Déployer deep-audit.js sur kxkm-ai — cron 3am daily (lot 469)
  • Créer utilisateur Discord Pharmacius — kxkm_clown-discord-bot-1 (up 4 days)

Phase D — Nouveaux node types

  • music_generation node (ACE-Step 1.5 + AI Bridge 17 backends)
  • voice_clone — XTTS-v2 via AI Bridge /generate/voice-clone (lot 504)
  • document_extraction node (Docling :9400)

P12 Lot 18 — Voice & MCP (futur)

  • XTTS-v2 voice cloning par persona
  • LLMRTC WebRTC streaming (TypeScript, VAD, barge-in)
  • MCP SDK integration — 6 MCP tools (chat, personas, search, status, music_generate, ai_bridge_health)
  • PCL + OpenCharacter pipeline fine-tune
  • Chatterbox TTS evaluation — deployed as fallback TTS, remote backend on :9100

P13 Lot 19 — Music & Creative (futur)

  • ACE-Step 1.5 production — AI Bridge /generate/music-ai + openDIAW.be AceStep instrument
  • /compose command (prompt → musique) — lots 320+, full composition pipeline
  • Flux 2 dans ComfyUI (blocked — needs 12GB checkpoint download)
  • A2A Protocol — Agent Card + JSON-RPC /a2a endpoint (lot 502)

Lot 20 - Deep Analyse Continue & Execution Chainee [en cours]

A faire maintenant:

  • Poursuivre extraction modulaire — ws-chat 523 LOC + 5 modules
  • Decouper app.ts — already 300+131 LOC modular
  • Instrumentation perf — Prometheus /metrics + ws_message latency (lot 501)
  • SearXNG :8080 + Docling :9400 (Docker compose, healthy)

Fait sur ce lot:

  • Extraction modulaire du bloc upload/analyse de ws-chat.ts (ws-upload-handler.ts).
  • Refonte UI Minitel depuis la racine du site (public/index.html, public/styles.css, public/app.js).
  • Deep audit execute et relance apres correctifs.
  • Corrections context-store appliquees et validees.
  • check:v2 et test:v2 au vert.
  • Correctif anti-decrement TTS negatif (ttsActive).
  • Cleanup opportuniste des sessions expirees (mode memory).
  • Purge des logs vides/obsoletes ops/v2/logs.
  • Script ops/v2/run-deep-cycle.sh ajoute et execute.
  • Tests apps/api/src/context-store.test.ts ajoutes et valides.
  • Scoring de dette technique integre dans ops/v2/deep-audit.js.
  • Verification JSON dette: score 78/100 (niveau high).

Phase Session 2026-03-19/20 — Lots 24-94

Summary

71 lots completed (lot-24 through lot-94). Major achievements:

  • Structured logging: pino JSON logs, 43 console.log replaced, 0 remaining
  • WS protocol hardening: Promise chain per-connection, seq numbers, FIFO ordering, 6 integration tests
  • Frontend perf: 17 lazy routes (-53% initial JS), React.memo + useCallback stabilization
  • CRT effect: CSS-only (scanlines, vignette, phosphor glow, boot animation 0.8s)
  • Systemd services: kxkm-tts + kxkm-lightrag, auto-restart, deploy.sh migrated from tmux
  • Tool-calling: llama3.1:8b-instruct for Sherlock, benchmark 3 models
  • Qwen3-TTS: 0.6B deployed :9300, 9 speakers, on-demand VRAM
  • Docling + Reranker: PDF parsing :9400, BGE reranker :9500
  • 19 chat commands: /help /nick /who /personas /web /clear /status /model /persona /reload /export /compose /imagine /voice /memory /context /rag /stats /uptime
  • Markdown rendering: marked + DOMPurify in chat
  • Smart routing: 5 topic domains (music, philosophy, tech, arts, science)
  • Dynamic context: 4k-32k adaptive window
  • Perf instrumentation: 6 labels, p50/p95/p99 endpoint
  • Error telemetry: 16 error labels, structured error logging
  • Zod validation: 19 schemas on all API routes
  • MIME magic bytes: file-type validation, SAFE_MIMES allowlist
  • WS reconnect: exponential backoff 1s-30s, seq gap detection
  • CRT boot animation: modem dial, phosphor warmup, scanline reveal
  • Chat virtualization: react-window, variable row heights
  • 425 tests, 0 failures across all packages
  • 12 services in production docker-compose
  • MCP server: 4 tools, stdio transport
  • Discord bridge: text + voice bot
  • Timing-safe token: crypto.timingSafeEqual for admin auth
  • Audio size limit: 50MB enforced
  • Architecture docs: 4 Mermaid diagrams
  • Health check: bash TUI, 19 service checks

Future work (lots 95-100)

  • P1 E2E Playwright — 14 tests instruments + commands + DAW (lot 401)
  • P2 Persona DPO — scripts/dpo-pipeline.js (lot 510)
  • P2 lot-97: Multi-channel support (/join, /channels, channel selector UI)
  • P3 lot-98: File sharing — POST/GET/DELETE /api/v2/media/shared (lot 536)
  • P2 Mobile responsive — safe-area-inset, 44px tap targets, 380px/landscape
  • P3 lot-100: Public demo mode — guest_N auto-nick, read-only until /nick

P14 Lot 24 — Deep Analyse 3 + Reactivity [done]

Phase A — Fixes live session 2026-03-19

  • Cookie Secure retire (COOKIE_SECURE env, HTTP fonctionne)
  • ADMIN_TOKEN=kxkm dans docker-compose + AdminPage champ password
  • MediaExplorer fix reponse API ({ok,data} wrapper)
  • Historique 20 derniers messages a la connexion WS [HH:MM]
  • Streaming chunks temps reel (type "chunk", curseur clignotant)
  • Personas paralleles (Promise.all)
  • SearXNG JSON active + auto web_search (Sherlock)
  • pickResponders detecte mots-cles web → Sherlock
  • Timestamps HH:MM sur tous messages
  • TTS retire du chat
  • Delai inter-persona 2s → 500ms, timeout Ollama 5min → 2min
  • /compose progress ticker (feedback 5s, elapsed time, timeout handler)
  • /imagine progress ticker (feedback 5s)
  • Admin endpoints verifies OK (overview 5ms, personas 33, analytics 326 msgs)
  • /compose duration parsing (5-120s, plus hardcode 30s)
  • tts-server.py JSON parsing securise (try-catch)
  • Audio size limit 50MB (Python + Node)

Phase B — Analyse approfondie

  • Analyse code complete: 33 personas, 8 services, 15+ node types, 135+ tests
  • 10 findings prioritaires identifies (P0 securite → P3 docs)
  • Veille OSS — reference_oss_audio_2026.md + reference_mcp_agents_2026.md
  • Audit docs — TODO.md 244 done, FEATURE_MAP + ARCHITECTURE updated
  • Fix tests — 265 pass, 0 fail (lot 506)

Phase C — Livrables

  • PLAN.md mis a jour (lots 21-29, statuts corriges)
  • TODO.md mis a jour (P14)
  • Memoire projet mise a jour
  • ARCHITECTURE.md — DAW/AI Bridge subgraph added (lot 507)
  • README.md — 17+ services, 112+ cmds, openDIAW.be, MCP, A2A (lot 507)
  • Script diagnostic TUI — scripts/health-check.sh (19 checks)
  • docs/OSS — 25+ projets documentes (Chatterbox, Stable Audio, RAVE, etc.)

Phase D — Prochaines priorites

  • P1 Structured logging — pino, all console.log migrated
  • P2 Tests integration — integration.test.ts (7 tests, perf/a2a/mcp/rag)
  • P2 lot-28: RAG configurable — 4 env vars (CHUNK_SIZE, MIN_SIMILARITY, MAX_RESULTS, EMBEDDING_MODEL)
  • P2 lot-29: Systemd units — 12 user units on kxkm-ai
  • P2 lot-29 (journald): journald-monitor.sh TUI (colored dots, --watch, --lines, --service) + ops/v2/journald-alerts.conf (INI restart policy, alert conditions, Discord)
  • P3 lot-27: CRT effects — CSS barrel distortion + vignette + phosphor glow (lot 538)

Phase Session 2026-03-20 (lots 128-143)

  • /changelog, /version commands
  • /dice, /roll, /flip fun commands
  • /ban, /unban moderation
  • /mute, /unmute per-client persona filter
  • @mention notification + @persona tab-complete
  • Idle auto-disconnect (30min warn, 35min kick)
  • Streaming think:false fix
  • /whisper private persona, /w alias
  • Code block rendering (triple backtick)
  • /history, /search, /react commands
  • /invite persona, /time, /session commands
  • Connection quality indicator (reconnect status)
  • IP connection limit (max 5/IP)
  • Ollama model fallback (qwen3:4b)
  • Persona cooldown (3s inter-persona)
  • qwen3.5:9b migration (256K ctx, adaptive thinking)
  • ComfyUI local :8189
  • Auto-detect image/music generation in natural language

Lot 424-427 — Deep Analysis Fixes (session 2026-03-21)

  • Persona memory cache (30s TTL, LRU 50 entries) — ws-conversation-router.ts
  • RAG reranker circuit breaker (2s timeout, skip after 2 consecutive fails for 60s)
  • Silent catch → logger.warn on channel state save
  • Upload binary detection (null bytes in first 512 bytes)
  • JSON streaming chunk size guard (100KB max)
  • Mention regex depth limit (10 max per message)
  • Mascarade circuit breaker exponential backoff (5s/15s/60s)
  • Accessibility: aria-labels on vote/reaction/copy/pin buttons
  • Accessibility: role="listbox" + role="option" on autocomplete dropdowns
  • VoiceChat audio queue cap (10 max, prevents memory leak)
  • Reconnect countdown UX ("dans Xs, tentative N/20")
  • Wavesurfer.js waveform player in chat audio messages
  • Tab completion V2 (fuzzy match 108+ commands + @mentions)
  • Mobile responsive deep pass (touch targets 44px, 360px breakpoint)
  • E2E Playwright tests (commands + DAW)
  • Feature map + Architecture Mermaid updated with DAW/AI Bridge
  • TTS sentence-boundary chunking + cleanForTTS
  • /translate /tr /collab /persona-create /radio /summarize /mood commands
  • openDIAW.be: 9 instruments (Drone/Grain/Glitch/Circus/Honk/Magenta/AceStep/KokoroTTS/Piper)
  • AI Bridge: 5 new ffmpeg instrument endpoints
  • DawAIPanel: Kokoro TTS + Instruments AI sections

Backlog (from analysis)

  • Chat virtualization — 500-msg cap + React.memo (adequate)
  • Route prefetch — requestIdleCallback for Compose/Imagine/DAW/Gallery
  • WS batching — React built-in batching + processingChain serialization
  • Form labels htmlFor — PersonaList (lot 465)
  • Admin health — error details + AI Bridge card (lot 463)
  • AI suggestion ranking — startsWith priority in command completion
  • Media search — text filter on title/source/type in MediaGallery (lot 539)
  • Maps LRU — userStats 1000->500, channelSeq 30min cleanup
  • Context store — parallel Promise.all for summary + entries
  • ws-chat.ts extraction — 523 LOC + 5 modules (4980 LOC total)
  • Chatterbox TTS — already primary backend (chatterbox-remote)
  • Transformers.js — BrowserSTT whisper-tiny ONNX (lot 432)
  • Sound design endpoint — /generate/sound-design (lot 433)
  • Claude Agent SDK — scripts/claude-agent.js (5 tools, interactive mode, lot 533)
  • IndexTTS-2 emotion control (theater-grade expressiveness)
  • RAVE real-time audio style transfer (IRCAM)

Session 2026-03-24 — Lots 534-540+

Fait

  • Lot 531 — Context parallel load, command ranking, mobile CSS, route prefetch

  • Lot 532 — mascarade SSE streaming + thinking field extraction

  • Lot 533 — Grafana + Prometheus monitoring stack, enriched metrics

  • Lot 534 — /deepresearch multi-step search agent (OpenSeeker-inspired)

  • Lot 535 — mascarade thinking field fix (Python + Node.js double safety net)

  • Lot 536 — Grafana dashboard 16 panels + Prometheus multi-machine

  • Lot 537 — Cloudflare Tunnel kxkm-ai (remplace lots 538-540)

URLs live

  • https://kxkm.saillant.cc — 3615 J'ai pété (kxkm-ai GPU)
  • https://kxkm-api.saillant.cc — API directe
  • https://kxkm-mascarade.saillant.cc — mascarade LLM orchestrator
  • https://kxkm-comfy.saillant.cc — ComfyUI (image gen)
  • https://kxkm-tower.saillant.cc — instance tower (hub)
  • https://kxkm-grafana.saillant.cc — Grafana dashboards
  • https://mascarade.saillant.cc — mascarade tower (Authentik SSO)

Execution Queue 2026-03-24 (P0/P1) [done]

  • lot-541: Regex intent extraction fix + 13 tests non-regression
  • lot-542: Async ffmpeg (~35 calls unblocked from event loop)
  • lot-543: Worker index.ts unified on worker-runtime.ts (583→155 LOC)
  • lot-544: Chat render memoization (wordCount + searchMatches useMemo)

Execution Queue 2026-03-24 (P1/P2) [in-progress]

  • lot-545: Sync statuts PLAN/TODO/docs/AGENTS (lots 95-100, 178-200)
  • lot-546: lot-178 ACE-Step direct API pour /compose duration fiable
  • lot-547: lot-180 timeline model v1 (tracks/clips/markers + schema)
  • lot-548: lot-194 waveform timeline UI v1 (desktop + mobile)
  • lot-549: composition tests renfort (store/remix/export/timeline)