Arc OS — Roadmap
Architektura native-first AI Office. Claude Code Agent Teams + CLI-First Architecture + Channels. 70+ endpointów, SQLite SSOT, Sage Worker + Benchmarki + Marketplace Discovery + Knowledge Harvester. Ostatnia aktualizacja: 2026-05-04 (Phase 52.1 DONE — F&F kody zaproszeń + poziom planu beta; Phase 52.2-7 IN PROGRESS)
Oś Czasu Faz
timeline
title Arc OS — Od Native Birth do Public Beta
section Foundation (luty 2026)
18 : Native Birth + Phaser
19 : Rich Integration
20 : Federated Bots
section Intelligence (marzec 2026)
21 : Binary Evals + Context Router + Learnings
22 : CRM Dashboard
24-26 : Dual Agent + Dynamic Workers
28-30 : Auto-ingest + Knowledge Harvester
section Marketplace (kwiecień 2026)
32-35 : Knowledge Dashboard + Live Terminal
36 : Cloud PM + NotebookLM Bridge
38 : ARC CLI compiled
40 : Sage + A/B + Marketplace Discovery
section Hardening (kwiecień 2026)
41 : UI Refresh + Context Rail
42 : Multi-tenancy + Loopback bind
44 : Analytics + Docs Coverage 95%
45 : Zero-Knowledge E2EE
section Architecture (późny kwiecień 2026)
47 : Timeline + Issues Redesign
48 : Decomposition 10779→373 LOC + Worker lazy lifecycle
49 : Doc-coverage pre-push hook
section Beta (maj 2026)
50 : Trial Credits
51 : Stripe Billing Stage 1
52.1 : F&F Invite Codes + beta plan
52.2-7 : Sample Project · Funnel · Status · Uptime
Gdzie jesteśmy: Phase 52.1 zakończona (rejestracja za zaproszeniem, kody
arc-XXXX-XXXX, plan beta bez limitów). Publiczny start uzależniony od kryteriów sukcesu F&F — patrz §Phase 52.
Phase 18: The Native Birth (COMPLETE)
18.0 — Repository Bootstrap (DONE)
- Utwórz repo, CLAUDE.md, .clauderules
- Przenieś aktywa IP (konfiguracje, blueprinty, skille)
- Utwórz nadrzędne Issue #35 w Claude-CEO
18.1 — Agent Teams Foundation
- Aktywuj Agent Teams z TeamCreate
- Utwórz początkowe zadania dla Morty'ego, Squanchy'ego, Beth
- Zdefiniuj Working Agreements per agent
- Przetestuj komunikację między agentami
- Protokół aktualizacji stanu (office-state.json)
18.2 — Telegram Native Channel
- Nowy bot przez @BotFather
- Oficjalna wtyczka Telegram Channel
- Komendy tekstowe: /status, /tasks, delegowanie
- Uploady plików → auto-klasyfikacja → routing do agenta
- Postęp przez edit_message, reakcje
18.3 — Arc OS Bridge MCP Server
- Serwer MCP Bun + TypeScript
- 4 narzędzia MCP: get_office_state, update_agent_state, get_tasks, get_knowledge
- HTTP API: /api/state, /api/tasks, /api/knowledge, /api/events
- Strumień SSE dla aktualizacji frontendowych w czasie rzeczywistym
- File watcher na katalogu state/
18.4 — Visual Restoration (Phaser Frontend)
- Phaser 3.80 + Vite 6 świeża konfiguracja
- OfficeScene, UIScene, encje Agent
- StatePoller (SSE z serwera MCP)
- HD tekst (czcionki systemowe, high DPI)
- Sprite'y agentów (pixel art lub kolorowy fallback)
- Brak UI wejścia komend (Telegram jest interfejsem)
18.5 — VPS Deployment & 24/7
- Docker Compose (3 serwisy: session, bridge, frontend)
- Nginx reverse proxy (:18888 → frontend, :19200 → API)
- Persystencja stanu przez Docker volumes
- Integracja heartbeat z Morty SRE
- SSL przez Let's Encrypt (opcjonalnie)
Phase 19: Rich Integration (COMPLETE)
19.1 — Delta State Polling (DONE)
- Frontend polluje tylko zmieniony stan przez parametr
?since= - StateManager śledzi
lastModifiedper plik - SSE wysyła zdarzenia delta, nie pełne dumpy stanu
19.2 — Context Bar & Canvas Theme (DONE)
- Pasek CTX pokazujący aktywnego agenta, zadanie, info o sesji
- Natywny motyw canvas Phaser (bez nakładek HTML)
- Naprawa asynchronicznej sekwencji startowej
19.3 — Lifecycle Hooks (DONE)
- Hook
SubagentStop→ agent=idle w office-state.json - Hook
Stop→ wrapup sesji + wszystkie agenty idle - Zarejestrowane w
~/.claude/settings.json
19.4 — Library / NotebookLM Integration (DONE)
- Komenda CLI
/citadel-wrapup→ eksport do docs/library-export/ - Komenda CLI
/citadel-recall <query>→ lokalne wyszukiwanie grep - README z instrukcjami konfiguracji NotebookLM
- Bridge oparty na plikach (oczekuje na API do pełnej integracji)
19.5 — CLI Operation Skills (DONE)
/citadel-status— dashboard agentów (working/idle, zadania, statystyki biblioteki)/citadel-task <text>— tworzenie zadań ze strukturą WISC z tekstu prostego/citadel-deploy— wdrożenie VPS (git push, SSH, Docker rebuild, health check)
Phase 20: Federated Bot Architecture (COMPLETE)
Dokument architektury:
docs/architecture/PHASE_20_FEDERATION.mdDecyzja: Federacja (Master + Children) zamiast Single Bot + Switcher.
20.1 — Master Bot Foundation (DONE)
- Bot Telegram Bun + TypeScript (long-polling, NIE sesja Claude)
config/bot_registry.json— rejestr child botów- Komendy:
/status,/emergency-stop,/list,/deploy,/health - Kontener Docker w
docker/docker-compose.yml - Endpoint health:
/api/master/health
20.2 — Child Bot Protocol (DONE)
child-bot/bot.ts— proxy Telegram ↔ Claude CLI (claude -p)- Plik heartbeat co 60s do
state/heartbeat_<name>.json - Smart Context Middleware:
reply_to_message→ wstrzyknięcie GSD CONTEXT - Historia wątku: ostatnie 50 wiadomości w
state/thread_history.json - Graceful shutdown (SIGINT/SIGTERM dla emergency-stop)
- Endpoint health:
/api/child/healthna porcie 19211 - Działa na HOST (potrzebuje CLI
claude), nie Docker - Wzmocniony: timeout 5 min, retry przy błędzie, limit max-turns (20), diagnostyka
20.3 — Onboarding Engine (DONE)
/new_project <name>— interaktywny wywiad (4 kroki: opis → linki → token → potwierdź)- Dopasowanie skilów: auto-detekcja z rejestru + biblioteki
- Detekcja blueprintu: web, gamedev, debug, legal, service
- Auto-provisionowanie: mkdir, CLAUDE.md, MANIFEST.md, .env, git clone, rejestr, tmux
- Alokacja portów z rejestru
- Obsługa uploadu plików dla opisów projektów
.md
20.4 — Skill Library & Project Removal (DONE)
/remove_project <name>— potrójne potwierdzenie z chronionymi nazwami- Skille biblioteki:
skills/library/*.mdauto-dopasowywane podczas onboardingu - Kopiowane do katalogu
skills/nowego projektu podczas provisionowania - Hook przeładowania rejestru: aktualizacja w pamięci po provisionowaniu/usunięciu
20.5 — Phantom-Ready Infrastructure (DONE)
shared/logger.ts— ustrukturyzowany logger JSONL z podwójnym wyjściem (plik + konsola)- Dzienne dzielenie plików:
system-YYYY-MM-DD.log,dialog-YYYY-MM-DD.log,error-YYYY-MM-DD.log - Kategorie: system (cykl życia), dialog (użytkownik↔Claude), error (→ error + system)
- Zero zewnętrznych zależności — czyste Bun APIs
- Dzienne dzielenie plików:
shared/vault.ts— zaszyfrowane przechowywanie sekretów AES-256-GCM- Klucz: zmienna env → plik
config/vault-key→ auto-generowany - Cache w pamięci po init, fallback do
process.env - Atomiczne zapisy (tmp + mv)
- Klucz: zmienna env → plik
master-bot/watchdog.ts— samoleczący monitor tła- HTTP health check co 30s (timeout 5s)
- Auto-restart crashed children przez tmux (token z vault)
- Exponential backoff: 30s → 1m → 5m → 15m → 60m (cap)
- Trwałe wyłączenie po 10 kolejnych błędach
- Powiadomienia CEO: pierwszy restart, błąd, trwałe wyłączenie
- Stan persystuje do
config/watchdog-state.json
- Komenda
/watchdog— stan health child botów w czasie rzeczywistym w Telegramie - Onboarding przechowuje tokeny w vault (nie w
.env), tworzy/var/log/citadel/<name>/ config/logrotate-citadel.conf— dzienna rotacja, 7-dniowa retencja, kompresjascripts/setup-vps-logging.sh— konfiguracja infrastruktury logowania VPS- Wszystkie
console.log/console.error→ ustrukturyzowany logger (child-bot + master-bot)
Phase 21: Arc OS Command Interface (COMPLETE)
Telegram staje się pełnym interaktywnym pulpitem z klawiaturami inline, kontrolą podprocesów i stubami linków CRM.
21.0 — Tactical UI Layer (DONE)
shared/ui_templates.ts— centralny moduł budowniczego klawiaturmasterMainMenu()— trwała klawiatura odpowiedzi 2×2projectCard(name, crmBase)— klawiatura inline 4-wierszowa (Restart/Delete/Manifest/Skills/CRM)deleteConfirm(name)— inline TAK/ANULUJchildResponseButtons(skills?, crmBase?, projectName?)— STOP/PAUSE/RESUME/BTW/FixItparseCallback(data)— parser"action:target"
- Ulepszenia master bota:
- Routing tekstu klawiatury odpowiedzi (Мої Проєкти → karty projektu, Web UI → link CRM)
handleCallbackQuery()— restart, przepływ usuwania, przeglądarka MANIFEST, lista skilów- Helpery
tgSendMarkup,tgEditMessage,tgAnswerCallback,tgSetMyCommands /startwysyła pomoc Z klawiaturą odpowiedzi- Przyciski URL CRM (konfigurowalny
CRM_BASE_URL, dev:http://62.171.128.248:18888)
- Ulepszenia child bota:
- Stan na poziomie modułu
currentProc/isPaused/btwQueue handleStop()→ SIGKILL,handlePause()→ SIGSTOP,handleResume()→ SIGCONT- Tryb BTW: zbiera kontekst → poprzedza następny prompt GSD
- FixIt: buduje prompt naprawczy z ostatniej odpowiedzi bota w historii wątku
- Przyciski inline tylko na ostatnim fragmencie odpowiedzi
- Scalanie ładowania skilów: manifest JSON + katalog skills/, deduplikowane
- Stan na poziomie modułu
- Eksport
restartChildz watchdog,executeRemovalz onboarding - Przeglądarka MANIFEST: sprawdzanie
existsSync, escapowanie HTML, pretty-print JSON, detekcja EACCES scripts/start-child-pt.sh— uruchamianie oparte na vault (bun + node:crypto, nie Python)
21.5 — Evolutionary Intelligence (DONE)
shared/evals.ts— Binary Eval Engine: 6 typów reguł, per-skill.evals.json, nieblokujące ostrzeżeniashared/context-router.ts— Context Router: scoring trigger/keyword, wstrzyknięcie SKILLS_HINT top-5shared/learnings.ts— Persistent Learnings: Fix It / thumbs-down →learnings.md→ każdy przyszły promptscripts/nightly-improve.ts— Karpathy Loop: nocna analiza metryk → propozycje ulepszeń → zatwierdzenie CEO- Pilotażowe evals: code-review, git-manager, system-audit (łącznie 9 reguł)
- Słowa kluczowe dodane do 11 skilów w rejestrze
docs/public/— 8 publicznych plików dokumentacji z indeksem nawigacyjnym
Phase 22: Bun CRM & Observability Hub (COMPLETE)
Architektura:
docs/planning/phase-22-bun-crm.md| Backend:docs/architecture/crm-backend.mdDług techniczny:docs/backlog/technical-debt.md(7 elementów, 2 rozwiązane)
22.0 — CRM REST API (DONE)
shared/auth.ts— auth tokenem HMAC-SHA256, CRM_SECRET z vault, TTL 24h (DONE — #7)shared/crm-routes.ts— 5 handlerów CRM: projekty, szczegóły, logi, pliki, skille (DONE — #8)- Router Bun.serve: async fetch, middleware auth, CORS na wszystkich trasach /api/crm/* (DONE — #10)
infra/nginx/citadel-crm.conf— zunifikowane reverse proxy zastępujące citadel-os (DONE — #14)- Komenda Telegram
/admin_login— generuje link logowania do CRM dashboard (DONE — #7; USUNIĘTA w Phase 40.19b) scripts/vps-sync.sh— automatyczne wdrożenie VPS: sync git, swap nginx, restart bota, health checks (DONE)- Wdrożone i zweryfikowane na VPS: wszystkie 5 endpointów CRM live, strażnik auth aktywny, path traversal zablokowany (DONE)
- Zarządzanie konfiguracją: PUT evals + skille per projekt (ODROCZONO — #9)
22.1 — Real-time Observability (DONE)
- Streamowanie logów SSE:
/api/sse/logs/:name— tail logów JSONL live do przeglądarki (poll 1s) - Endpoint metryk jakości:
GET /api/crm/projects/:name/metrics?days=7— agregacja per-dzień z quality-events.log - Integracja CrmPoller frontend: poll
/api/crm/projects(15s), emituje zdarzenia dla scen Phaser
22.2 — Unified Command Center (DONE)
- Bridge CRM→Phaser: CrmPoller → encje ProjectPod w scenie Server Room
- LogPanel glassmorphism: konsument SSE logów z filtrem kategorii + auto-scrollem
- Sekcja PROJECTS sidebar z live health dots (zielony/żółty/czerwony)
- Kliknięcie projektu → LogPanel otwiera się ze strumieniowaniem logów
frontend/src/config/constants.js— konfiguracja CRM_TOKEN, CRM_BASE_URL- Multi-stage Docker build (node:22-alpine → nginx:alpine) z baked tokenem CRM
- Wdrożone na VPS:
scripts/vps-sync.shz Docker rebuild + health checks
22.3 — Metrics Charts, WebSocket Terminal & Power Controls (DONE)
frontend/src/ui/Sparkline.js— skumulowany wykres słupkowy canvas (120x24px, zielony=sukces, czerwony=błędy)frontend/src/ui/TerminalPanel.js— terminal WebSocket xterm.js z kolorami ANSI + FitAddon- Terminal WebSocket:
/ws/terminal/:name— poll tmux capture-pane (200ms), domyślnie tylko do odczytu, interaktywny z?mode=interactive - Endpoint restartu:
POST /api/crm/projects/:name/restart— cooldown 30s, wywołujerestartChild()przez watchdog - Przycisk zasilania ProjectPod: pokazuj przy hover, kliknij aby zrestartować z dialogiem potwierdzenia
- Zakładki LogPanel: Logs | Terminal — przełączanie zakładek z dynamicznym importem TerminalPanel
- Sparkline LogPanel: renderuje timeseries metryk w nagłówku panelu
- Hartowanie bezpieczeństwa (DEBT-7): walidacja regex
isValidProjectName()we wszystkich 3 punktach wejścia API (router CRM, router SSE, handler WS). Blokuje path traversal przez nazwę projektu. - Integralność danych (DEBT-2):
atomicWriteJson()— zapis do.tmp.${pid}, potemmv. Zastosowane do wszystkich 4 punktów zapisu rejestru w onboarding.ts. - Audyt długu technicznego:
docs/backlog/technical-debt.mdz 7 elementami (DEBT-2 + DEBT-7 rozwiązane)
Phase 24: Dual-Agent Flow & CRM Enhancement (COMPLETE)
Dokument architektury:
docs/architecture/dual-agent-flow.mdMotyw: Slate & Silver (ciemny glassmorphism)
24.5 — Dual-Agent Flow (DONE)
/c→ Consultant (sonnet, tylko odczyt),/d→ Developer (opus, pełny dostęp)- Bez prefiksu → routing do aktywnej roli
- Specyfikacje auto-wyodrębniane ze wzorca
### SPEC:w outputcie consulta - Przepływ zatwierdzania
/approve <id>/ odrzucania przez CRM dashboard - 7 nowych endpointów CRM: CRUD specyfikacji, GET/POST aktywnej roli, SSE consulta, POST wiadomości
- Frontend: 4 zakładki log panelu (Logs / Terminal / Consultant / Specs)
- Konfiguracja:
config/project_roles.json - Motyw Slate & Silver we wszystkich komponentach UI
Phase 25: Tech Debt Resolution + Local Gateway Foundation (COMPLETE)
Dług techniczny:
docs/backlog/technical-debt.md(6/7 rozwiązane) Bridge: katalogbridge/
25.0 — Tech Debt Sweep (DONE)
- DEBT-4: Poll terminala 200ms→500ms (api-server.ts) — redukcja CPU 60%
- DEBT-1: Podział monolitu
telegram.ts(881 linii) na 4 moduły:tg-api.ts— wrapper Telegram API (~120 linii)child-state.ts— czytniki stanu child bota (~60 linii)telegram-commands.ts— handlery komend/callbacków + router wiadomości (~440 linii)telegram.ts— slim pętla pollingu + re-eksporty (~50 linii)
- DEBT-5: Odroczone do Phase 26+ (UIScene.js, XL wysiłek, P3)
bot.tsniezmieniony — wstecznie kompatybilny przez re-eksporty
25.1 — Bridge CLI Foundation (DONE)
- Katalog
bridge/z CLIbin/citadel-bridge.ts(commander.js) - 5 komend:
connect,disconnect,pull,push,status src/auth.ts— walidacja tokenu JWT względem CRMsrc/config.ts— persystencja~/.citadel/bridge.jsonsrc/inject.ts— markery CLAUDE.md<!-- CITADEL:START/END -->src/sync.ts— pull/push bundle skilów + learningssrc/heartbeat.ts— reporter aktywności sesjipackage.json+tsconfig.json
25.2 — VPS API Extensions (DONE)
- 4 nowe endpointy w
shared/crm-routes.ts:GET /api/crm/projects/:name/skills-bundle— bundle JSON skilów + evalsGET /api/crm/projects/:name/learnings— parsowana tablica learningsPOST /api/crm/projects/:name/learnings— dołącz nowe learnings z bridgePOST /api/crm/projects/:name/heartbeat— przechowywanie heartbeat bridge
25.3 — Security Hardening (DONE)
- Tokeny botów zmigrowane z
.envdo zaszyfrowanego vault (getSecret()z fallbackiem env)master-bot/bot.ts—getSecret("MASTER_BOT_TOKEN")poinitVault()child-bot/bot.ts— dodanoinitVault()+getSecret("CITADEL_BOT_TOKEN")scripts/nightly-improve.ts— dodanoinitVault()+getSecret("MASTER_BOT_TOKEN")
- CORS zablokowany: wildcard
"*"→ whitelistCRM_ALLOWED_ORIGINS(konfigurowalny przez env) - Generyczny endpoint WebSocket
/wswymaga teraz tokenu JWT (param query?token=)WebSocketManager.jsauto-wstrzykuje token zAuthManager
- Skrypt migracji:
scripts/migrate-tokens-to-vault.ts(jednorazowy, czyta.env→ przechowuje w vault) .env.examplezaktualizowany z dokumentacjąCRM_ALLOWED_ORIGINSiSECRET_ENCRYPTION_KEY- Obsługa uploadu pliku PDF dla workera Knowledge Archivist (frontend + backend)
Phase 23: The Local Gateway — Hybrid Workspace (PLANNED)
Draft architektury:
docs/planning/local-gateway.md(v3 — separacja Body/Brain) Zależy od: Phase 25 (COMPLETE — fundament bridge + API) Kryptonim: "Activate Local Power"
Developer łączy swoje lokalne IDE z VPS Arc OS. Kod żyje lokalnie; inteligencja dostarczana przez Bridge CLI + katalog konfiguracji .citadel/.
23.1 — Bridge CLI + API Foundation (DONE → Phase 25)
- Przeniesione do Phase 25.1 + 25.2 (zakończone)
23.2 — Local Intelligence (PLANNED)
- Vendoring
shared/evals.ts,shared/learnings.ts,shared/context-router.tsdo bridge/src/ citadel-bridge eval— uruchamianie evals lokalnie, bez siecicitadel-bridge learn— dodawanie ręcznej reguły uczenia- Interwał auto-pull (konfigurowalny, domyślnie 60 min)
- Podział dokumentów (2026-05-14):
docs/public/guides/local-bridge.md(413 LOC, wszystkie OS razem) zdekomponowany na landing + 3 podstrony OS (local-bridge-{macos,linux,windows}.md) + kopia UK.
23.3 — CRM Integration (PLANNED)
- Pole
local_sync_statusw odpowiedzi API projektu - Wskaźniki aktywności developera w gamifikowanym biurze (odznaka IDE, timer sesji)
- Generowanie i odwoływanie tokenów w CRM dashboard
23.4 — Distribution & Polish (PLANNED)
- Bun compile do pojedynczego binarnego
- Publikacja pakietu npm (
@citadel/bridge) citadel-bridge doctor— komenda diagnostyczna
Phase 26: Dynamic Workers (COMPLETE)
Architektura:
config/workers_registry.json+docs/architecture/dual-agent-flow.mdMotyw: Zastąp zakodowany binarny Consultant/Developer rozszerzalnym rejestrem workerów.
26.0 — Stage 1: Worker Registry Foundation (DONE)
config/workers_registry.json— deklaratywne definicje workerów (id, label, icon, type, model, tools, prompt_style, output_format, log_category, builtin)- 3 zarejestrowane workery: Consultant (chat, sonnet), Developer (terminal, opus), UI/UX Designer (chat, sonnet)
child-bot/bot.ts— zastąpiono 175-liniowyif/else(consultant vs developer) zunifikowanym dispatchemcallWorker()- Przepływ
getWorkerConfig(workerId)→callWorker(workerId, text, options) - Śledzenie wątków workerów przez Map
workerThreads(historia rozmów per worker) - Wsteczna kompatybilność:
consultantThreadsynchronizowany obokworkerThreads
- Przepływ
shared/crm-routes.ts— 3 zmiany:GET /api/crm/projects/:name/workers— zwraca tablicę rejestru workerówhandleSetActiveRole()— dynamiczna walidacja względem ID workerów z rejestruhandlePostMessage()— akceptuje i persystuje poleworker_idw JSONL
shared/logger.ts—log.worker(category, message, meta)dla dowolnych kategorii logów- Frontend
Workspace.jsx:useSSEStream(projectName, worker)— zunifikowany hook SSE dla typów chat i terminalWorkerPanel→ dispatchuje doChatPanelViewlubTerminalPanelViewprzezworker.type- Pasek
[WORKERS]z pill workerów (aktywny=akcent, nieaktywny=szary) - Wszystkie SSE przełączone z
/api/sse/consultant/na generyczne/api/sse/logs/?category=
26.1 — Stage 2: Dynamic Grid Activation (DONE)
- Pill workerów klikalny —
toggleWorker(id)dynamicznie dodaje/usuwa panele - Stabilność React:
key={worker.id}zapewnia, że istniejące panele zachowują połączenia SSE gdy sibling'i są montowane/odmontowywane - Persystencja layoutu Workspace: klucz
localStoragecitadel-workspace-active-${project.name}- Odczyt przy montowaniu i przełączaniu projektu, zapis przy każdym przełączeniu
- Fallback:
['consultant', 'developer']gdy brak zapisanego stanu
- Panel UI/UX Designer w pełni funkcjonalny: zaznacz pill → pojawia się 3. panel czatu, odśwież → persystuje
Phase 27: Knowledge Base & Wiki (COMPLETE)
CRM dashboard zyskuje przeglądarkę wiki tylko do odczytu dla outputu Knowledge Archivist.
27.0 — Wiki Viewer (DONE)
- 2 nowe endpointy CRM API:
GET /api/crm/projects/:name/wiki/tree— rekurencyjna lista plików.mdzknowledge-base/wiki/GET /api/crm/projects/:name/wiki/file?path=— odczyt pojedynczego pliku wiki z ochroną przed path traversal
- Frontend
pages/Wiki.jsx— układ dwupanelowy:- Sidebar (240px): drzewo plików,
index.mdprzypięty na początku, podświetlenie aktywnego pliku - Obszar treści:
ReactMarkdown+remarkGfmze stylami.chat-markdown - Wewnętrzne linki
.mdnawigują w przeglądarce, zewnętrzne otwierają się w nowej zakładce - Pusty stan z promptem do użycia Knowledge Archivist
- Sidebar (240px): drzewo plików,
- Nawigacja: element
Wikidodany doPROJECT_NAVsidebar
Phase 28: Auto-Ingest Watcher (COMPLETE)
Watcher plików w tle auto-wyzwala Knowledge Archivist gdy nowe pliki pojawiają się w
raw/.
28.0 — Auto-Ingest Watcher (DONE)
- Nowy moduł
child-bot/ingest-watcher.ts:fs.watch()naknowledge-base/raw/z debounce 3s per plik- Deduplikacja przez persystentny
ingest_processed.jsonw katalogu stanu - Wstrzykuje wiadomość do inbox CRM (
worker_id: "archivist") — nie potrzeba refaktoryzacji callWorker - Czyste sprzątanie przy zamknięciu bota
- Integracja w
bot.ts: czytaknowledge-base/config.json→ uruchamia watcher jeśliauto_ingest: true - Przepływ:
raw/ nowy plik → fs.watch → debounce → crm_inbox.jsonl → processCrmInbox() → /w:archivist → handleMessage() → callWorker("archivist") - Edge cases: bot zajęty (inbox kolejkuje), restart (stan persystuje), równoległe pliki (osobne timery)
Phase 29: i18n — EN/UK Internationalization (COMPLETE)
Pełna internacjonalizacja frontendu CRM z @lingui/react v5.
29.0 — i18n Infrastructure + Full Translation (DONE)
- Biblioteka: @lingui/react v5 + @lingui/core + @lingui/vite-plugin + babel macro
- Konfiguracja:
lingui.config.js— locales: [en, uk], format: po, compileNamespace: ts - Konfiguracja i18n:
src/crm/i18n/i18n.js— detectLocale (localStorage → navigator.language → 'en'), activateLocale, getDateLocale - LangSwitcher:
src/crm/i18n/LangSwitcher.jsx— przełącznik EN/UA z emoji flag w TopHeader - I18nProvider: opakowuje
<App />wmain.jsx - 186 przetłumaczonych ciągów w 25 komponentach
Phase 30: Onboarding Wizard (COMPLETE)
30.0 — Self-Service Workspace Creation (DONE)
POST /api/crm/onboarding/setupakceptuje FormData (JSON konfiguracji + pliki)- Kreator 5-krokowy: Welcome → Project → Team → API Keys → Integrations
- Presety zespołu: 7 presetów branżowych + 2 workery podstawowe (Manager, Keeper)
- Auto-provisionuje: katalogi, CLAUDE.md, MANIFEST, .env, workers_registry, wiki, child-bot, tmux
Phase 31: Web Authentication (COMPLETE)
31.0 — Session Auth + Multi-Tenancy (DONE)
/admin_login→ 6-cyfrowy kod (TTL 5min) → token JWT → localStorage- Strażnik własności
canAccessProject()na wszystkich trasach CRM - Komponenty frontend LoginOverlay + AuthManager
31.5 — ARC CLI + Knowledge MCP (DONE)
- Komendy CLI
arc login/logout/projects/start - 4 narzędzia MCP:
fetch_skill,report_mission,search_knowledge,get_learnings - 4 endpointy API:
/api/cli/init,/api/mcp/skills,/api/mcp/report,/api/mcp/learnings - Wstrzyknięcie CLAUDE.md z kontekstem cloud + auto-konfiguracja .mcp.json
- Pobieranie binarne dla 3 platform
Phase 32: Knowledge Dashboard (COMPLETE)
32.0 — Reports, Skills, Wiki, NotebookLM (DONE)
- Reports.jsx: feed timeline, grupowany datami, kolorowe tagi źródeł
- ProjectSkills.jsx: CRUD split-pane dla plików skilów
- Wiki.jsx: edycja/zapis/tworzenie inline z renderowaniem markdown
- NotebookLM.jsx: markowe landing + karty przypadków użycia
- Backend:
handleWikiSave,handleSaveSkill,handleDeleteSkill
32.1 — UI Hotfixes + Create Project Button (DONE)
- i18n dla 11 nowych ciągów, usunięto zduplikowaną nawigację "Docs"
- Przycisk "+ Utwórz Projekt" w ProjectNav
Phase 33: Multi-Tenant Project Creation (COMPLETE)
33.0 — Account-Level Keys + Lightweight Modal (DONE)
- Zrefaktoryzowano
handleOnboardingSetupna 10 wielokrotnie używanych helperów - Ustawienia konta:
/opt/repos/.accounts/{chatId}/settings.json(0o600) - 3 nowe endpointy:
GET/PUT /api/crm/account/settings,POST /api/crm/projects/create CreateProjectModal.jsx: 3-polowy modal (nazwa, nisza, preset) dla powracających użytkownikówAccountSettingsDialog.jsxprzez UserDropdown Profile- Katalogi z namespace użytkownika:
/opt/repos/{chatId}_{projectName}/ - Auto-migracja ze starszego
master-{chatId}/.env
Phase 34: Autonomous Project Manager (COMPLETE)
34.1 — Local Issue Tracking (DONE)
- Przechowywanie:
{cwd}/issues/issues.jsonper projekt (auto-increment, P0-P3, etykiety) - API:
POST/GET /api/mcp/issues/:project,PUT /api/mcp/issues/:project/:id - Narzędzia MCP:
create_issue(title, body, priority, labels),list_issues(status?)
34.2 — Wiki Sync Tool (DONE)
- Narzędzie MCP:
update_wiki(filename, content)— tworzenie/aktualizacja stron wiki markdown - Backend:
PUT /api/mcp/wiki/:project— sanityzowana nazwa pliku, dołączanie logu wiki - knowledge-mcp.ts: 8 narzędzi łącznie
34.3 — Roadmap Engine (DONE)
- Narzędzie MCP:
sync_roadmap(phase, status, notes)— aktualizacja ROADMAP.md w miejscu - Backend:
GET /api/mcp/roadmap/:project— ekstrakcja faz + następny cel - Backend:
PUT /api/mcp/roadmap/:project— zamiana statusu przez regex + dołączanie notatek
34.7 — Init Injection (DONE)
handleCliInitwstrzykuje listę otwartych issues (top 10) do CLAUDE.md- Wstrzykiwany następny cel roadmapy (pierwsza faza IN PROGRESS lub PLANNED)
- Referencja narzędzi MCP zaktualizowana z wszystkimi 8 narzędziami
Phase 35: Live Terminal Sync (COMPLETE)
35.1 — Backend Log Ingest (DONE)
POST /api/crm/projects/:name/terminal/log— odbiera buforowane linie JSONL z arc-cli- Dołącza do
/var/log/citadel/{name}/terminal-DATE.log - Istniejąca infrastruktura SSE (
handleSseLogsz?category=terminal) automatycznie wykrywa
35.2 — arc-cli Stdout Interceptor (DONE)
Bun.spawn(["claude"], { stdout: "pipe", stderr: "pipe" })zastępuje dziedziczone stdiopipeAndBuffer()czyta strumień, pisze do lokalnego terminala I buforuje dla APIstripAnsi()czyści sekwencje escape dla czystego transportuflushLogs()POSTuje buforowane linie co 2s do endpointu/terminal/log- Końcowe flush przy wyjściu procesu
35.3 — Frontend Live Terminal (DONE)
TerminalPanelViewma teraz przełącznik zakładek Bot / Live- Zakładka Live subskrybuje SSE
?category=terminalprzezuseSSEStream - Zielony pulsujący punkt podczas streamowania live logów
- Auto-przełączenie na zakładkę Live gdy sesja arc-cli startuje i logi bota są puste
Phase 36: Cloud Project Manager (COMPLETE)
36.1 — Backend SSE Chat Endpoint (DONE)
POST /api/crm/projects/:name/chat— proxy streamujący SSE do Anthropic Messages API- Używa klucza Anthropic API użytkownika z Ustawień Konta (Phase 33)
- Definiuje narzędzie
ask_notebooklm— odpytuje bazę wiedzy projektu - Pętla narzędzi po stronie serwera: do 3 rund bez streamowania dla wywołań narzędzi, potem streamuje końcowy tekst
36.2 — Frontend Cloud PM Chat (DONE)
- Komponent
CloudPmPanelView— pełny interfejs czatu z parsowaniem strumienia SSE - Wiadomości w stylu dymków (użytkownik prawo, asystent lewo) z renderowaniem Markdown
- Wskaźnik statusu narzędzia ("Querying: ...") podczas wykonywania narzędzia po stronie serwera
- Auto-scroll, Enter aby wysłać, shift+Enter dla nowej linii
36.3 — NotebookLM Bridge (DONE)
- Serwis Python FastAPI w
services/notebooklm-bridge/(port 19213, tylko localhost) - Asynchroniczny klient
notebooklm-pydla semantycznego wyszukiwania Google executeAskNotebooklm→ asynchroniczne wywołanie bridge z timeoutem 15s, fallback do lokalnego wyszukiwania słów kluczowych- SyncWorker:
asyncio.Queue(200), opóźnienie 2s, 3 próby z exponential backoff - Fire-and-forget sync w
handleUpdateIssueihandleMcpWikiUpdate - Auto-init notebook przy tworzeniu projektu
36.6 — Neural Skill Generator Wizard (DONE)
POST /api/crm/projects/:name/skills/generate— odpytuje bridge NotebookLM, zwraca skill Markdown- Frontend: ProjectSkills.jsx zyskuje przycisk ikony mózgu
- Modal kreator: dropdown notebooka + textarea celu ekstrakcji + spinner ładowania
36.7 — Neural Memory Sidebar (DONE)
GET /api/crm/projects/:name/notebooks— zwraca połączone notebooki NotebookLM per projekt- Frontend: sekcja "Neural Memory" sidebar z kropką statusu zielony/czerwony
Phase 37: SSO & Social Auth (COMPLETE)
37.0 — OAuth Google + GitHub (DONE)
- Google + GitHub OAuth w
shared/auth.ts - 5 nowych tras:
/api/auth/google,/api/auth/callback/google,/api/auth/github,/api/auth/callback/github,/api/auth/providers - Frontend: App.jsx wyodrębnia
?token=z URL po przekierowaniu callbacku - LoginOverlay przeprojektowany: przyciski OAuth jako główne, formularz email za "Continue with email"
- Zmienne env:
GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET,GITHUB_CLIENT_ID,GITHUB_CLIENT_SECRET
Phase 38: CLI-First Architecture (COMPLETE)
Zastąp narzędzia MCP subkomendami CLI. Redukcja tokenów 85%.
38.0 — MCP → CLI Migration (DONE)
- 8 narzędzi MCP → 8 subkomend CLI (
arc skill/report/kb/learnings/issue/issues/wiki/roadmap) clients/lib/api.ts— 8 funkcji wrapper APIhandleCliInitCLAUDE.md teraz odwołuje się do### Cloud Commands (use via Bash tool)zamiast narzędzi MCPknowledge-mcp.tszdeprecjonowany z banerembuild-arc.shbuduje tylko binarnearc
38.1 — SKILL.md Standard (DONE)
- Prompt Skill Wizard generuje format SKILL.md z frontmatter YAML
handleSaveSkilldual-path: frontmatter SKILL.md →.claude/skills/<name>/SKILL.md, else →skills/<name>.md
38.2 — Artifact Bridge (DONE)
- Python bridge: endpoint
POST /artifacts/downloaddla artefaktów NotebookLM - Wpływ na tokeny: ~800 tokenów schemat MCP → ~120 tokenów referencja CLI = redukcja 85%
38.8 — Admin Whitelist (DONE)
- Zmienna env
SUPER_ADMIN_EMAILSdo przypisywania roli admin - Usunięto starszy kod UI admin
- Odznaka roli admin w dropdownie użytkownika
Phase 39: Mobile Responsive Dashboard + Workspace Hub (COMPLETE)
39.0 — Responsive Layout (DONE)
- Hook
useIsMobile()— oparty namatchMedia, breakpoint 768px CrmMainLayout.jsx— sidebar jako overlay na mobile,100dvh, oddzielne stany sidebar mobile/desktopSidebar.jsx— tryb overlay (fixed + backdrop + animacja slide-in)TopHeader.jsx— klasy CSS dla responsywnościProjectNav.jsx— kompaktowe padding, "Utwórz Projekt" pokazuje tylko "+" na mobile
39.3 — Workspace Hub & Lifecycle Management (DONE)
- Siatka
ProjectCardna stronie Analytics - Strona
ProjectSettings— tożsamość, wizualizacja, łączenie notebooka, archiwizacja - Nagłówek workspace w Sidebar — pokazuje nazwę aktywnego projektu + zębatkę ustawień
39.4 — Live Memory Cycle (DONE)
handleMemoryRefresh— odpowiednik TypeScriptseed_knowledge.pyhandleMemoryFetchArtifact— proxy do bridge NotebookLM/artifacts/download- ARC CLI: subkomendy
arc memory refresh+arc memory fetch-artifact [--type]
Phase 40: Tabula Rasa — SQLite SSOT + Protocol System (COMPLETE)
Nuklearne wyczyszczenie starszego JSON → SQLite jako jedyne źródło prawdy. Trójpoziomowy System Protokołów. Scentralizowany WorkspaceSelector. Trwała Historia Czatu.
40.0 — SQLite Migration (DONE)
shared/db.ts— singleton bun:sqlite, tryb WAL,userQueries/projectQueries/accountQueriesshared/migrations/001_initial_schema.ts— tabele users/projects/account_settingsscripts/migrate-to-db.ts— nuklearne wyczyszczenie starszego JSON →/opt/repos/_legacy_trash/{timestamp}/→ świeże DB
40.7 — Three-Level Protocol System (DONE)
shared/migrations/002_project_protocol.ts— kolumnaproject_protocolSYSTEM_PROTOCOLeksportowany wcli-routes.ts— uniwersalne reguły agentów (SSOT, śledzenie issues, sync roadmapy)generateProjectRules()wcrm-routes.ts
40.8 — Centralized WorkspaceSelector & Health Monitor (DONE)
- NOWY:
WorkspaceSelector.jsx— dropdown nagłówka zastępujący pasek zakładek ProjectNav - TopHeader.jsx — strefa centralna zastąpiona WorkspaceSelector
- CrmMainLayout.jsx — import i renderowanie
ProjectNavusunięte
40.10 — Persistent Chat History / Immortal Chat (DONE)
shared/migrations/003_chat_messages.ts— tabelachat_messages+ kompozytowy indeksshared/db.ts— eksportchatQueries: insert, getHistory (paginacja kursorem), getLatest, deleteByProject, count- Frontend (
Workspace.jsx): ładowanie historii, "Load earlier messages", auto-scroll
Phase 40.11: Evolutionary Skill System + Sage Worker + Data-Driven Approvals (COMPLETE)
40.11 — Evolutionary Skill System (DONE)
shared/migrations/004_skill_system.ts— 4 tabele:skills_global,skills_project_forks,skill_evolution_logs,skill_update_requests- Frontend:
SkillEvolution.jsx(1113 linii, dwupanelowy: explorer 280px + szczegóły z 4 zakładkami)
40.11c — Sage Worker (Autonomous Skill Improvement) (DONE)
shared/sage.ts(~220 linii):runSageAnalysis()+callSageModel()+buildSagePrompt()- Model Haiku, metryki jakości + learnings → wiersze DB
skill_update_requests
40.11d — Data-Driven Approvals (Benchmarks) (DONE)
shared/migrations/005_skill_benchmarks.ts— tabelaskill_benchmarksshared/sage.tsrozszerzony:runBenchmark()— 3 scenariusze testowe przez Haiku, ślepy test A/B stara vs nowa wersja skilla, sędzia LLM z randomizacją pozycji
Phase 40.12: Marketplace Discovery (COMPLETE)
Znajdź, analizuj i instaluj skille społecznościowe z claudemarketplaces.com bezpośrednio w Skill Evolution Center.
Backend — shared/sage.ts
- 2 nowe prompty:
SCOUT_ANALYZE_SYSTEM(analiza kompatybilności 0-10, JSON output),SCOUT_CLEAN_SYSTEM
Backend — shared/crm-routes.ts (3 nowe handlery + 3 trasy)
POST /api/crm/sage/scout— wyszukiwanie claudemarketplaces.com, multi-strategiczny parser HTML, cache w pamięci (TTL 5min)POST /api/crm/sage/scout/analyze— pobierz stronę skilla, wyodrębnij SKILL.md, analiza kompatybilności LLMPOST /api/crm/sage/scout/install— wyczyszczenie treści, wstaw globalnie lub upsert fork projektu
Frontend — SkillEvolution.jsx
- zakładka "Discovery" w pasku zakładek
- Subkomponent
DiscoveryTab: pasek wyszukiwania, siatka wyników, karty skilów, panel analizy
Phase 40.12.1: Smart Rank — Compatibility Sorting & Quick Scan Cache (COMPLETE)
Backend
shared/migrations/007_marketplace_cache.ts— tabelamarketplace_analysis_cachePOST /api/crm/sage/scout/quick-scan— batch skan do 40 skilów za jednym wywołaniem (~2s)
Frontend — SkillEvolution.jsx (DiscoveryTab)
- Dropdown sortowania: Relevance (domyślnie) / Compatibility / Popularity
- Przycisk "Smart Rank" — wyzwala quick-scan, auto-przełącza na sortowanie kompatybilnością
Phase 40.13: Autonomous Knowledge Harvester (COMPLETE)
Proaktywne odkrywanie skilów. Gap Detector odpala się na zero dopasowań context-routera.
Backend — shared/harvester.ts (nowy moduł)
shared/migrations/008_harvester.ts— dodaje kolumnyis_suggestion,source_querydomarketplace_analysis_cachedetectGap(message, projectName)— ekstrakcja słów kluczowych, wyszukiwanie marketplace, quick-scan- Fire-and-forget w
child-bot/bot.tsgdy context-router nie znajduje dopasowań
Phase 40.14: CRM Roadmap & Issues UI (COMPLETE)
Backend
cli-routes.ts:loadIssues()— samoleczący: uszkodzony/brakującyissues.jsonauto-reskafoldowanycrm-routes.ts:generateProjectRules()tworzy scaffoldingdocs/ROADMAP.md+issues/issues.json
Frontend — Roadmap.jsx (~220 linii)
- Dwa tryby widoku: Phases (zwarta lista kart ze kolorowymi odznakami statusu) i Full View (surowy markdown)
- Odznaki statusu: DONE (zielony), IN PROGRESS (niebieski), PLANNED (szary), BLOCKED (czerwony)
Frontend — Issues.jsx (~310 linii)
- Lista issues z filtrem przełączania Open/Closed/All
- Odznaki priorytetu: P0 (czerwony + animacja pulsowania), P1 (pomarańczowy), P2 (niebieski), P3 (szary)
- Typografia monospace: ID (
#001zero-padded), priorytety, etykiety, znaczniki czasu
Phase 40.15: Lucide React Icons (COMPLETE)
Zastąp wszystkie ikony Unicode/emoji ikonami Lucide React SVG.
Zmiany
- Zainstalowano
lucide-react(tree-shakeable, MIT, 1500+ ikon SVG) - Zastąpiono ~100 emoji i symboli Unicode w 22 plikach CRM
- Konwencja rozmiarów ikon: 16px (sidebar/nav), 18px (przyciski akcji), 14px (ikony inline)
Phase 40.16: Per-Worker Telegram Bot Token UI (COMPLETE)
Zmiany
- WorkerForm: dodano stany
tgToken,tgConfigured,tgShowToken,tgSaving - Sekcja Telegram Bot (skonfigurowany wskaźnik + Disconnect, lub zamaskowany input + Connect)
Phase 40.17: Knowledge Graph + Open in Obsidian (COMPLETE)
Issue #006: Open in Obsidian
- Przycisk w sekcji sidebar Neural Memory
- Używa protokołu
obsidian://open?vault=knowledge-base&path=wiki
Issue #007: Knowledge Graph
Backend:
- Endpoint
GET /api/crm/projects/:name/knowledge-graph - Skanuje pliki
knowledge-base/wiki/**/*.md, wyodrębnia[[wikilinks]]i linki[text](file.md)
Frontend:
KnowledgeGraph.jsx— Graf force-directed oparty na Canvas (Fruchterman-Reingold)- Zero zewnętrznych zależności; pan/zoom, wyszukiwanie/filtrowanie węzłów
Phase 40.18: Deploy Safety — DB SSOT for Ownership (COMPLETE)
Stałe rozwiązanie dla projektów znikających po deploy (git pull nadpisuje owner_id w bot_registry.json).
Rozwiązanie — 3 Warstwy Ochrony
| Warstwa | Co | Kiedy |
|---|---|---|
| DB SSOT | handleGetProjects + isProjectOwner sprawdzają DB najpierw, rejestr jako fallback |
Każde wywołanie API |
| Backup deploy | vps-sync.sh backup rejestru przed git pull, przywrócenie pól owner_id po |
Każdy deploy |
| Enrichment przy starcie | Master bot uzupełnia brakujące owner_id z DB przy uruchomieniu |
Każdy restart |
Phase 40.19: Auth Completion — Full Login Form (DONE)
40.19a — Google OAuth Credentials (DONE)
- Projekt Google Cloud + ekran zgody OAuth utworzony
GOOGLE_CLIENT_ID+GOOGLE_CLIENT_SECRETskonfigurowane na VPS (vault)
40.19b — Telegram OTP Login (REMOVED)
- Funkcja zdeprecjonowana na rzecz email/hasło + OAuth.
40.19c — Password Reset Flow (DONE)
POST /api/auth/forgot-password— generuj token resetu (TTL 30min)POST /api/auth/reset-password— waliduj token + ustaw nowe hasło- Integracja Resend: prawdziwe dostarczanie email przez
shared/email.ts
40.19d — Email Verification (DONE)
verificationTokensstore (TTL 24h) wshared/auth.ts- Rejestracja wysyła teraz email weryfikacyjny + zwraca
{requires_verification, email}(bez JWT) - Użytkownicy OAuth auto-weryfikowani (Google/GitHub już potwierdzają email)
40.19e — Email Delivery Infrastructure (DONE)
shared/email.ts— abstrakcja nad Resend + console fallbackRESEND_API_KEYprzechowywany w vault (AES-256-GCM)
Phase 41: UI Refresh — Vercel Redesign Adaptation (COMPLETE)
Etapowa migracja referencyjnego projektu Next.js wygenerowanego przez Vercel do istniejącego stosu React+Lingui+Vite. 8 pod-faz, zero zmiany frameworka.
41.1 — Design Tokens (Issue #10) — DONE
- Przestrzeń kolorów OKLCH w
frontend/src/crm/styles/globals.css - Primary deep teal, Accent warm amber, Background warm ivory
41.2 — Worker Selector Pills (Issue #11) — DONE
- Poziome piguły z awatarami tone-ring (5 tonów opartych na chart przez hash id)
41.3 — Chat Message Bubbles + Action Bar (Issue #12) — DONE
- Dymki użytkownika odwrócone do ciemnego pierwszego planu (wzorzec Vercel)
- Dymki workera: awatar tone-ring + obramowanie + shadow-card + promień 16
41.4 — Chat Composer Refresh (Issue #13) — DONE
- Promień 24→16, focus ring przez box-shadow halo
- Chip licznika Tools (pokazuje aktywną liczbę), chip szybkiego wstawiania /btw
41.5 — Sidebar Badge Counters + Recent Activity (Issue #14) — DONE
- Odznaka liczby issues na elemencie nawigacji
- Sekcja Live Activity: top 3 zdarzenia z zagregowanych logów issues, poll 30s
41.6 — TopBar Search with ⌘K (Issue #15) — DONE
- SearchButton z podpowiedzią kbd ⌘/Ctrl K uwzględniającą platformę
41.7 — Context Rail (Issue #16) — DONE
- Nowy 320px prawy panel w CrmMainLayout
- Sekcje: Current Goal (roadmapa), Metryki 2×2, lista Active Skills, Przypięte z wątku, stopka git+sync
- Widoczny tylko gdy viewport ≥ 1280px ORAZ activePage to workspace
41.8 — Pinned Notes Feature (Issue #17) — DONE
- Migracja 009: tabela
pinned_notes, pinnedNoteQueries w shared/db.ts - Endpointy
GET/POST/DELETE /api/crm/projects/:name/pins[/:id] - Przycisk "Zapisz do notatki" w czacie → POST /pins, emituje zdarzenie
crm-pin-created
Phase 42: Security Hardening — Sentinel Audit 2026-04-23 (COMPLETE)
Referencja:
docs/security/audit-2026-04-23.md(3 krytyczne + 2 poważne + drobne znaleziska). Odblokowuje produkcję wielu użytkowników. Werdykt po łatkach: ZIELONY.
42.1 — Multi-tenancy: SSE owner_id guard (SEC-1) — DONE
routeSseRequestrozszerzony o paramchatId+ sprawdzeniecanAccessProject- Chroni
/api/sse/logs/:name+/api/sse/consultant/:name
42.2 — Multi-tenancy: WS terminal guard + admin-only interactive (SEC-2) — DONE
- Bramka
canAccessProjectna/ws/terminal/:name ?mode=interactivewymaga CEO chat_id LUB DB user.role === "admin"
42.3 — Multi-tenancy: CLI/MCP block guard (SEC-3) — DONE
- Bramka entry
canAccessProjectna blokach/api/cli/*+/api/mcp/*
42.4 — Bun.serve bind to 127.0.0.1 (SEC-4) — DONE
hostname: "127.0.0.1"na Bun.serve- Zweryfikowane przez
ss -tlnp:127.0.0.1:19210(było*:19210)
42.5 — chat/save project_name validation (SEC-5) — DONE
- Sprawdzenie
isValidProjectNamena/api/internal/chat/save
42.6 — Minor hardening (SEC-6) — DONE
timingSafeEqualwverifyToken(eliminuje timing side-channel)- Lista deny nginx rozszerzona:
state|scripts|config|data|knowledge-base|issues|skills|blueprints|mcp-server - Pełny audyt
safePath: znaleziono + naprawiono path-traversal whandleSaveSkill
42.7 — Sentinel re-audit remediation — DONE
- SEC-FN1 (P2): fail-closed bramka C3 — nieprawidłowa nazwa projektu teraz odrzucana przy wejściu bloku
- SEC-FN2 (P3): usunięto martwą referencję
/api/cli/chat-savez skipGuard - SEC-V1 (P2):
/api/internal/bridge-event/:projectwaliduje teraz project_name - Testy regresji dodane do
scripts/vps-sync.shpost-deploy smoke tests
42.8 — Hotfix SEC-REG1 (extractChatId browser EventSource) — DONE
- Fix: 2-krokowa ekstrakcja tokenu (nagłówek → fallback query) w
shared/crm-routes.ts:extractChatId
42.9 — SSRF hotfix + relay hardening (SEC-NEW1..3) — DONE
- SEC-NEW1 (P0 Critical):
handleScoutAnalyzewymaga terazhttps:+ allowlist hostname (claudemarketplaces.com+ www) - SEC-NEW2 (P1): odrzucanie żądań
/api/internal/*niosących nagłówkiX-Forwarded-For,X-Real-IPlubForwarded
42.10 — Redirect-based SSRF close-out (SEC-NEW4, P3) — DONE
- Fix:
redirect: "manual"+ jawne odrzucanie 3xx (502 "Redirects not allowed")
42.11 — Sentinel 4th pass: Non-blocker hardening — DONE
- SEC-NEW5 (P2): kolejność rozrzucania body bridge-event zmieniona —
type: "bridge_event"teraz po...body - SEC-NEW6 (P2): rate limiter w pamięci na
/api/auth/forgot-passwordi/api/auth/resend-verification - SEC-NEW7 (P3): padding czasu odpowiedzi na obu endpointach email
42.12 — Worker identity + model wiring — DONE
arc startnie hardkoduje już flagi--model— Claude Code używa lokalnie skonfigurowanego modelu
Phase 42 FINAL SIGN-OFF
| Metryka | Wartość |
|---|---|
| Problemy bezpieczeństwa znalezione w 5 przejściach audytu | 16 |
| Naprawione | 16 |
| Dług bezpieczeństwa (bloker) | 0 |
| Werdykt | 🟢 ZIELONY — Gotowy na wielu użytkowników |
Phase 43: UI/UX Audit Implementation (COMPLETE)
Referencja:
docs/design/ui-ux-audit-2026-04-23.md(głęboki przegląd Vanguard pass #2) 21 issues utworzone (#13–#33), wszystkie zamknięte. Wynik re-audytu: A- (95/100).
43.1 — Accessibility (WCAG 2.1 Level A) — DONE
- Focus visible (#13): globalne style
*:focus-visible, usuniętooutline: 'none'z 15 komponentów - Kontrast dark mode (#14): text-tertiary podniesione oklch 0.55→0.62
- prefers-reduced-motion (#20): globalne zapytanie media likwiduje wszystkie animacje
43.2 — Navigation & Layout Cleanup — DONE
- Czyszczenie TopHeader (#15): usunięto martwe zakładki, usunięto stub przycisku Search
- Hierarchia wizualna Sidebar (#24): trójpoziomowy system primary/secondary/tertiary
43.3 — Design System & Architecture — DONE
- Hierarchia z-index (#16): 8-poziomowa skala zmiennych CSS
- Zakodowane kolory (#17): 24 kolory hex w Workspace → zmienne CSS
43.4 — UX Improvements — DONE
- Auto-expand Composer (#18): min 88px (3 linie), max 240px,
resize: vertical - Toast system (#21):
toast.error/success/infozastępuje wszystkie wywołaniaalert()
Phase 44: Analytics Page Redesign (COMPLETE)
44.1 — DB Migration & Backend — DONE
- Tabela
project_phases(migracja 010) do śledzenia roadmapy - Tabela
activity_log(migracja 011) do ustrukturyzowanego logowania zdarzeń logActivity()— auto-logger fire-and-forget z 8 hookami
44.2 — Frontend Components — DONE
- ActivityTimeline — feed aktywności z ikonami, względnymi znacznikami czasu
- ActivePhasesList — karty podsumowania roadmapy z paskami postępu, odliczaniem deadline
44.3 — Polish & i18n — DONE
- 20 nowych ciągów i18n (EN/UK, łącznie 458)
44.4 — Token Economy Benchmark + Optimization — DONE
- Wyniki: overhead CLAUDE.md 24.1% → 3.7% (−82% poprawa!)
- Koszt: $0.146 → $0.140 (ARC prawie na równi z Pure Claude)
- ROI: oszczędności $600 na 100k sesji przez cały okres
Phase 44.6: Workspace Redesign — Evolution (COMPLETE)
44.6.1 — Centralized Design System — DONE
- Stworzono
frontend/src/crm/styles/design-system.css(przestrzeń kolorów OKLCH) - Ciepły clay akcent (#c25b3f) zastępujący teal (#44627A)
- 6 kolorów specyficznych per worker
44.6.2 — Worker Status Dots with Glow — DONE
- Komponent status-dot (koło 6px) z 4 stanami
- Thinking: amber + pulsujący glow
44.6.3 — ActionBar Component — DONE
- Przyciski Resume/Pause/Stop dla wszystkich aktywnych workerów
44.6.4 — Slash Command Hints — DONE
- Chipsy pill dla /spec, /issue, /recall, /handoff, /review
Phase 45: Zero-Knowledge E2EE Architecture (DONE ✅)
45.1 — E2EE Foundation — DONE ✅ (2026-04-28)
- Wrapper WebCrypto API (
frontend/src/crm/crypto/e2ee.ts, 214 linii) - Derywacja klucza PBKDF2 (100k iteracji, SHA-256) → AES-256-GCM
45.2 — API Key Encryption — DONE ✅ (2026-04-28)
vault.ts:encryptField()/decryptField()/isFieldEncrypted()przez klucz vault AES-256-GCM
45.3 — Chat Message Encryption — DONE ✅ (2026-04-28)
- Migracja 015: kolumna
encryptednachat_messages db.ts: auto-szyfrowanie przy INSERT, auto-deszyfrowanie przy SELECT
45.4 — Recovery Keys & Backup — DONE ✅ (2026-04-28)
- Migracja 016: tabela
recovery_keysz zaszyfrowanymi kopiami zapasowymi klucza głównego - Format klucza w stylu 1Password:
XXXX-XXXX-XXXX-XXXX-XXXX
45.5 — Security Hardening — DONE ✅ (2026-04-28)
- Nagłówki CSP na wszystkich odpowiedziach CRM API:
default-src 'self' shared/pii-sanitizer.ts: redaguje emaile, klucze API, JWT, numery kart z logów
Phase 44.5: Documentation Coverage Expansion (COMPLETE)
Pokrycie dokumentami: 65% → ~95%. Osiem nowych dokumentów publicznych.
44.5.2 — New Public Documentation (DONE)
guides/arc-cli-reference.md(425 linii) — wszystkie 16 komend CLIguides/telegram-bots.md(160 linii) — architektura Master/Child botguides/notebooklm-bridge.md(162 linii) — wyszukiwanie semantyczne, auto-syncarchitecture/workers-and-intelligence.md(214 linii) — 6 wbudowanych workerów, Binary Evalsapi/api-reference.md(272 linii) — 68+ endpointów w 13 kategoriacharchitecture/database-schema.md— 14 tabel, 12 migracjiguides/development-setup.md— lokalne devguides/troubleshooting.md— diagnostyka po symptomach
Phase 46: Parallel Worker Execution (COMPLETE)
Każdy worker = osobny proces. Koniec z globalnym muteksem
isProcessingblokującym wszystkich workerów.
46.1 — Registry Schema Evolution — DONE
execution_mode: "parallel"|"single"(domyślnie) + tablicaworkers[]wbot_registry.json
46.2 — Worker Spawn Utility — DONE
shared/worker-spawn.ts:spawnWorkerProcess()+spawnAllWorkers()
46.3 — Worker-Specific Inbox Routing — DONE
handlePostMessagezawsze pisze do inbox specyficznego dla workera dla projektów w trybie parallel
46.4 — Watchdog Multi-Worker — DONE
- Niezależny health check + auto-restart per worker (nie per projekt)
46.5 — Restart API Per-Worker — DONE
POST /restart→ restart wszystkich workerówPOST /restart?worker_id=developer→ restart konkretnego workera
Wpływ: Prawdziwe równoległe wykonywanie workerów. Koniec z kolejkowaniem — wyślij wiadomości do Developer i Consultant jednocześnie.
Phase 47: Timeline Observability — DAW for AI Teams (COMPLETE ✓)
Metafora Logic Pro — workerzy jako pasy, zdarzenia jako klipy na wspólnym timeline. Innowacja: Unikalne IP, żadne inne narzędzie AI orchestracji nie ma tego widoku.
47.1 — Message Timestamps — COMPLETE ✓
- Migracja 013: dodano
timestamp_ms INTEGERdo tabeli chat_messages
47.2 — Timeline Events Table — COMPLETE ✓
- Migracja 014: CREATE TABLE timeline_events
- Schema: id, project_name, worker_id, event_type, timestamp (Unix ms), duration, label, content, metadata
47.3 — Timeline Frontend Components — COMPLETE ✓
- 7 nowych komponentów (łącznie 1009 linii):
- TimelinePage.jsx, LaneHead.jsx, Lane.jsx, Event.jsx, TimeRuler.jsx, ChatPanel.jsx, Transport.jsx
- Funkcje: Wyciszenie/Solo workerów, kliknięcie zdarzenia → podświetlenie w czacie
47.8 — Issues Redesign (Variant B Hybrid) — COMPLETE ✓
- IssuesRedesign.jsx (1100+ linii) — pełna przeróbka UI:
- Grupowanie fazowe: Automatyczna ekstrakcja z tytułu lub etykiet
- Zwijalne sekcje: Komponent PhaseGroup z expand/collapse
- Śledzenie postępu: X/Y zamknięte + pasek procentowy
- Panel szczegółów slide-in: 440px prawy panel
- Responsywny mobile (breakpoint 767px)
47.9 — Favicon Redesign + Branding Cleanup — COMPLETE ✓
- SVG favicon (clay arcs, <500 B) + wariant dark mode
- site.webmanifest z maskable icon + theme-color #c25b3f
47.15 — Per-mode Theme Presets + Custom Colors — COMPLETE ✓
ThemeAwareLogo— auto-przełączanie między wariantami classic (jasny) i dark- 7 presetów dark-mode w design-system.css
47.16 — Issue Detail Wizard with Inline Editing — COMPLETE ✓
- Szerszy panel (520px, było 440px)
- Edycja inline tytułu, opisu, priorytetu, fazy, właściciela, etykiet
Phase 48: Architecture Decomposition — Logical Service Boundaries (P0 COMPLETE)
Od monolitu do logicznej architektury. Trzy monolityczne pliki (10 779 linii) rozłożone na 30 modułów domenowych (373 linii w dispatcherach).
graph LR
subgraph "Before (10,779 LOC)"
M1[crm-routes.ts<br/>6,181 LOC<br/>~120 handlers]
M2[api-server.ts<br/>1,464 LOC]
M3[Workspace.jsx<br/>~3,134 LOC]
end
subgraph "After (373 LOC dispatchers + modules)"
R[router.ts<br/>512 LOC dispatch]
AS[api-server.ts<br/>196 LOC]
WP[Workspace.jsx<br/>168 LOC orchestrator]
subgraph "shared/routes 17 modules"
S1[projects · files · workers · skills · chat]
S2[wiki · sage · onboarding · pins · docs]
S3[learnings · specs · restart · system · analytics]
end
subgraph "master-bot/routes 4 modules"
B1[auth · internal · cli · websocket]
end
subgraph "pages/workspace 9 modules"
W1[ChatThread · Composer · TerminalPanel · CloudPmPanel]
W2[WorkerSelector · WorkerStudio · ThinkingTips]
W3[QuickActionBar · useSSEStream]
end
end
M1 -.refactor.-> R
R --> S1 & S2 & S3
M2 -.refactor.-> AS
AS --> B1
M3 -.refactor.-> WP
WP --> W1 & W2 & W3
48.1 — Decompose crm-routes.ts — DONE ✅
- 6181 → 9 linii (shim re-eksportu). 17 modułów domenowych w
shared/routes/
48.2 — Decompose api-server.ts — DONE ✅
- 1464 → 196 linii. 4 moduły tras w
master-bot/routes/
48.3 — Decompose child-bot/bot.ts — DONE ✅
- 1952 → 1047 linii. 4 moduły
48.4 — Frontend Workspace Decomposition — DONE ✅
- 3134 → 168 linii. 9 komponentów w
frontend/src/crm/pages/workspace/
48.5 — Event-Driven Inbox via fs.watch — DONE ✅ (2026-04-28)
- Zastąpienie 500ms file polling instant delivery bez dodatkowych zależności
- Wynik: latencja 500ms→~5ms (100×), zero nowych zależności
48.6 — Worker Lazy Lifecycle (idle-kill + wake-up) — DONE ✅ (2026-04-28)
- Worker self-idle-shutdown po 10 min ciszy + wake-up na żądanie przy pierwszej wiadomości
- Wynik: ~425 MB RAM zwolnione per użytkownik (5 idle workerów × 85 MB). Pojemność 2 → 6-10 równoczesnych użytkowników
Phase 49: Doc Enforcement & GitHub Integration (COMPLETE)
49.1 — Pre-push doc coverage hook — DONE ✅ (2026-04-28)
scripts/check-docs-coverage.ts— skrypt Bun, mapowanie reguł.githooks/pre-push— wywołuje check-docs-coverage w trybie hook- Bypass:
git push --no-verify(dla emergency / commitów nie-kodu — widoczny w git log)
49.2 — arc wrapup CLI helper — DONE ✅ (2026-04-28)
arc wrapup— lista kontrolna tylko do odczytuarc wrapup --generate— dołącza wpisy-szkielety z oznaczeniem TODO
49.3 — GitHub Light integration — DONE ✅ (2026-04-28)
- Migracja 017:
github_linkstabela POST /api/crm/projects/:name/github— utwórz link, zwraca URL webhooka + sekret + instrukcje konfiguracjiPOST /api/webhooks/github— publiczny odbiornik, zwalidowany HMAC-SHA256, rate-limited 100 req/min- Komendy ARC CLI:
arc github link/links/unlink
49.3.1 — GitHub UI sidebar feed — DONE ✅ (2026-04-28)
- Migracja 018:
github_eventstabela frontend/src/crm/components/github/GithubFeed.jsx— poll 30s, auto-ukrycie gdy brak połączonych repozytoriów
Phase 50: Registration Conversion Lift (COMPLETE)
Konwersja 4% → docelowe 9.5% (+138%).
50.1 — Auth gate removal + trial credits scaffolding (Stage 1) — DONE ✅
loginUser— zwraca{ token, needs_verification: true }zamiast 403 dla niezweryfikowanych- Migracja 019:
users.trial_granted_at+projects.trial_mode+projects.trial_tokens_remaining
50.1 — Stage 2 (token tracking + UI banner) — DONE ✅
PLATFORM_ANTHROPIC_KEYdodany do vaultTrialBanner.jsx: State 1 — email niezweryfikowany, State 2 — trial aktywny z paskiem postępu, State 3 — wyczerpany
50.2 — Wizard 5→3 steps — DONE ✅
Nowy przepływ (3 kroki, ~50 sekund):
- Quick Start — tylko nazwa + projectName (~30s)
- API Keys — opcjonalne z fallbackiem trial (~10s)
- Integrations — Local Bridge / Telegram (~10s)
50.3 — Roadmap Redesign (Variant A) — DONE ✅
- Nowy komponent
RoadmapRedesign.jsxw stylu Linear — tabela z banerem "Now", filtry statusu, rozwijalne wiersze
Phase 51: Stripe Billing — Stage 1 (DB + middleware + status) — DONE ✅ (2026-04-29)
Model cenowy (limity OR-semantyczne):
| Plan | Cena | Projekty | Workerzy |
|---|---|---|---|
| Free | $0 | 1 | 5 |
| Min | $4.99/mies. | 5 LUB 25 łącznie | OR-semantic |
| Max | $11.99/mies. | 20 LUB 150 łącznie | OR-semantic |
Komponenty Stage 1:
- Migracja 020: tabela
subscriptions+stripe_events(log idempotentności) PLAN_LIMITSstała — jedyne źródło prawdy dla mapowania plan→limity→funkcjecheckPlanLimit(userId, action)— OR-semantic, zwraca{allowed, reason, current, limit, plan}- Egzekwowanie wdrożone w:
handleOnboardingSetup+handleCreateWorker→ 402 ze strukturalnym błędem
Phase 52: Friends & Family Beta Launch (IN PROGRESS)
Publiczny start odroczony do walidacji F&F. 10-20 użytkowników × 1 miesiąc = prawdziwy sygnał przed aktywacją Stripe.
Kryteria Sukcesu (musisz osiągnąć przed publicznym startem)
- ≥70% signup → konwersja first_message_sent
- ≥40% returned_after_24h (Day 1 retencja)
- ≥25% returned_after_7d (Day 7 stickiness)
- 0 bugów P0 zgłoszonych przez ostatnie 3 dni beta
- Średni czas onboardingu <10 min (signup → pierwsza wiadomość)
- ≥80% użytkowników F&F ocenia doświadczenie 4-5/5
Pod-fazy
52.1.1 — Documentation Overhaul (P0/P1) — DONE ✅ (2026-05-04)
- Synchronizacja CLAUDE.md + PRODUCT.md do Phase 52.1
- Dodano 5 bloków mermaid
- Przepisano user-guide.md z §21 Timeline, §22 Trial+Billing, §23 Beta Access
52.1 UK debt closure (#32, #33, #34) — DONE ✅ (2026-05-17)
- #33: AI-przetłumaczono 5 brakujących dokumentów architektury UK
- #32: natywno-ukraiński pass jakości na 19 dokumentach UK. Werdykt B+/A-
- #34: 10 produkcyjnych skryptów tekstowych w docs/public/media/scripts/
52.1.4 — Bulk UK translation pass (P1) — DONE ✅ (2026-05-05)
scripts/translate-docs.ts(Bun, 130 LOC) — bulk-tłumaczenie przez subprocessclaude -p- 17/17 plików przetłumaczonych, 0 błędów
52.1.3 — Docs UX Polish (P1) — DONE ✅ (2026-05-05)
- Naprawiono scroll anchor, wyszukiwanie z podświetlaniem, i18n dokumentów
52.1 — Invite Codes + Feedback Channel (P0, 1 dzień) — DONE ✅ (2026-04-29)
- Migracja 021: tabela
invites - Format kodu:
arc-XXXX-XXXX(8 znaków hex z dywizem, crypto.randomBytes) - Bramka rejestracji:
/api/auth/registerwymaga polainvite_code, 403 invite_required inaczej - ARC CLI:
arc invites generate --count N,arc invites list,arc invites revoke <code>
52.1.1 — beta plan tier for F&F testers — DONE ✅ (2026-04-30)
- Nowy plan
betawPLAN_LIMITS:projects: Infinity,workers: Infinity, wszystkie funkcje Max
52.2 — Sample Project + Onboarding Tour (P0, 0.5 dnia) 52.3 — Funnel Analytics (P0, 1 dzień) 52.4 — Error UX + Status Page (P1, 1 dzień) 52.5 — Doc Cleanup (P2, 0.5 dnia) 52.6 — Uptime Monitoring (P1, 0.5 dnia) 52.7 — Buffer Day (P0, 0.5 dnia)
Łącznie: 5 dni do gotowości F&F.
Phase 53: Post-F&F Notifications (IN PROGRESS)
53.11.1 — Bot Creation Wizard (closes #48) — DONE ✅ (2026-05-10)
- Backend: nowy
POST /api/crm/projects/:name/workers/:id/suggest-bot-usernamezwraca 5 kandydatów - Frontend:
BotCreationWizard.jsx(~505 LOC) — 3-krokowy modal z paskiem postępu, przycisk deep-link BotFather - Telemetria: 6 zdarzeń (started / username_selected / botfather_opened / token_pasted / completed / abandoned)
53.21 — Sentinel P2 batch 2 — DONE ✅ (2026-05-12, closes #107 #108 #109)
- #107 P2-10: cross-tenant drain
/api/internal/trial/consume— wymaganieowner_id+ weryfikacja - #108 P2-11: atrybucja dryfu
handleSubmitFeedback— dodano sprawdzeniecanAccessProject - #109 P2-12: pływające tagi obrazów Docker zablokowane — przypięte do digests
@sha256:
53.20 — Sentinel P2 fast-wins batch — DONE ✅ (2026-05-12, closes #104 #105 #106)
- #104 P2-3: oracle timingowy TOTP — zastąpiono
timingSafeEqual - #105 P2-6: rozszerzenie wzorców sanityzatora PII — dodano wzorce dla OpenAI, Stripe, GitHub, Slack, AWS
- #106 P2-9: rate-limit
/api/cli/device/new
53.19 — mTLS CF Authenticated Origin Pulls — repo prep — DONE ✅ (2026-05-11, #96 Stage 2 ready)
infra/nginx/cloudflare-origin-pull-ca.pem— CF Origin Pull CAinfra/nginx/snippets/cloudflare-mtls-enabled.conf+cloudflare-mtls-disabled.confCF_MTLS_ENABLE=1 bash scripts/vps-sync.shwłącza mTLS
53.17 — Sentinel pentest follow-up: CF lockdown + child-bot loopback + repo SSOT — DONE ✅ (2026-05-11)
- PT-IM1 (fail2ban): instalacja + konfiguracja (sshd:
maxretry=3 findtime=10m bantime=24h) - PT-IM2 (SSH harden):
PermitRootLogin prohibit-password+PasswordAuthentication no - PT-CF1 + PT-CF2: blokada Cloudflare przez vhost nginx:
geo $realip_remote_addrz 22 zakresami CF - PT-CB1: child-bot/bot.ts bind loopback
hostname: "127.0.0.1" - Werdykt audytu Sentinel 3.: 🟢 ZIELONY. Wszystkie 12 łatek zweryfikowane na prod.
53.16 — Sentinel Sprint 2: 13 × P1 — DONE ✅ (2026-05-10, closes #68-80)
- #69 P1-2 + #70 P1-3: ochrona path traversal w
handleMkdir/handleCreateFile/handleSaveFile - #68 P1-1: usunięcie
notebook_id/display_namez bash -c interpolacji → child-bot/.env - #71 P1-4:
recentActivity/hotProjects/topWorkerswymagają terazownerId - #72 P1-5:
WsBridgeData.chatIdz JWT przy upgrade/ws/local-bridge
53.15 — Sentinel Sprint 1: 5×P0 + PII redaction — DONE ✅ (2026-05-10, closes #62-67)
- #62 (P0-1): usunięto fallback
|| "citadel-admin-2026", fail-closed przy brakuADMIN_PASSWORD - #63 (P0-2): bramka
requireAdminna każdym mutatorze globalnych skilów - #64 (P0-3): flow logowania 2FA naprawiony — jednorazowy
tfa_challenge_tokenz TTL 5 min - #65 (P0-4): blok HTTP
:80 → return 301 https://..., HSTSmax-age=31536000 - #66 (P0-5):
limit_req_zoneauth=5r/m + webhook=30r/m
53.14 — Migrate issues.json to SQLite — DONE ✅ (2026-05-10, closes #53)
- Nowa migracja
023_project_issues— composite PK(project_name, id) loadIssues()+saveIssues()wshared/cli-routes.tssą teraz cienkimi wrapperamiissues/issues.jsondodany do.gitignore+git rm --cached
53.13 — Root tsconfig.json + tsc --noEmit in pre-push & CI — DONE ✅ (2026-05-10, closes #44)
- Nowy root
package.json+tsconfig.json(strict:falsebaseline) - Baseline
bun run typechecknaprawił 32 błędy w 8 plikach - 83 testy jednostkowe nadal zielone. Końcowy
bun run typecheck→ 0 błędów
53.12 — Deploy hygiene: structural merge for auto-append SSOT files — DONE ✅ (2026-05-10)
- Nowy
scripts/preserve-auto-append.shuruchamia merge strukturalny któregogitnie może - 3 strategie merge:
issues.jsonprzez jq,learnings.mdprzez grep,wiki/log.mdprzez sekcje
53.10 — Informative TG notify hooks — DONE ✅ (2026-05-10, closes #47)
- Nowy
.claude/notify-lib.sh(~140 LOC): wspólne helpery — świeżość JWT, chain rozwiązywania auth .claude/notify-stop.shprzepisany: ostatni turn asystenta, sanityzacja + obcinanie do 600 znaków
53.7 — CI/CD foundation — DONE ✅ (2026-05-07, closes #43, #44, #45, #46)
- Projekt miał zero infrastruktury CI i zero testów jednostkowych
.github/workflows/ci.yml: 3 równoległe joby (backend/frontend/python), ~30s wall- Łącznie: 52 przypadki / 139 oczekiwań / 113ms wall
53.4 — Worker TG bot reliability fixes — DONE ✅ (2026-05-07, closes #41)
- Naprawiono przekazywanie ścieżki vault:
startWorkerBoteksportujeMASTER_VAULT_PATH - Sprawdzenie unikalności:
handleSetWorkerTelegramTokenwaliduje token przez TelegramgetMe, iteruje wpisy
53.5 — BETA badge + in-app feedback widget — DONE ✅ (2026-05-07)
- TopHeader: pill-badge
BETA · 1.0.0.1obok ArcLogo - Nowy
FeedbackWidget(~280 LOC): pływający przycisk message-circle dolny-prawy
53.3b — Zero-touch via existing arc CLI infra — DONE ✅ (2026-05-07)
notify-stop.shprzepisany z prawidłowym pierwszeństwem:ARC_TOKENenv →CRM_TOKENenv →~/.arc/config.json- TTL token CLI/device-code wydłużony z 24h do 30d
53.2 — Local Claude Code Stop hook → /notify endpoint — DONE ✅ (2026-05-07)
- Nowy endpoint
POST /api/crm/projects/:name/workers/:id/notify
53.1 — Per-worker TG event notifications — DONE ✅ (2026-05-07)
- Nowy
shared/tg-notify.ts: lookupuje vaultworker:<project>:<id>:bot_token - Workspace bot emituje 4 typy zdarzeń:
worker_finished,spec_pending,subprocess_failed,quality_low
Phase 54: Onboarding Engagement Layer (IN PROGRESS)
Phase 50 rozwiązała "signup → dashboard". Phase 54 zamyka pozostałą lukę: "dashboard → pierwsze udane polecenie AI".
54.1 — Schema + telemetry foundation — DONE ✅
- Migracja 025
onboarding_progress— nowa osobna tabela - 4 endpointy:
GET/POST /api/crm/onboarding/progress,POST /event,POST /dismiss,POST /replay
54.2 — Checklist UI + replay button — DONE ✅
- Nowy
frontend/src/crm/components/OnboardingChecklist.jsx— zwijana karta z paskiem postępu, 5 kroków frontend/src/crm/hooks/useOnboarding.js— single source of truth
54.3 — CLI-first stage with arc tour command — DONE ✅
- Nowa interaktywna subkomenda
arc tour— przebiega 5 etapów z terminala
54.4 — Skill generator wizard — DONE ✅
- Wyodrębniono Neural Skill Generator (Phase 36.6) do wielokrotnie używanego
SkillGeneratorWizard.jsx
54.5 — Empty states + profile completion widget — DONE ✅
- Nowy wielokrotnie używany
frontend/src/crm/components/EmptyState.jsx - Nowy
ProfileCompletionWidget.jsxzamontowany wSidebarContent
54.6 — Funnel analytics — DONE ✅
- Nowy
analyticsQueries.onboardingFunnelStats(hours)agregacja - Nowy endpoint
GET /api/crm/analytics/onboarding-funnel?hours=N
Phase 54 follow-up — Welcome feature tour (issue #114) — DONE ✅
- 5-slajdowy karuzel post-rejestracyjny (
WelcomeFeatureTour.jsx)
Phase 54 follow-up — Issue discipline enforcement (issue #115) — DONE ✅
- Backend:
ActivityEntry['type']rozszerzony osession_start/session_end/switched_in/switched_away/auto_summary/reopened - CLI: interaktywny picker
pickActiveIssue,ARC_ACTIVE_ISSUE_IDwstrzykiwany do podprocesu Claude - Web Workspace: modal
ActiveIssuePicker.jsx, klikalny pill aktywnego issue w pasku workera - Telegram: zestaw
/issuew każdym child bocie - Nocny cron audytu: flaguje projekty z ≥5 zdarzeniami aktywności ale 0 aktualizacjami issue w 24h
Phase 54 follow-up — commit-msg hook requiring #<id> (issue #116) — DONE ✅
- Nowy
.githooks/commit-msgwaliduje każdą wiadomość commitu - Allowlist: Conventional-commits prefixów maintenance, Merge / Revert / fixup!
Phase 54 follow-up — PostToolUse auto-log hook (issue #125) — DONE ✅
- Nowy
scripts/citadel-hooks/post-tool-use-log.shodpala się na PostToolUse dlaEdit/Write/MultiEdit/Bash
Phase 54 follow-up — ROADMAP gate on closes-#N (issue #127) — DONE ✅
- Rozszerza
scripts/check-docs-coverage.tso nową regułę: trigger nacloses #N/fixes #N/resolves #N
Phase 54 follow-up — Scope-drift watcher (issue #126) — DONE ✅
- Nowy
.githooks/pre-commitczytaARC_ACTIVE_ISSUE_ID, analizuje dopasowanie staged files do tytułu/treści issue - Warn-not-fail domyślnie: shouldWarn =
hints.length > 0 AND ≥3 staged AND >50% drifting
Phase 54 follow-up — Retrospective issue reconstruction (issue #117) — DONE ✅
- Nowa subkomenda CLI
arc retro <project>rekonstruuje issues z historii sesji + git log - Deduplikacja przez Jaccard-on-words
titleSimilarity(próg 0.55) × okno ±48h
Phase 55: Login Page Redesign — Cosmic Editorial (PLANNED)
Zastąpienie obecnego statycznego
LoginOverlay.jsxprojektem Claude Design "Variant A — Cosmic Editorial".
55.1 — Strip designer toggles before merge — DONE ✅ (2026-05-13)
- Usunięto:
tweaks-panel.jsx,design-canvas.jsx, warianty B/C/D parts/signin-app.jsx: 252 LOC → 99 LOC
55.2 — Animated cosmic backdrop — DONE ✅ (2026-05-13)
LoginBackdrop.jsx(~290 LOC): 9-warstwowa kompozycja Planety, 10-warstwowy paralaksowy Starfield
55.3 — CosmicCard form — DONE ✅ (2026-05-13)
CosmicCard.jsx~580 LOC, szklana karta + maszyna stanówidle / loading / error / magic / success
55.4 — Editorial side — DONE ✅ (2026-05-13)
EditorialPanel.jsx+CapabilitySlider.jsx+Tickertape.jsx
55.5 — Magic-link flow — DONE ✅ (2026-05-13)
- Backend:
generateMagicToken/consumeMagicToken(TTL 10 min przezephemeral_tokens) - Frontend: UI stanu
magic+ odliczanie 60s do ponownego wysłania
55.6 — 2FA / TOTP — BLOCKED on Sentinel design — STILL BLOCKED
55.7 — Mobile + responsive breakpoints — DONE ✅ (2026-05-13)
- Hook
useViewportMode+ CSS Grid template wLoginOverlay.jsx
55.8 — A11y + i18n + reduced-motion audit — DONE ✅ (2026-05-13)
aria-invalidna polach formularza,role=alert+aria-live=assertivena banerze błędu- 44 nowe ciągi lingui wyodrębnione + przetłumaczone na UK
55.10 — QA fixes vs canonical design — DONE ✅ (2026-05-13)
- 5 rozbieżności deploy-vs-design naprawionych w
CosmicCard.jsx+EditorialPanel.jsx FooterRow:Docs · Terms · Privacy · ● Status · EN / UK
Phase 56: AI Interop Layer — Project Context Export (PLANNED)
Pozwól właścicielom projektów przekazać kompletny, sanityzowany snapshot projektu do dowolnego zewnętrznego AI bez teatru kopiuj-wklej.
56.1 — Secret scanner module — DONE ✅ (2026-05-13)
shared/secret-scanner.ts: 3-tierowy skaner: Tier 1 regex, Tier 2 entropia Shannona (≥4.5 bits/char), Tier 3 heurystyki kontekstu- 51 testów zielonych
56.2 — Export endpoint + section renderer — DONE ✅ (2026-05-13)
shared/routes/context-export.ts:GET /api/crm/projects/:name/context-export?include=...- 7 rendererów sekcji: tożsamość / workerzy / architektura / issues / aktywność / commity / learnings
56.3 — Project Context Export modal — DONE ✅ (2026-05-13)
ProjectContextExportModal.jsx: 3 kroki (sekcje → skan sekretów → podgląd & pobieranie)- Bramka only-owner egzekwowana przez backend
56.4 — Settings + audit log — DONE ✅ (2026-05-13)
- Migracja 024:
export_audit_log+export_preferencestabele
56.5 — Telemetry + alerts — DONE ✅ (2026-05-13)
logActivity("export_alert", ...)gdy właściciel ma ≥3 eksporty w 24h ANDnotify_on_exportopt-in
Phase 57: Platform Settings UI (Sentinel #103 follow-up, IN PROGRESS)
Zamknięcie wektora wycieku za #103: rotacja platform secretów nie wymaga już ssh + edit-
.env+ wklejanie w czacie.
57.1 — Backend MVP — DONE ✅ (2026-05-15)
shared/migrations/026_platform_audit_log.ts— tabela append-onlyshared/routes/platform.ts— 5 handlerów: list / rotate / test / restart / audit- Allowlist 9 kluczy; Hard
NEVER_EXPOSEwykluczenie:CRM_SECRET+SECRET_ENCRYPTION_KEY
57.2 — Frontend — DONE ✅ (2026-05-15)
PlatformSettings.jsx(~620 LOC) — responsywna siatka kart, modal rotacji z<input type="password">, drawer logu audytu- TopHeader: entry Shielda
Platformz flagąadminOnly: true
57.3 — Hot-reload integration — DONE ✅ (2026-05-15)
shared/auth.ts loadOAuthConfig()czytagetSecret()per wywołanie- Klucze GitHub/Google/Resend: hot-reload po rotacji. Klucze ANTHROPIC + Telegram: wymagają restartu
57.3.1 — UI polish — DONE ✅ (2026-05-15)
- Siatkę zrefaktoryzowano na 4 kategoryzowane sekcje (Anthropic / OAuth Providers / Telegram Bots / Transactional Email)
57.3.2 — UK i18n catalog — DONE ✅ (2026-05-15)
- 66 brakujących ciągów UK przetłumaczonych w jednym przejściu
57.3.3 — Full backend localization — DONE ✅ (2026-05-16)
_PLATFORM_BACKEND_I18Nrejestr wewnątrzPlatformSettings.jsx— jawne wywołaniamsg\…`` dla każdego ciągu backend
57.3.4 — MessageDescriptor map fix — DONE ✅ (2026-05-16)
- Zbudowano
PLATFORM_I18N = new Map(descriptors.map(d => [d.message, d]))tak że render może_(MAP.get(item.label))
Phase 58: Header / UserDropdown UX (DONE ✅ 2026-05-16)
Refaktoryzacja UX wzorując się na Claude.ai: pill użytkownika w dolnym-lewym rogu zamiast klastra Docs/Help/Lang/Theme/Avatar w górnym-prawym.
58.1 — Bottom-left user pill (DONE) — UserDropdown.jsx przepisany jako pill na stałej pozycji dolny-lewy (szerokość 240px). Popover otwiera się do góry. Nowe menu 3-tierowe.
58.2 — TopHeader cleanup (DONE) — usunięto przycisk Docs, menu Help, LangSwitcher, ThemeToggle, UserDropdown ze strefy prawej.
58.1.1 — Onboarding modal wizard + per-step hints (DONE ✅ 2026-05-16)
- Nowy
OnboardingModal.jsxz backdrop blur + zamknięciem ESC - Nowy
OnboardingProgressPill— mały pływający przycisk dolny-prawy z pierścieniem postępu SVG - Każdy wpis
STEP_METAma nowe polehintz konkretnymi breadcrumbami nawigacyjnymi
Phase 59: Localization Expansion — 6 nowych lokalizacji (PLANNED)
Arc OS dostarcza dziś EN + UK (438 ciągów, lingui v5). Phase 59 dodaje 6 lokalizacji równolegle: DE (niemiecki), ES (hiszpański), PL (polski), RU (rosyjski), pt-BR (brazylijski), FR (francuski).
Języki trwale poza zakresem (nie odroczone — inna kategoria inżynieryjna):
- JA / zh-CN — rendering CJK, subsetting czcionek, interlinii — osobna klasa problemu
- AR — obsługa RTL wymaga kierunkowania na poziomie komponentu
59.1 — Lingui infra + glossary + tone conventions — DONE ✅ (2026-05-17)
- 6 nowych plików
messages.pozasianychz mastera EN, lingui.config.js zaktualizowany - Konwencje tonu ZABLOKOWANE per lokalizacja: DE "du", ES "tú", PL formy czasownikowe 2. osoby (unikanie Pan/Pani), RU "ты", pt-BR "você", FR "tu"
- Słowniki per lokalizacja
config/i18n-glossary/<lang>.json - Szkielet pipeline tłumaczeń AI (
scripts/i18n-translate.ts)
59.2 — AI translation pipeline + UI strings × 6 — DONE ✅ (2026-05-17)
- Tłumaczenie batch: ~438 ciągów × 6 lokalizacji = ~2628 tłumaczeń przez Claude API
- Lingui compile + vite build zielone dla wszystkich 8 lokalizacji
59.3 — Public docs translation × 6 — PARTIAL ⏸ (2026-05-17, 64/216 plików = 30%)
- Odzwierciedlenie struktury
docs/public/uk/dla 6 nowych lokalizacji: ~40 plików markdown × 6 = 240+ dokumentów - Pipeline świadomy markdown: pomijanie bloków kodu, inline code, URL
- Strategia fallback: nieprzetłumaczone dokumenty pokazują EN z banerem per lokalizacja
59.4 — Translation feedback widget + per-locale review dashboard — PLANNED 59.5 — UI visual regression × 6 locales — PLANNED 59.6 — Language analytics + browser auto-detect + switcher polish — PLANNED
Tech Stack
| Warstwa | Technologia |
|---|---|
| Brain | Sesje Claude Code (Agent Teams) |
| CRM API | Serwer HTTP Bun na Master Bot (:19210) — 62+ endpointów REST + SSE + WebSocket + czat Cloud PM + Sage Worker + Marketplace Scout + Knowledge Graph, auth JWT + OAuth |
| Proxy | Nginx (:18888) — statyczny frontend, reverse proxy API/SSE/WS |
| ARC CLI | Skompilowane binarne Bun — 8 subkomend cloud (skill, report, kb, learnings, issue, issues, wiki, roadmap) + odświeżanie/pobieranie artefaktów memory |
| Frontend | React CRM (responsywny, mobile-first) + Phaser 3.80 (gamifikowane biuro) + terminal xterm.js + @lingui/react i18n (EN/UK) |
| Komendy | Sfederowane Boty Telegram (Master + Children) |
| Auth | JWT (HMAC-SHA256) + OAuth (Google, GitHub) + rejestracja email/hasło |
| Stan | SQLite SSOT (shared/db.ts, tryb WAL) + JSON tylko dla infrastruktury (bot_registry, heartbeat) |
| Inteligencja | Binary Evals + Context Router + Learnings + Karpathy Loop + Sage Worker (Haiku) + Benchmarki A/B + Marketplace Scout |
| Sekrety | Skarbiec AES-256-GCM (shared/vault.ts) |
| Logowanie | JSONL ustrukturyzowany (shared/logger.ts) → /var/log/citadel/ |
| Resilience | Samoleczący watchdog (master-bot/watchdog.ts) |
| NotebookLM Bridge | Python FastAPI (:19213) — wyszukiwanie semantyczne przez notebooklm-py + auto-sync |
| Pamięć | 3 poziomy: Hot (JSON) / Warm (GitHub) / Cold (NotebookLM semantic search) |
| Deploy | Docker Compose, Nginx, Contabo VPS |
Legacy Migration
| Komponent | Linii v1 | Zastąpienie v2 |
|---|---|---|
| FastAPI backend | ~3,000 | Sesja Claude Code |
| telegram_bridge.py | ~2,800 | Oficjalna wtyczka Channel |
| hybrid_engine.py | ~1,000 | Natywne wykonanie Claude |
| bridge_processor.sh | ~500 | Wyeliminowany |
| database.py | ~700 | Pliki stanu JSON |
| WebSocketManager.js | ~200 | StatePoller.js (SSE) |
| Łącznie | ~11 321 | ~3 700 |
Redukcja bazy kodu o 67%.
Utrzymywany przez Rick (Orchestrator). Aktualizowany po każdym ukończeniu fazy.