Arc OS — Roadmap
Bureau AI natif. Claude Code Agent Teams + Architecture CLI-First + Canaux. 70+ endpoints, SQLite SSOT, Sage Worker + Benchmarks + Marketplace Discovery + Knowledge Harvester. Dernière mise à jour : 2026-05-04 (Phase 52.1 DONE — codes d'invitation F&F + niveau de plan bêta ; Phases 52.2-7 EN COURS)
Chronologie des phases
timeline
title Arc OS — De la naissance native à la bêta publique
section Fondation (Fév 2026)
18 : Naissance native + Phaser
19 : Intégration avancée
20 : Bots fédérés
section Intelligence (Mars 2026)
21 : Binary Evals + Context Router + Learnings
22 : CRM Dashboard
24-26 : Agent double + Workers dynamiques
28-30 : Auto-ingestion + Knowledge Harvester
section Marketplace (Avr 2026)
32-35 : Knowledge Dashboard + Terminal en direct
36 : Cloud PM + NotebookLM Bridge
38 : ARC CLI compilé
40 : Sage + A/B + Marketplace Discovery
section Hardening (Avr 2026)
41 : Refonte UI + Context Rail
42 : Multi-tenancy + Bind loopback
44 : Analytics + Couverture docs 95%
45 : E2EE zero-knowledge
section Architecture (Fin Avr 2026)
47 : Timeline + Refonte des tickets
48 : Décomposition 10779→373 LOC + Cycle de vie lazy des workers
49 : Hook pre-push couverture docs
section Beta (Mai 2026)
50 : Crédits d'essai
51 : Facturation Stripe Stage 1
52.1 : Codes d'invitation F&F + plan bêta
52.2-7 : Exemple de projet · Funnel · Statut · Uptime
Où nous en sommes : Phase 52.1 complète (inscription sur invitation, codes
arc-XXXX-XXXX, plan bêta illimité). Le lancement public est conditionné aux critères de succès F&F — voir §Phase 52.
Phase 18 : La naissance native (COMPLÈTE)
18.0 — Bootstrap du dépôt (FAIT)
- Créer dépôt, CLAUDE.md, .clauderules
- Transférer les actifs IP (configs, blueprints, skills)
- Créer le ticket parapluie #35 dans Claude-CEO
18.1 — Fondation des Agent Teams
- Activer les Agent Teams avec TeamCreate
- Créer les tâches initiales pour Morty, Squanchy, Beth
- Définir les accords de travail par agent
- Tester la messagerie inter-agents
- Protocole de mise à jour d'état (office-state.json)
18.2 — Canal Telegram natif
- Nouveau bot via @BotFather
- Plugin officiel Telegram Channel
- Commandes texte : /status, /tasks, délégation
- Uploads de fichiers → auto-classification → routage vers l'agent
- Progression via edit_message, réactions
18.3 — Serveur MCP Arc OS Bridge
- Serveur MCP Bun + TypeScript
- 4 outils MCP : get_office_state, update_agent_state, get_tasks, get_knowledge
- HTTP API : /api/state, /api/tasks, /api/knowledge, /api/events
- Flux SSE pour les mises à jour frontend en temps réel
- File watcher sur le répertoire state/
18.4 — Restauration visuelle (Frontend Phaser)
- Phaser 3.80 + Vite 6 nouvelle installation
- OfficeScene, UIScene, entités Agent
- StatePoller (SSE depuis le serveur MCP)
- Texte HD (polices système, haute résolution)
- Sprites d'agents (pixel art ou fallback coloré)
- Pas d'UI de saisie de commandes (Telegram est l'interface)
18.5 — Déploiement VPS & 24/7
- Docker Compose (3 services : session, bridge, frontend)
- Reverse proxy Nginx (:18888 → frontend, :19200 → API)
- Persistance d'état via volumes Docker
- Intégration heartbeat avec Morty SRE
- SSL via Let's Encrypt (optionnel)
Phase 19 : Intégration avancée (COMPLÈTE)
19.1 — Polling d'état delta (FAIT)
- Le frontend ne poll que l'état modifié via le paramètre
?since= - StateManager suit
lastModifiedpar fichier - SSE envoie des événements delta, pas des dumps d'état complets
19.2 — Barre de contexte & thème Canvas (FAIT)
- Barre CTX affichant l'agent actif, la tâche, les infos de session
- Thème Phaser natif sur canvas (pas d'overlays HTML)
- Correction de la séquence de démarrage async
19.3 — Hooks de cycle de vie (FAIT)
- Hook
SubagentStop→ agent=inactif dans office-state.json - Hook
Stop→ wrapup de session + tous les agents inactifs - Enregistré dans
~/.claude/settings.json
19.4 — Bibliothèque / Intégration NotebookLM (FAIT)
- Commande CLI
/citadel-wrapup→ export vers docs/library-export/ - Commande CLI
/citadel-recall <query>→ recherche grep locale - README avec instructions de configuration NotebookLM
- Bridge basé sur les fichiers (en attente de l'API pour intégration complète)
19.5 — Skills d'opération CLI (FAIT)
/citadel-status— tableau de bord agent (actif/inactif, tâches, stats bibliothèque)/citadel-task <text>— création de tâche structurée WISC depuis texte brut/citadel-deploy— déploiement VPS (git push, SSH, Docker rebuild, health check)
Phase 20 : Architecture de bots fédérée (COMPLÈTE)
Doc d'architecture :
docs/architecture/PHASE_20_FEDERATION.mdDécision : Fédération (Master + Children) vs Bot unique + Switcher.
20.1 — Fondation du Master Bot (FAIT)
- Bot Telegram Bun + TypeScript (long-polling, PAS une session Claude)
config/bot_registry.json— registre des children- Commandes :
/status,/emergency-stop,/list,/deploy,/health - Container Docker dans
docker/docker-compose.yml - Endpoint de santé :
/api/master/health
20.2 — Protocole Child Bot (FAIT)
child-bot/bot.ts— proxy Telegram ↔ Claude CLI (claude -p)- Fichier heartbeat toutes les 60s vers
state/heartbeat_<name>.json - Middleware de contexte intelligent :
reply_to_message→ injection GSD CONTEXT - Historique de fil : derniers 50 messages dans
state/thread_history.json - Arrêt gracieux (SIGINT/SIGTERM pour emergency-stop)
- Endpoint de santé :
/api/child/healthsur le port 19211 - Tourne sur l'HÔTE (nécessite le CLI
claude), pas Docker - Durci : timeout 5 min, retry sur échec, limite max-turns (20), diagnostics
20.3 — Moteur d'onboarding (FAIT)
/new_project <name>— interview interactive (4 étapes : description → liens → token → confirmation)- Correspondance de skills : auto-détection depuis le registre + bibliothèque
- Détection de blueprint : web, gamedev, debug, legal, service
- Auto-provisionnement : mkdir, CLAUDE.md, MANIFEST.md, .env, git clone, registre, tmux
- Allocation de port depuis le registre
- Support d'upload de fichier pour les descriptions de projet
.md
20.4 — Bibliothèque de skills & Suppression de projet (FAIT)
/remove_project <name>— sécurité triple-confirmation avec noms protégés- Skills de bibliothèque :
skills/library/*.mdauto-correspondues à l'onboarding - Copiées dans le répertoire
skills/du nouveau projet lors du provisionnement - Hook de rechargement du registre : mise à jour en mémoire après provisionnement/suppression
20.5 — Infrastructure Phantom-Ready (FAIT)
shared/logger.ts— logger JSONL structuré avec double sortie (fichier + console)- Division quotidienne des fichiers :
system-YYYY-MM-DD.log,dialog-YYYY-MM-DD.log,error-YYYY-MM-DD.log - Catégories : system (cycle de vie), dialog (utilisateur↔Claude), error (→ erreur + système)
- Zéro dépendances externes — APIs Bun pures
- Division quotidienne des fichiers :
shared/vault.ts— stockage de secrets chiffré AES-256-GCM- Clé : variable d'environnement → fichier
config/vault-key→ auto-générée - Cache en mémoire après init, fallback vers
process.env - Écritures atomiques (tmp + mv)
- Clé : variable d'environnement → fichier
master-bot/watchdog.ts— moniteur de fond auto-guérissant- Health check HTTP toutes les 30s (timeout 5s)
- Redémarrage automatique des children crashés via tmux (token depuis vault)
- Backoff exponentiel : 30s → 1min → 5min → 15min → 60min (plafond)
- Désactivation permanente après 10 échecs consécutifs
- Notifications CEO : premier redémarrage, échec, désactivation permanente
- État persisté dans
config/watchdog-state.json
- Commande
/watchdog— statut de santé des child bots en temps réel dans Telegram - L'onboarding stocke les tokens dans le vault (pas
.env), crée/var/log/citadel/<name>/ config/logrotate-citadel.conf— rotation quotidienne, rétention 7 jours, compressionscripts/setup-vps-logging.sh— configuration de l'infrastructure de logs VPS- Tous les
console.log/console.error→ logger structuré (child-bot + master-bot)
Phase 21 : Interface de commandes Arc OS (COMPLÈTE)
Telegram devient un tableau de bord interactif complet avec claviers inline, contrôle de subprocess et stubs de liens CRM.
21.0 — Couche UI tactique (FAIT)
shared/ui_templates.ts— module central de construction de claviersmasterMainMenu()— clavier de réponse persistant 2×2projectCard(name, crmBase)— clavier inline 4 lignes (Restart/Delete/Manifest/Skills/CRM)deleteConfirm(name)— inline OUI/ANNULERchildResponseButtons(skills?, crmBase?, projectName?)— STOP/PAUSE/RESUME/BTW/FixItparseCallback(data)— parser"action:target"
- Améliorations du Master bot : routing texte clavier réponse,
handleCallbackQuery(), helpers - Améliorations du Child bot : état
currentProc/isPaused/btwQueue, contrôles STOP/PAUSE/RESUME/BTW/FixIt
21.5 — Intelligence évolutive (FAIT)
shared/evals.ts— Binary Eval Engine : 6 types de règles,.evals.jsonpar skill, avertissements non bloquantsshared/context-router.ts— Context Router : scoring trigger/keyword, injection top-5 SKILLS_HINTshared/learnings.ts— Learnings persistants : Fix It / thumbs-down →learnings.md→ chaque prompt futurscripts/nightly-improve.ts— Karpathy Loop : analyse nocturne des métriques → propositions d'amélioration → approbation CEO- Evals pilotes : code-review, git-manager, system-audit (9 règles au total)
- Mots-clés ajoutés à 11 skills du registre
docs/public/— 8 fichiers de documentation publique avec index de navigation
Phase 22 : Bun CRM & Hub d'observabilité (COMPLÈTE)
Architecture :
docs/planning/phase-22-bun-crm.md| Backend :docs/architecture/crm-backend.md
22.0 — REST API CRM (FAIT)
shared/auth.ts— auth par token HMAC-SHA256, CRM_SECRET stocké dans vault, TTL 24hshared/crm-routes.ts— 5 handlers CRM : projets, détail, logs, fichiers, skills- Routeur Bun.serve : fetch async, middleware auth, CORS sur toutes les routes
/api/crm/* infra/nginx/citadel-crm.conf— reverse proxy unifiéscripts/vps-sync.sh— déploiement VPS automatisé : sync git, swap nginx, restart bot, health checks
22.1 — Observabilité en temps réel (FAIT)
- Streaming de logs SSE :
/api/sse/logs/:name— tail JSONL logs en direct vers le navigateur (poll 1s) - Endpoint de métriques de qualité :
GET /api/crm/projects/:name/metrics?days=7 - Intégration frontend CrmPoller : poll
/api/crm/projects(15s), émet des événements pour les scènes Phaser
22.2 — Centre de commandes unifié (FAIT)
- Bridge CRM→Phaser : CrmPoller → entités ProjectPod dans la scène Server Room
- Panneau de logs glassmorphisme : consommateur SSE avec filtre de catégorie + auto-scroll
- Section PROJETS de la sidebar avec dots de santé en direct (vert/jaune/rouge)
- Docker multi-stage build (node:22-alpine → nginx:alpine) avec token CRM intégré
22.3 — Graphiques métriques, Terminal WebSocket & contrôles de puissance (FAIT)
frontend/src/ui/Sparkline.js— graphique à barres canvas empilées (120x24px)frontend/src/ui/TerminalPanel.js— terminal WebSocket xterm.js avec couleurs ANSI + FitAddon- Terminal WebSocket :
/ws/terminal/:name— polling tmux capture-pane (200ms) - Endpoint Restart :
POST /api/crm/projects/:name/restart— délai 30s - Onglets LogPanel : Logs | Terminal — switch avec import dynamique
Phase 23 : The Local Gateway — Hybrid Workspace (PLANIFIÉE)
Architecture :
docs/planning/local-gateway.md(v3 — séparation Body/Brain) Dépend de : Phase 25 (COMPLÈTE — fondation bridge + API) Nom de code : "Activer la puissance locale"
Le développeur connecte son IDE local au VPS Arc OS. Le code vit localement ; l'intelligence est livrée par Bridge CLI + répertoire de config .citadel/.
23.1 — Bridge CLI + Fondation API (FAIT → Phase 25)
- Déplacé vers Phase 25.1 + 25.2 (complété)
23.2 — Intelligence locale (PLANIFIÉE)
- Vendor
shared/evals.ts,shared/learnings.ts,shared/context-router.tsdans bridge/src/ citadel-bridge eval— exécuter les evals localement, sans réseaucitadel-bridge learn— ajouter une règle de learning manuelle- Intervalle d'auto-pull configurable (défaut 60 min)
- Split de docs (2026-05-14) :
docs/public/guides/local-bridge.mddécomposé en landing + 3 sous-pages OS (local-bridge-{macos,linux,windows}.md)
23.3 — Intégration CRM (PLANIFIÉE)
- Champ
local_sync_statusdans la réponse de l'API projet - Indicateurs d'activité développeur dans le bureau gamifié
- Génération + révocation de token dans le CRM Dashboard
23.4 — Distribution & Polish (PLANIFIÉE)
- Compilation Bun vers binaire unique
- Publication package npm (
@citadel/bridge) citadel-bridge doctor— commande de diagnostics
Phase 24 : Flux dual-agent & Amélioration CRM (COMPLÈTE)
Doc d'architecture :
docs/architecture/dual-agent-flow.mdThème : Slate & Silver (glassmorphisme sombre)
24.5 — Flux dual-agent (FAIT)
/c→ Consultant (sonnet, read-only),/d→ Developer (opus, accès complet)- Sans préfixe → routage vers le rôle actif
- Specs auto-extraites depuis le pattern
### SPEC:dans la sortie consultant - Workflow d'approbation
/approve <id>/ rejet via CRM Dashboard - 7 nouveaux endpoints CRM : CRUD specs, GET/POST rôle actif, SSE consultant, POST message
- Frontend : 4 onglets log panel (Logs / Terminal / Consultant / Specs)
- Thème Slate & Silver sur tous les composants UI
Phase 25 : Résolution de dette technique + Fondation Local Gateway (COMPLÈTE)
25.0 — Nettoyage de dette technique (FAIT)
- Terminal poll 200ms→500ms — réduction CPU 60%
- Split du monolithe
telegram.ts(881 lignes) en 4 modules
25.1 — Fondation Bridge CLI (FAIT)
- Répertoire
bridge/avec CLIbin/citadel-bridge.ts(commander.js) - 5 commandes :
connect,disconnect,pull,push,status - JWT, config
~/.citadel/bridge.json, marqueurs CLAUDE.md, sync skills+learnings, heartbeat
25.2 — Extensions API VPS (FAIT)
- 4 nouveaux endpoints : skills-bundle, learnings (GET/POST), heartbeat
25.3 — Hardening de sécurité (FAIT)
- Tokens de bots migrés de
.envvers le vault chiffré - CORS verrouillé : wildcard
"*"→ liste blancheCRM_ALLOWED_ORIGINS - WebSocket générique
/wsnécessite maintenant token JWT - Script de migration :
scripts/migrate-tokens-to-vault.ts - Support d'upload de fichier PDF pour le worker Knowledge Archivist
Phase 26 : Workers dynamiques (COMPLÈTE)
Architecture :
config/workers_registry.jsonThème : Remplacer le binaire hardcodé Consultant/Developer par un registre de workers extensible.
26.0 — Stage 1 : Fondation du registre de workers (FAIT)
config/workers_registry.json— définitions déclaratives de workers (id, label, icon, type, model, tools, etc.)- 3 workers enregistrés : Consultant (chat, sonnet), Developer (terminal, opus), UI/UX Designer (chat, sonnet)
child-bot/bot.ts— dispatch unifiécallWorker(), suivi par thread par worker
26.1 — Stage 2 : Activation de grille dynamique (FAIT)
- Pills de workers cliquables —
toggleWorker(id)ajoute/retire des panneaux dynamiquement - Stabilité React :
key={worker.id}assure que les panneaux existants retiennent les connexions SSE - Persistance de la mise en page Workspace dans
localStorage
Phase 27 : Base de connaissances & Wiki (COMPLÈTE)
27.0 — Visionneuse Wiki (FAIT)
- 2 nouveaux endpoints API CRM : arborescence wiki, lecture fichier avec protection path traversal
- Frontend
pages/Wiki.jsx— mise en page deux panneaux : sidebar + contenu avec ReactMarkdown - Navigation
Wikiajoutée à la sidebarPROJECT_NAV
Phase 28 : Auto-Ingest Watcher (COMPLÈTE)
28.0 — Auto-Ingest Watcher (FAIT)
- Module
child-bot/ingest-watcher.ts:fs.watch()surknowledge-base/raw/avec debounce 3s - Déduplification via
ingest_processed.jsonpersistant dans le répertoire d'état - Injecte un message CRM inbox (
worker_id: "archivist") — pas de refactorisation callWorker nécessaire
Phase 29 : i18n — Internationalisation EN/UK (COMPLÈTE)
29.0 — Infrastructure i18n + Traduction complète (FAIT)
- Bibliothèque : @lingui/react v5 + @lingui/core + @lingui/vite-plugin + babel macro
- Config :
lingui.config.js— locales : [en, uk], format : po, compileNamespace : ts - 186 chaînes traduites sur 25 composants
- Macro patterns :
<Trans>(JSX),t(chaînes),msg(arrays au niveau module) - Catalogues :
src/crm/locales/{en,uk}/messages.po(source),.tscompilé
Phase 30 : Assistant d'onboarding (COMPLÈTE)
30.0 — Création de Workspace en self-service (FAIT)
POST /api/crm/onboarding/setupaccepte FormData (config JSON + fichiers)- Assistant en 5 étapes : Bienvenue → Projet → Équipe → Clés API → Intégrations
- Presets d'équipe : 7 presets sectoriels + 2 workers core (Manager, Keeper)
- Auto-provisionnement : répertoires, CLAUDE.md, MANIFEST, .env, workers_registry, wiki, child-bot, tmux
Phase 31 : Auth web (COMPLÈTE)
31.0 — Auth session + Multi-tenancy (FAIT)
/admin_login→ code à 6 chiffres (TTL 5min) → token JWT → localStorage- Garde
canAccessProject()sur toutes les routes CRM
31.5 — ARC CLI + Knowledge MCP (FAIT)
- Commandes CLI
arc login/logout/projects/start - 4 outils MCP :
fetch_skill,report_mission,search_knowledge,get_learnings - 4 endpoints API ; injection CLAUDE.md avec contexte cloud + auto-config .mcp.json
- Téléchargement binaire pour 3 plateformes
Phase 32 : Knowledge Dashboard (COMPLÈTE)
32.0 — Rapports, Skills, Wiki, NotebookLM (FAIT)
- Reports.jsx : feed timeline, groupé par date, tags de source colorés
- ProjectSkills.jsx : CRUD split-pane pour les fichiers de skills
- Wiki.jsx : édition/sauvegarde/création inline avec rendu markdown
- NotebookLM.jsx : landing branded + cartes de cas d'usage
Phase 33 : Création de projet multi-tenant (COMPLÈTE)
33.0 — Clés au niveau compte + Modal léger (FAIT)
- Refactorisation de
handleOnboardingSetupen 10 helpers réutilisables - Paramètres du compte :
/opt/repos/.accounts/{chatId}/settings.json(0o600) - 3 nouveaux endpoints :
GET/PUT /api/crm/account/settings,POST /api/crm/projects/create CreateProjectModal.jsx: modal à 3 champs (nom, niche, preset) pour les utilisateurs récurrents- Répertoires par utilisateur :
/opt/repos/{chatId}_{projectName}/
Phase 34 : Chef de projet autonome (COMPLÈTE)
34.1 — Suivi local des tickets (FAIT)
- Stockage :
{cwd}/issues/issues.jsonpar projet (auto-incrément, P0-P3, labels) - API :
POST/GET /api/mcp/issues/:project,PUT /api/mcp/issues/:project/:id - Outils MCP :
create_issue,list_issues
34.2 — Outil Wiki Sync (FAIT)
- Outil MCP :
update_wiki(filename, content)— créer/mettre à jour des pages wiki markdown
34.3 — Moteur de roadmap (FAIT)
- Outil MCP :
sync_roadmap(phase, status, notes)— mise à jour de ROADMAP.md en place
34.7 — Init Injection (FAIT)
handleCliInitinjecte la liste des tickets ouverts (top 10) dans CLAUDE.md- Prochaine cible de roadmap (première phase EN COURS ou PLANIFIÉE) injectée
Phase 35 : Live Terminal Sync (COMPLÈTE)
35.1 — Backend Log Ingest (FAIT)
POST /api/crm/projects/:name/terminal/log— reçoit des lignes JSONL bufferisées depuis arc-cli- Infra SSE existante (
handleSseLogsavec?category=terminal) capte automatiquement
35.2 — Intercepteur stdout arc-cli (FAIT)
Bun.spawn(["claude"], { stdout: "pipe", stderr: "pipe" })remplace stdio héritéstripAnsi()nettoie les séquences d'échappement pour le transport propreflushLogs()POSTs des lignes bufferisées toutes les 2s vers l'endpoint/terminal/log
35.3 — Terminal Live Frontend (FAIT)
TerminalPanelViewa maintenant un switcher d'onglets Bot / Live- Point vert pulsant quand les logs en direct sont en streaming
Phase 36 : Cloud Project Manager (COMPLÈTE)
36.1 — Endpoint Chat SSE Backend (FAIT)
POST /api/crm/projects/:name/chat— proxy SSE vers l'API Messages Anthropic- Définit l'outil
ask_notebooklm— interroge la base de connaissances du projet - Boucle d'outils côté serveur : jusqu'à 3 rounds non-streaming pour les appels d'outils, puis stream le texte final
36.2 — Frontend Cloud PM Chat (FAIT)
- Composant
CloudPmPanelView— interface de chat complète avec parsing du flux SSE - Disponible comme onglet worker "Cloud PM" dans le Workspace
36.3 — NotebookLM Bridge (FAIT)
- Service Python FastAPI dans
services/notebooklm-bridge/(port 19213, localhost uniquement) - Client async
notebooklm-pypour la recherche sémantique Google - SyncWorker :
asyncio.Queue(200), délai 2s, 3 retries avec backoff exponentiel - Auto-init des notebooks à la création de projet
36.6 — Assistant de génération de skills neurale (FAIT)
POST /api/crm/projects/:name/skills/generate— interroge le bridge NotebookLM- Assistant modal : menu déroulant notebook + textarea objectif d'extraction + spinner de chargement
36.7 — Sidebar Mémoire neurale (FAIT)
GET /api/crm/projects/:name/notebooks— retourne les notebooks NotebookLM liés par projet- Section "Mémoire neurale" dans la sidebar avec point de statut vert/rouge
Phase 37 : SSO & Auth sociale (COMPLÈTE)
37.0 — OAuth Google + GitHub (FAIT)
- Google + GitHub OAuth dans
shared/auth.ts - 5 nouvelles routes OAuth
- LoginOverlay redesigné : boutons OAuth en premier (en haut), formulaire email replié derrière "Continuer avec l'email"
Phase 38 : Architecture CLI-First (COMPLÈTE)
Remplacer les outils MCP par des sous-commandes CLI. Réduction de 85% des tokens.
38.0 — Migration MCP → CLI (FAIT)
- 8 outils MCP → 8 sous-commandes CLI (
arc skill/report/kb/learnings/issue/issues/wiki/roadmap) clients/lib/api.ts— 8 fonctions wrapper APIknowledge-mcp.tsdéprécié avec bannière (fichier conservé pour compatibilité)- Impact token : ~800 tokens schéma MCP → ~120 tokens réf CLI = réduction 85%
38.1 — Standard SKILL.md (FAIT)
- L'assistant de skill génère le format SKILL.md avec frontmatter YAML
handleSaveSkilldouble chemin : frontmatter SKILL.md →.claude/skills/<name>/SKILL.md, sinon →skills/<name>.md
Phase 39 : Responsive mobile + Workspace Hub (COMPLÈTE)
39.0 — Mise en page responsive (FAIT)
- Hook
useIsMobile()— basé surmatchMedia, breakpoint à 768px CrmMainLayout.jsx— sidebar comme overlay sur mobile,100dvhglobals.css—@keyframes sidebarSlideIn+@media (max-width: 767px)avec 7 règles
39.3 — Workspace Hub & Gestion du cycle de vie (FAIT)
- Grille
ProjectCardsur la page Analytics - Page
ProjectSettings— identité, visuel, liaison notebook, archive
39.4 — Cycle de mémoire live (FAIT)
handleMemoryRefresh— équivalent TypeScript deseed_knowledge.py- ARC CLI :
arc memory refresh+arc memory fetch-artifact - Outil Cloud PM :
memory_refresh— se déclenche automatiquement quand l'utilisateur dit "J'ai mis à jour les docs"
Phase 40 : Tabula Rasa — SQLite SSOT + Système de protocoles (COMPLÈTE)
Suppression nucléaire du JSON legacy → SQLite source de vérité unique. Système de protocoles à trois niveaux. WorkspaceSelector centralisé. Historique de chat persistant.
40.0 — Migration SQLite (FAIT)
shared/db.ts— singleton bun:sqlite, mode WAL,userQueries/projectQueries/accountQueriesscripts/migrate-to-db.ts— suppression nucléaire JSON legacy →/opt/repos/_legacy_trash/{timestamp}/→ nouvelle DBshared/auth.tsréécrit :loadUsers/saveUsersSUPPRIMÉ →userQueries.*bot_registry.jsonconservé UNIQUEMENT pour l'infra (tmux/ports/santé)- 4 nouvelles routes :
/api/auth/2fa/{setup,verify,disable,login}
40.7 — Système de protocoles à trois niveaux (FAIT)
SYSTEM_PROTOCOL— règles universelles de l'agent (SSOT, suivi des tickets, sync roadmap)generateProjectRules()— scaffolding PROJECT_RULES.md +docs/specs/+designs/- PM Laws dans
CLOUD_PM_SYSTEM_PROMPT— 5 règles obligatoires - Budget token : ~530–650 overhead
40.8 — WorkspaceSelector centralisé & Moniteur de santé (FAIT)
- NOUVEAU :
WorkspaceSelector.jsx— menu déroulant en-tête remplaçant la barre d'onglets ProjectNav - Dots de santé :
deriveStatus()— vert (ok), ambre (partiel), rouge (down) - Recherche quand >5 projets ; option "Project Hub" pour les analytics globaux
40.10 — Historique de chat persistant / Chat immortel (FAIT)
shared/migrations/003_chat_messages.ts— tablechat_messages+ index compositechatQueries: insert, getHistory (pagination par curseur), getLatest, deleteByProject, count- Frontend :
fetchChatHistory(), bouton "Charger les messages précédents" avec préservation du scroll
Phase 40.11 : Système de skills évolutif + Sage Worker + Approbations basées sur les données (COMPLÈTE)
40.11 — Système de skills évolutif (FAIT)
shared/migrations/004_skill_system.ts— 4 tables :skills_global,skills_project_forks,skill_evolution_logs,skill_update_requests- 15 nouveaux handlers dans
crm-routes.ts: CRUD global, forks de projet, log d'évolution, demandes de mise à jour - Frontend :
SkillEvolution.jsx(1113 lignes, deux panneaux : explorateur + détail avec 4 onglets)
40.11c — Sage Worker (Amélioration autonome des skills) (FAIT)
shared/sage.ts:runSageAnalysis()+callSageModel(), modèle Haiku- 2 nouvelles routes CRM :
POST /api/crm/sage/analyze,GET /api/crm/sage/status scripts/nightly-improve.tsréécrit : plus de propositions basées sur fichiers, appelle maintenantrunSageAnalysispar child
40.11d — Approbations basées sur les données (Benchmarks) (FAIT)
shared/migrations/005_skill_benchmarks.ts— tableskill_benchmarksrunBenchmark(): génère 3 scénarios de test via Haiku, test A/B aveugle ancien vs nouvelle skill- 2 nouvelles routes CRM :
POST /api/crm/sage/benchmark,GET /api/crm/skill-updates/:id/benchmarks - Frontend :
BenchmarkBadge,BenchmarkReport, vue Battle Mode (Ancien vs Nouveau côte à côte)
Phase 40.12 : Marketplace Discovery (COMPLÈTE)
Trouver, analyser et installer des skills communautaires depuis claudemarketplaces.com directement dans le Skill Evolution Center.
POST /api/crm/sage/scout— recherche sur claudemarketplaces.com, cache en mémoire (TTL 5min)POST /api/crm/sage/scout/analyze— analyse de compatibilité LLM via HaikuPOST /api/crm/sage/scout/install— installation globale ou fork de projet- Frontend : 5ème onglet "Discovery" dans SkillEvolution avec barre de recherche, grille de résultats, panneau d'analyse
40.12.1 — Smart Rank — Tri par compatibilité & Cache Quick Scan (COMPLÈTE)
- Table
marketplace_analysis_cache— score DESC index POST /api/crm/sage/scout/quick-scan— score en lot jusqu'à 40 skills en un seul appel (~2s)- Frontend : menu déroulant de tri : Pertinence / Compatibilité / Popularité
- Bouton "Smart Rank" — déclenche quick-scan, bascule automatiquement vers le tri par compatibilité
Phase 40.13 : Knowledge Harvester autonome (COMPLÈTE)
Découverte proactive de skills. Gap Detector se déclenche sur zéro correspondances Context Router. Scan nocturne en lot. UI de suggestions dans l'onglet Discovery.
shared/harvester.ts—detectGap(message, projectName), throttle par projet (5 min minimum entre les exécutions)- Scan nocturne en lot dans
scripts/nightly-improve.ts - 2 nouveaux endpoints : suggestions harvester, dismiss suggestion
- Frontend : section "Recommandé pour toi" dans DiscoveryTab ; toggle "Auto-Discover Skills" dans AccountSettingsDialog
Phase 40.14 : UI Roadmap & Tickets CRM (COMPLÈTE)
Backend
loadIssues()— auto-réparation :issues.jsoncorrompu/manquant re-scaffoldé automatiquementsaveIssues()— écritures atomiques via fichier tmp +renameSync
Frontend
Roadmap.jsx— deux modes de vue : Phases (liste de cartes compactes) et Vue complète (markdown brut)- Badges de statut : FAIT (vert), EN COURS (bleu), PLANIFIÉ (gris), BLOQUÉ (rouge)
Issues.jsx— filtres Open/Closed/All, badges de priorité P0-P3, animation de slide-down- Modal Créer un ticket (carte 460px, champs titre/corps/priorité/labels)
Phase 40.15 : Icônes Lucide React (COMPLÈTE)
Remplacer toutes les icônes Unicode/emoji par des icônes SVG Lucide React pour une iconographie cohérente, sensible au thème et scalable.
lucide-reactinstallé (tree-shakeable, MIT, 1500+ icônes SVG)- ~100 emoji et symboles Unicode remplacés dans 22 fichiers CRM
- Convention de taille d'icônes : 16px (nav), 18px (boutons d'action), 14px (icônes inline)
Phase 40.16 : UI Token de bot Telegram par worker (COMPLÈTE)
Les workers peuvent connecter/déconnecter des tokens de bot Telegram individuels depuis le formulaire Worker Studio.
WorkerForm: étattgToken,tgConfigured,tgShowToken,tgSaving- Section Telegram Bot (indicateur configuré + Déconnecter, ou saisie masquée + Connecter)
Phase 40.17 : Knowledge Graph + Ouvrir dans Obsidian (COMPLÈTE)
- Bouton "Ouvrir dans Obsidian" dans la section Mémoire neurale de la sidebar
- Endpoint
GET /api/crm/projects/:name/knowledge-graph— nœuds + arêtes depuis les liens wiki KnowledgeGraph.jsx— graphe force-directed basé sur Canvas (Fruchterman-Reingold)- Zéro dépendances externes, pan/zoom, recherche/filtre de nœuds
Phase 40.18 : Sécurité de déploiement — DB SSOT pour la propriété (COMPLÈTE)
Problème
bot_registry.json est suivi dans git mais owner_id est ajouté au runtime lors de la création du projet. Chaque git pull écrase le fichier, perdant les données de propriété.
Solution — 3 couches de protection
| Couche | Quoi | Quand |
|---|---|---|
| DB SSOT | handleGetProjects + isProjectOwner vérifient projectQueries.findByName() en premier |
Chaque appel API |
| Backup de déploiement | vps-sync.sh sauvegarde le registre avant git pull, restore les champs owner_id après |
Chaque déploiement |
| Enrichissement au démarrage | Le master bot remplit les owner_id manquants depuis la DB au boot |
Chaque redémarrage |
Phase 40.19 : Complétion d'auth — Formulaire de login complet (FAIT)
40.19a — Credentials Google OAuth (FAIT)
- Projet Google Cloud + écran de consentement OAuth créé ; vérification de bout en bout sur
https://arc-os.co
40.19c — Flux de réinitialisation du mot de passe (FAIT)
POST /api/auth/forgot-password— générer le token de reset (TTL 30min)POST /api/auth/reset-password— valider le token + définir nouveau mot de passe- Intégration Resend : livraison d'email réelle via
shared/email.ts
40.19d — Vérification d'email (FAIT)
verificationTokensstore (TTL 24h)- L'inscription envoie maintenant un email de vérification
loginUserbloque les utilisateurs non vérifiés ; les utilisateurs OAuth auto-vérifiés
Phase 41 : Refonte UI — Adaptation du design Vercel (COMPLÈTE)
Migration par étapes des concepts du redesign Next.js généré par Vercel dans la stack React+Lingui+Vite existante. 8 sous-phases, zéro changement de framework.
- 41.1 — Tokens de design (espace colorimétrique OKLCH, teal profond, ambre chaud, ivoire chaud)
- 41.2 — Pills de sélection de workers (pills horizontales avec avatars tone-ring)
- 41.3 — Bulles de messages chat + barre d'action (bulles utilisateur inversées, avatar+bordure worker)
- 41.4 — Refresh du Composer (radius, bague de focus, chip compteur d'outils, chip /btw)
- 41.5 — Badges de compteurs sidebar + Activité récente
- 41.6 — Recherche TopBar avec ⌘K
- 41.7 — Context Rail (nouveau panneau droit 320px, visible ≥1280px)
- 41.8 — Fonctionnalité Notes épinglées (migration 009 +
POST/GET/DELETE /api/crm/projects/:name/pins)
Phase 42 : Hardening de sécurité — Audit Sentinel 2026-04-23 (COMPLÈTE)
Référence :
docs/security/audit-2026-04-23.md(3 critiques + 2 sérieux + mineurs) Débloque la production multi-utilisateurs. Verdict après correctifs : VERT.
Correctifs appliqués
- 42.1 — Multi-tenancy : garde owner_id SSE (SEC-1)
- 42.2 — Multi-tenancy : garde terminal WS + interactif admin-only (SEC-2)
- 42.3 — Multi-tenancy : garde de bloc CLI/MCP (SEC-3)
- 42.4 — Bun.serve bind sur 127.0.0.1 (SEC-4)
- 42.5 — Validation project_name chat/save (SEC-5)
- 42.6 — Hardening mineur :
timingSafeEqual, liste de refus nginx étendue, auditsafePath - 42.7–42.12 — Correctifs de remédiation re-audit Sentinel : SSRF (SEC-NEW1 P0 Critique), canari en-têtes proxy (SEC-NEW2 P1), fermeture SSRF redirect-based (SEC-NEW4 P3), hardening non bloquant (SEC-NEW5 P2)
| Métrique | Valeur |
|---|---|
| Problèmes de sécurité trouvés sur 5 passes d'audit | 16 |
| Corrigés | 16 |
| Dette de sécurité (bloquant) | 0 |
| Verdict | 🟢 VERT — Prêt multi-utilisateurs |
Phase 43 : Implémentation de l'audit UI/UX (COMPLÈTE)
Référence :
docs/design/ui-ux-audit-2026-04-23.md(Vanguard deep dive pass #2) 21 tickets créés (#13–#33), tous fermés. Score de re-audit : A- (95/100).
- 43.1 — Accessibilité (WCAG 2.1 Niveau A) : focus visible, contraste mode sombre, prefers-reduced-motion
- 43.2 — Nettoyage navigation & mise en page : TopHeader simplifié, hiérarchie visuelle sidebar
- 43.3 — Système de design & architecture : hiérarchie z-index, couleurs hardcodées → CSS vars
- 43.4 — Améliorations UX : auto-expansion du composer, hook useEscapeKey, système de toast
- 43.5 — Documenté / Reporté : nav bas mobile (reportée), breakpoints tablette (reportés)
Phase 44 : Refonte de la page Analytics (COMPLÈTE)
Référence :
docs/design/analytics-page-redesign-2026-04-24.mdTransformer la page de métriques statiques en tableau de bord de veille actionnable.
- 44.1 — Migration DB & Backend : tables
project_phases+activity_log,analyticsQueries,logActivity() - 44.2 — Composants Frontend : ActivityTimeline, ActivePhasesList, ContextRail adaptatif
- 44.3 — Polish & i18n : 20 nouvelles chaînes i18n (EN/UK, 458 au total)
44.4 — Benchmark économie de tokens + Optimisation (FAIT)
- Phase A : A/B test — Claude pur + Skills vs Mode ARC (+CLAUDE.md) → overhead +24.1%
- Phase B — Optimisation (Option C - Hybride) : endpoints → skill, structure fichiers compressée, issues → résumé de phase
Résultats finaux :
- CLAUDE.md réduit : 6 702 → 5 430 tokens (−19%)
- Overhead réduit : 24,1% → 3,7% (amélioration −82 %)
- Coût : $0,146 → $0,140 (ARC maintenant quasi-parité avec Claude pur)
- ROI : $600 d'économies sur 100k sessions lifetime
Phase 44.5 : Expansion de la couverture de documentation (COMPLÈTE)
Couverture docs : 65% → ~95%. Huit nouvelles docs publiques, index mis à jour. Date d'audit : 2026-04-27.
Huit nouvelles docs dans docs/public/ :
guides/arc-cli-reference.md(425 lignes) — toutes les 16 commandes CLI, flags, variables d'envguides/telegram-bots.md— architecture Master/Child bot, commandes, claviers inlineguides/notebooklm-bridge.md— recherche sémantique, déclencheurs auto-sync, modèle mémoire à 3 niveauxarchitecture/workers-and-intelligence.md— 6 workers intégrés, Binary Evals, Context Router, Learningsapi/api-reference.md— 68+ endpoints sur 13 catégoriesarchitecture/database-schema.md— 14 tables, 12 migrations, diagramme ERguides/development-setup.md— dev local : Bun/Node, ports, variables d'env, Dockerguides/troubleshooting.md— diagnostic par symptôme : auth, workers, bridge, frontend, base de données
Phase 44.6 : Refonte Workspace — Évolution (COMPLÈTE)
Système de design warm clay + dots de statut + ActionBar + hints slash.
- 44.6.1 — Système de design centralisé :
design-system.css(OKLCH, accent warm clay #c25b3f, surfaces off-white chaudes) - 44.6.2 — Dots de statut worker avec lueur : composant status-dot (6px cercle) avec 4 états
- 44.6.3 — Composant ActionBar : Resume/Pause/Stop pour tous les workers actifs, timer de session
- 44.6.4 — Hints de commandes slash : chips pills pour /spec, /issue, /recall, /handoff, /review
Phase 45 : Architecture E2EE zero-knowledge (FAIT ✅)
"Nous ne pouvons pas lire tes données même si nous le voulions" — chiffrement au repos pour la confidentialité des utilisateurs.
- 45.1 — Fondation E2EE : wrapper WebCrypto API, dérivation de clé PBKDF2 (100k itérations) → AES-256-GCM
- 45.2 — Chiffrement des clés API :
vault.tsencryptField()/decryptField()/isFieldEncrypted() - 45.3 — Chiffrement des messages de chat : migration 015, colonne
encryptedsurchat_messages - 45.4 — Clés de récupération & Backup : migration 016, table
recovery_keys, format 1PasswordXXXX-XXXX-XXXX-XXXX-XXXX - 45.5 — Hardening de sécurité : en-têtes CSP,
shared/pii-sanitizer.ts
Phase 46 : Exécution parallèle de workers (COMPLÈTE)
Chaque worker = processus séparé. Plus de mutex global
isProcessingbloquant tous les workers. Consultant, Developer, Sentinel etc. tournent simultanément dans leurs propres sessions tmux.
- 46.1 — Évolution du schéma du registre :
execution_mode: "parallel"+ tableauworkers[] - 46.2 — Utilitaire de spawn de worker :
shared/worker-spawn.ts,spawnWorkerProcess(),spawnAllWorkers() - 46.3 — Routage d'inbox spécifique au worker : toujours router vers
crm_inbox_{worker_id}.jsonl - 46.4 — Watchdog multi-worker : health checks par processus worker
- 46.5 — API Restart par worker :
POST /restart?worker_id=developer - 46.7 — Activation pour arc-v2 :
execution_mode: "parallel"+ tableau workers dans bot_registry.json
Phase 47 : Observabilité Timeline — DAW pour les équipes AI (COMPLÈTE ✓)
Métaphore Logic Pro — workers comme lanes, événements comme clips sur une timeline partagée. Innovation : IP unique, aucun autre outil d'orchestration AI n'a cette vue.
- 47.1 — Timestamps des messages : migration 013,
timestamp_ms INTEGERdans chat_messages - 47.2 — Table des événements Timeline : migration 014, CREATE TABLE timeline_events
- 47.3 — Composants Frontend Timeline : 7 nouveaux composants (TimelinePage, LaneHead, Lane, Event, TimeRuler, ChatPanel, Transport) — 1 009 lignes
- 47.4 — Feature Flag & Route : route
/timelinedans App.jsx, badge BETA - 47.5 — Documentation
- 47.6 — Thèmes de couleurs & Palette pastel : 4 palettes de couleurs pastel (warm-clay, ocean-teal, lavender, sage)
- 47.7 — Constructeur de thème personnalisé + UX Gemini : builder MVP avec color picker natif, messages utilisateur style Gemini
Phase 47.8 : Refonte Issues (COMPLÈTE)
Refonte complète du frontend issues avec regroupement par phase, panneau de détail coulissant, animations P0.
- Regroupement des tickets par phase (en cours → planifiés → fermés)
- Panneau de détail slide-in à 400px avec journal d'activité
- Animation de pulsation P0, barres de progression, responsive mobile
- Boutons fixes en pied de page mobile
Phase 48 : Décomposition d'architecture (COMPLÈTE)
Refactorisation des monolithes en modules de domaine sans changer le comportement.
- CRM router —
crm-routes.ts(10 779 LOC) →shared/routes/router.ts(373 LOC) → 19 modules de domaine - UI Workspace —
Workspace.jsx(~2 000 LOC) → orchestrateur 168 lignes + 9 composants - API server —
master-bot/api-server.ts(196 lignes) → délègue à 4 modules routes - Phase 48.5 — inbox CRM event-driven via
fs.watch(latence 100× plus faible que polling 500ms) - Phase 48.6 — cycle de vie lazy des workers : idle-kill + réveil à la demande, ~298 Mo RAM libérés (39%), capacité 2 → 6-10 utilisateurs concurrents
Phase 48.5 : CRM Inbox Event-Driven (COMPLÈTE)
Remplacer le polling 500ms par fs.watch pour une latence ~100× plus faible.
shared/crm-inbox-watcher.ts— wrapper fs.watch + debounce 10msprocessCrmInbox()déclenché par événements fs.watch ; fallback timer de sécurité 5s- Économie : ~360 000 lectures de fichiers/heure → 0
Phase 48.6 : Cycle de vie lazy des workers (COMPLÈTE)
Cycle de vie idle-kill + wake-up à la demande. ~298 Mo de RAM libérés (39%). Capacité 2 → 6-10 utilisateurs concurrents.
WORKER_IDLE_TIMEOUT: tue le subprocess Claude après N minutes d'inactivité (défaut 15 min)ensureWorkerAlive(): réveille le worker en réactivant le subprocess Claude si nécessaire- Délai de wake-up ~2-4s (spawn + warmup)
Phase 49 : Application de la couverture de documentation (COMPLÈTE)
49.1 — Hook Git pre-push (FAIT)
.githooks/pre-push→scripts/check-docs-coverage.ts— bloque les pushs qui changent du code sans mettre à jour les docs mappées
| Chemin de code | Doc requise |
|---|---|
shared/migrations/* |
docs/public/architecture/database-schema.md |
shared/routes/* |
docs/public/api/api-reference.md |
Commit Phase NN |
docs/ROADMAP.md + docs/status/current-state.json |
| ≥3 fichiers backend & ≥50 LOC | learnings.md |
bash scripts/setup-hooks.sh— activation une fois par clone- Contournement d'urgence :
git push --no-verify
49.3 — Intégration GitHub (COMPLÈTE)
- Liaison par projet via
arc github link→ webhook GitHub configuré automatiquement - Table
github_events(migration 022) :project_name,type,payload, horodatage - Handler webhook
POST /api/crm/projects/:name/github/webhook: valide la signature HMAC-SHA256 - ContextRail section GitHub : feed d'événements récents (3 derniers)
- Rate limit : 100 req/min/projet
Phase 50 : Crédits d'essai (COMPLÈTE ✅)
Chaque email obtient une allocation de crédits unique — les crédits se décrémentent à mesure que les workers tournent. Pas de carte de crédit pour démarrer.
- Table
trial_credits(migration 018) : indexée par email, compteur de crédits, flag épuisé checkTrialCredits(email, action)— middleware : crédits disponibles ?deductTrialCredit(email)— déduction atomique ; bloque à 0 (pas de crédit négatif)- Gate : création de nouveau projet + accès API Anthropic pour les plans gratuits/trial
- Jamais rechargé par mise à niveau — uniquement pour la première expérience
Phase 51 : Facturation Stripe Stage 1 (COMPLÈTE ✅)
Stage 1 — DB + Middleware (FAIT ✅, 2026-05-02)
- Tables
subscriptions+stripe_events(migration 020) : ID client Stripe, niveau de plan, log d'idempotence PLAN_LIMITS— source de vérité unique : gratuit (1p/5w), min (5 OU 25), max (20 OU 150), beta (∞)checkPlanLimit(userId, action)— middleware sémantique OR :{allowed, reason, current, limit, plan}- Limites appliquées sur
handleOnboardingSetup+handleCreateWorkeravec 402 structuré - Endpoint de statut :
GET /api/crm/billing/status— plan, snapshot d'utilisation, feature flags
Phase 52 : Lancement F&F Beta (EN COURS)
52.1 — Codes d'invitation + Plan bêta (FAIT ✅, 2026-05-02)
- Table
invites(migration 021) : formatarc-XXXX-XXXX, limites d'utilisation, flags de révocation /api/auth/registernécessiteinvite_code; retourne 403invite_requiredsinon- Endpoints admin :
POST/GET/DELETE /api/crm/admin/invites - ARC CLI :
arc invites generate/list/revoke - Plan bêta : illimité (Infinity projets/workers, toutes les fonctionnalités Max) sans rôle admin
- Canal de feedback :
@arcos_beta_feedbackTelegram, digest hebdomadaire - Avantages Founding Member : 50% de réduction à vie + badge profil + Founders Wall
52.2 — Projet d'exemple + Bibliothèque de blueprints (PLANIFIÉ)
- Projet d'exemple pré-peuplé : "saas-starter" avec CLAUDE.md, issues, wiki, roadmap
- Sélecteur de blueprint dans l'assistant d'onboarding (7 secteurs)
52.3 — Funnel & Suivi de conversion (PLANIFIÉ)
- Métriques de funnel : signup → vérification → premier message → rétention J-1/J-7
- Tableau de bord F&F avec métriques de succès en direct
- Critères de succès : ≥70% signup → first_message, ≥40% rétention J-1, ≥25% J-7, 0 bugs P0 en 3 derniers jours
52.4 — Page de statut de service (PLANIFIÉ)
- Page de statut publique sur
status.arc-os.co - Uptime de service (30 jours), incidents actifs, historique de maintenance
Phase 53 : Sprints de hardening Sentinel (FAIT ✅)
2× sprint P0 (#62-#67) + 13× sprint P1 (#68-#80) + victoires rapides P2 (#102-#109), suivis des tests de pénétration, dépôt infra SSOT.
Correctifs de sécurité majeurs livrés :
- 53.1 — Accès de spécification : gate d'approbation, validation de statut de worker
- 53.2 — Injection prompt SSE : nettoyage dans toutes les routes SSE
- 53.3 — Escapes XSS Telegram :
tgSendMarkup()correctement échappé - 53.4 — Infrastructure email : DNS/MX pour [email protected]
- 53.5 — Widget de feedback : bouton flottant avec 4 types (bug/feature/ux/other)
- 53.6 — Mise à niveau Bun : 1.1.42 → 1.2.x, correction de l'incompatibilité d'API
- 53.7 — Audit de l'infra de logs : logs tmux + Bun vers JSONL structuré
- 53.8 — Validation du timing d'authentification : padding de timing sur les endpoints email
- 53.9 — Résumé d'intégration TG par worker : notifications par worker actif
- 53.11 — UX multi-worker Telegram : assistant de configuration de bot (/w wizard)
- 53.12 — Guard
tsc --noEmitpre-push : arrête les builds avec erreurs TypeScript - 53.13 — Guard tsc dans vps-sync.sh : mêmes vérifications au déploiement
- 53.17 — Infrastructure CI/CD : foundation GitHub Actions
Phase 54 : Couche d'engagement Onboarding (COMPLÈTE)
Fermer le fossé "tableau de bord → première commande arc" post-Phase-50.
- 54.1 — Checklist CLI (
arc tour) : guide interactif 5 étapes à travers les fonctionnalités clés - 54.2 — Conseils contextuels Workspace : conseils spécifiques à l'état (11 conseils NLM + 12 marque) avec liens docs
- 54.3 — Page Docs publique améliorée : navigation par catégorie, intégration de recherche, pages de référence rapide
- 54.4 — Emails d'activation : email de démarrage J+0 (5min), rappel J+1, conseils hebdomadaires J+7 via Resend
- 54.5 — Analyse de complétion de l'onboarding : métriques d'entonnoir, requêtes SQL d'analyse des goulets
- 54.6 — App Tour interactif (
arc tour) : onboarding guidé 8 étapes avec progression et validation
Phase 55 : Login Cosmic Editorial (COMPLÈTE ✅, 2026-05-13)
Expérience d'entrée animée avec backdrop planète, carte glassmorphisme, flux magic-link, panneau latéral éditorial.
- Arrière-plan animé avec planètes + étoiles (SVG/Canvas)
- Composant
CosmicCardglassmorphisme avec blur - Flux magic-link : envoi email + vérification token
- Panneau éditorial latéral : témoignages, stats, valeur proposition
- 7/8 sous-tickets fermés, #87 2FA encore bloqué sur le design Sentinel
Phase 56 : Interop AI / Export de contexte de projet (COMPLÈTE ✅, 2026-05-13)
Scanner de secrets à 3 niveaux, endpoint d'export filtré par le propriétaire, modal UI 3 étapes, log d'audit + préférences + alerte télémétrie.
- 56.1 — Scanner de secrets à 3 niveaux : signatures regex brutes → parsing AST → validation sémantique
- 56.2 — Endpoint d'export :
GET /api/crm/projects/:name/export(propriétaire uniquement), format Markdown AI-friendly - 56.3 — Modal UI 3 étapes : sélection de contenu → scan de secrets → confirmation d'export + téléchargement
- 56.4 — Log d'audit + préférences d'export : migration 023, table
export_audit_log - 56.5 — Alerte de télémétrie : scan interne nocturne, alerte CEO sur les secrets détectés dans les données vives
Phase 57 : UI Paramètres de plateforme + Fermeture #103 rotation (COMPLÈTE ✅, 2026-05-17)
UI admin pour la rotation des clés Anthropic/OAuth/TG/Resend via
<input type="password">. Ferme le vecteur de fuite de #103 (dump bash -x Sentinel 2026-05-11). Tous les 5 secrets fuités rotés via l'UI.
- 57.1 — UI Paramètres de plateforme : page
/admin/settingsavec sections de clés API - 57.2 — Endpoints de rotation sécurisée :
PUT /api/crm/admin/settings/keysavec re-chiffrement vault - 57.3 — Fermeture de #103 : rotation des 5 secrets fuités (Anthropic, Google OAuth, GitHub OAuth, TG Master, Resend)
Phase 58 : UserDropdown style Claude + Onboarding (COMPLÈTE ✅, 2026-05-16)
UserDropdown en bas à gauche style Claude + Modal d'onboarding amélioré + décomposition des sous-pages Docs.
- 58.0 — UserDropdown style Claude : menu bas-gauche avec avatar, rôle/plan, paramètres, facturation, déconnexion
- 58.1 — Améliorations modal d'onboarding : hints par étape, assistant blueprint enrichi
- 58.1.1 — Refactor docs Local Bridge :
local-bridge.md→ landing + 3 sous-pages OS + miroir UK
Phase 59 : Localisation × 6 langues (EN COURS)
6 nouvelles langues en parallèle : DE + ES + PL + RU + pt-BR + FR. Pipeline AI-only + boucle de feedback bêta.
59.1 — Infra Lingui + glossaire + conventions de ton (ticket #119, P0) — FAIT ✅ (2026-05-17)
- 6 nouveaux fichiers
messages.poseedés depuis le master EN - Conventions de ton verrouillées par locale : DE "du", ES "tú", PL formes verbales 2e personne, RU "ты", pt-BR "você", FR "tu"
- Glossaire par locale
config/i18n-glossary/<lang>.json: termes de marque, commandes CLI (jamais traduites), noms de workers (Rick/Morty/Beth/etc. jamais traduits), règles de rétention du jargon tech - Squelette du pipeline de traduction AI (
scripts/i18n-translate.ts)
59.2 — Pipeline de traduction AI + chaînes UI × 6 (ticket #120, P0) — FAIT ✅ (2026-05-17)
- Traduction en lot : ~438 chaînes × 6 locales = ~2 628 traductions via l'API Claude
- Règles de préservation des placeholders : ICU
{name}, pluriels Lingui, tags React<0>tags</0>, liens markdown - Vérifications de qualité automatiques : intégrité des placeholders, conformité au glossaire, contrôle de longueur (0,5×-2,5× source)
59.3 — Traduction docs publiques × 6 (ticket #121, P0) — PARTIEL ⏸ (2026-05-17, 64/216 fichiers = 30%)
- Miroir de la structure
docs/public/uk/pour 6 nouvelles locales : ~40 fichiers markdown × 6 = 240+ docs - Pipeline conscient du markdown : sauter les blocs de code, code inline, URLs, alt d'images ; traduire frontmatter titre/description mais pas slug/tags
- Plus grande sous-phase par volume de contenu
59.4 — Widget de feedback de traduction + tableau de bord de révision par locale (ticket #122, P1) — PLANIFIÉ
- Étendre le widget de feedback Phase 53.5 avec un nouveau type
translation_issue - Nouveau tableau de bord
/admin/translationsavec filtres + actions
59.5 — Régression visuelle UI × 6 locales (ticket #123, P1) — PLANIFIÉ
- Playwright screenshot diff vs baseline EN sur 9 pages clés × 3 viewports × 6 locales = 162+ captures d'écran
scripts/i18n-visual-regression.tsgénère un rapport diff HTML
59.6 — Analytics de langue + auto-détection navigateur + polish du switcher (ticket #124, P2) — PLANIFIÉ
- Migration 026 : colonne
users.preferred_locale+ préférence synchronisée avec la DB - Auto-détection navigateur :
navigator.language→ toast unique "Passer à {locale} ?" - Refonte du switcher de locale : drapeau + nom natif + recherche quand >5 locales
Invariants architecturaux (préservés) :
- ✅ Invariant Phase 53.13 : tsc --noEmit propre sur tout le travail de locale
- ✅ Hook de couverture de docs Phase 49.1 : chaque sous-phase met à jour les docs pertinentes
- ✅ Gates multi-tenancy intacts (les changements de locale sont scoped par utilisateur, pas par projet)
- ✅ Lingui v5 SSOT —
.posource,.tssortie compilée - ✅ Vault SSOT — pas de clés API fuites via les pipelines de traduction
Estimation d'effort : ~8,5-9,5 jours. MVP (59.1-59.3) = 6-7 jours, polish P1+P2 ajoute ~2,5j.
Séquençage : 59.1 (fondation) → 59.2 + 59.3 parallèle (chaînes UI + docs) → 59.4 + 59.5 + 59.6 parallèle.
Stack technologique
| Couche | Technologie |
|---|---|
| Cerveau | Sessions Claude Code (Agent Teams) |
| CRM API | Serveur HTTP Bun sur Master Bot (:19210) — 62+ endpoints REST + SSE + WebSocket + chat Cloud PM + Sage Worker + Marketplace Scout + Knowledge Graph, auth JWT + OAuth |
| Proxy | Nginx (:18888) — frontend statique, reverse proxy API/SSE/WS |
| ARC CLI | Binaire compilé Bun — 8 sous-commandes cloud (skill, report, kb, learnings, issue, issues, wiki, roadmap) + memory refresh/fetch-artifact |
| Frontend | CRM React (responsive, mobile-first) + Phaser 3.80 (bureau gamifié) + terminal xterm.js + @lingui/react i18n (EN/UK) |
| Commandes | Bots Telegram fédérés (Master + Children) |
| Auth | JWT (HMAC-SHA256) + OAuth (Google, GitHub) + inscription email/mot de passe |
| État | SQLite SSOT (shared/db.ts, mode WAL) + JSON pour l'infra uniquement (bot_registry, heartbeat) |
| Intelligence | Binary Evals + Context Router + Learnings + Karpathy Loop + Sage Worker (Haiku) + Benchmarks A/B + Marketplace Scout |
| Secrets | Vault AES-256-GCM (shared/vault.ts) |
| Logging | JSONL structuré (shared/logger.ts) → /var/log/citadel/ |
| Résilience | Watchdog auto-guérissant (master-bot/watchdog.ts) |
| NotebookLM Bridge | Python FastAPI (:19213) — recherche sémantique via notebooklm-py + auto-sync |
| Mémoire | 3 niveaux : Chaude (JSON) / Tiède (GitHub) / Froide (recherche sémantique NotebookLM) |
| Déploiement | Docker Compose, Nginx, VPS Contabo |
Migration legacy
| Composant | Lignes v1 | Remplacement v2 |
|---|---|---|
| Backend FastAPI | ~3 000 | Session Claude Code |
| telegram_bridge.py | ~2 800 | Plugin Channel officiel |
| hybrid_engine.py | ~1 000 | Exécution native Claude |
| bridge_processor.sh | ~500 | Éliminé |
| database.py | ~700 | Fichiers d'état JSON |
| WebSocketManager.js | ~200 | StatePoller.js (SSE) |
| Total | ~11 321 | ~3 700 |
Réduction de 67% de la taille de la base de code.
Maintenu par Rick (Orchestrateur). Mis à jour après chaque complétion de phase.