# Modern FreshVibe OS — Comprehensive UI / Behaviour / Chrome Audit **Session:** 417228937957532 · **Date:** 2026-09-10 ~18:46 UTC · **Repo:** `vibecoder-standalone` (ID9) **Scope:** Every visible surface, interaction, notification, chat/AI surface, chrome registry, and the FRS → modern delta. **Method:** Source-of-truth audit (no inference from memory). File paths, line numbers, byte sizes all from `ls` / `grep` / `read` on the live tree. --- ## 0. CRITICAL NAMING CORRECTION (operator recall vs. reality) The operator's recall used two terms that don't match the actual architecture: | Operator term | Actual meaning | Source | |---|---|---| | **"FreshVibe OS"** | NOT a separate repo. The **Fv-Chrome vendored UI layer** (`vibecoder-standalone/src/cms/`, v2.0.0, 423 files, `schemaVersion: fv-chrome-manifest.001`, released 2026-08-23 by Mavis session 412100071272671, "Day 11 vendor-immune flip") | `FV-CHROME-VERSION.txt` + `FV-CHROME-MANIFEST.json` | | **"PM2"** | **Panel Manager Module** (in-browser, `window.PanelManager`, 834 lines at `panel-manager.js:832-833`). **NOT** the Node.js process manager | `src/cms/runtime/panel-manager/panel-manager.js` | | **"fv-module-gallery"** | The 21 modules + 6 FreshVibeOrigin sections source, not a separate chrome piece | `src/gallery/`, `src/host/freshvibe-origin/` | --- ## 1. WORKSPACE GIT STATE — 9 repos + 1 non-git | Repo | Role | Head | |---|---|---| | `fv-module-gallery` | 21 modules + 6 FreshVibeOrigin sections source | gallery-pact v3 | | `freshvibe-cms` | Upstream Fv-Chrome (the thing we vendor) | v1.4.0 (but vendored copy is v2.0.0) | | `freshvibe-reconstruction-engine` | FvRE — Python CLI for scan/extract/measure | /opt/fv-re/ | | `freshvibestudio` | Original FreshVibe Studio (legacy reference) | post-pact 2026-07-13 | | `fv-gallery-ui` | Gallery UI (used by VibeChat picker) | 2026-08-31 | | `vibecoder-standalone` | **The modern chrome — this audit's home** | ID9 2026-09-10 | | `vibecoder-id9-sandbox` | Branch sandbox for ID9 work | sibling | | `oscar-ai` | Oscar's AI layer | sibling | | `oscar-platform` | Oscar production | sibling | | `/workspace/fvw` | **NOT git**, the FvW v8 doctrine reference | read-only | --- ## 2. THE 5-PART MODERN CHROME Per `host-boot.js:1-26` architecture docstring, the modern chrome has 5 named parts: ### 2.1 `src/cms/runtime/panel-manager/` — **PanelManager v2** (834 lines) - **Path:** `src/cms/runtime/panel-manager/panel-manager.js` - **API:** `window.PanelManager = { addPanel, activate, dock, float, minimize, maximize, move, list, remove }` - **Edges:** 4 (`['left', 'right', 'top', 'bottom']`) - **Sections:** `cms, dev, edge, vibechat, vsil, origin, custom, history, ...` - **Dock pill:** Animated pill that shows when panels dock to an edge - **z-index:** `panels: 1000`, `dock-pills: 1100`, `VibeChat: 2147483645`, `header: 2147483648` ### 2.2 `src/cms/runtime/edge-panel/` — **Edge Panel** (1760 lines) - **Path:** `src/cms/runtime/edge-panel/edge-panel.js` - **5 main tabs** with sub-tabs, mapping 1:1 to the 5+1 surfaces - **SURFACE_TO_PANELS** mapping (lines 50-60): - `cms` → `panels: ['fvcms-cms-panel', 'fvcms-dev-panel']` - `dev` → `panels: ['fvcms-vibechat']` - `vibe` → `panels: ['fvcms-vibechat']` - `app`, `data`, `files` → empty - `tools` → `panels: ['fvcms-history']` - `extensions` → `panels: ['fvcms-vsil-panel']` - **Open fns:** `{openStructure, openInspector, openVibeChat}` etc. ### 2.3 `src/cms/runtime/cms-panel.js` — **CMS Panel** (auto-mounts on import) - Self-mounts when `host-boot.js` imports it - Mounts the CMS region editor + skinned renderers ### 2.4 `app-fragments/fvcms-dev-panel/` — **Dev Panel** (Trace + Versions) - Auto-inits on import - Has its own `fvcms-dev-btn` fragment (the `{ }` button) - **Day 10ff+ (2026-08-20):** the `{ }` button was promoted to `#fv-topbar-dev`; CSS now hides the floating element but keeps it in the DOM for back-compat with `__fvcmsTogglePanel` callers ### 2.5 `modules/system/panel-system/` — **Panel System v1.0.0** (Pro Mode + 45% rule) - Wraps PM2 to enforce Pro Mode - Prevents panels from being minimized to less than 45% of their original size - Mounted via `src/host/panel-system-bootstrap.js` + `panel-system-runtime.js` --- ## 3. PM2 (Panel Manager Module) — REALITY ### 3.1 Core API - `window.PanelManager` exposed at `panel-manager.js:832-833` (834 lines) - Methods: `addPanel({id, section, dockEdge, title, content, ...})`, `activate(id)`, `dock(id, edge)`, `float(id)`, `minimize(id)`, `maximize(id)`, `move(id, x, y)`, `list()`, `remove(id)` ### 3.2 ID10 v0.6 custom code in `src/host/` 5 host-side files wrap/extend PM2: | File | Purpose | Plan ref | |---|---|---| | `default-arrangement.js` | Initial arrangement via PM2 addPanel (3-panel: CMS L / Edge R / VibeChat B) | a643 Day 1 | | `preview-engine.js` | Hides CMS tags in preview modes | a643 Day 4 | | `pro-mode-lock.js` | Wraps PM2 minimize to enforce Pro Mode lock | a643 Day 3 | | `custom-panels.js` | Adds custom panels via PM2 addPanel | a643 Day 5 (§24, §26) | | `history-surface.js` | Change history via PM2 snap/revert | a643 Day 5 (§26) | ### 3.3 Known panel IDs (from default-arrangement.js + edge-panel.js) ``` fvcms-cms-panel (CMS, dock L) fvcms-edge-panel (Edge, dock R) fvcms-vibechat (VibeChat, dock B) fvcms-dev-panel (Dev Panel, auto-init) fvcms-history (History, tools tab) fvcms-vsil-panel (VSIL, extensions tab) fvcms-gallery-panel (Gallery, opened by header "Gallery" icon) fvcms-picker-panel (Picker, opened by header "Gallery" icon — Phase 2 2026-09-04) fvcms-side-chrome (SideChrome, r212+ r213 4-tile panel) ``` --- ## 4. CURRENT CHROME — `main.tsx` + MinimalHeader + SideChrome ### 4.1 `main.tsx` — INTENTIONALLY EMPTY - No legacy React VibeChatApp mount - No `?legacy=0/1` toggle - Operator 2026-08-19 22:34 CEST directive: "no use the proper panel system from freshvibe cms, don't take corners" - The chrome (position: fixed on top of #fv-main-canvas) IS the entire UX - Old React VibeChatApp at `/vibechat`, Monaco editor at `/editor`, conversations/content-types pages all DELETED ### 4.2 `src/host/header/MinimalHeader.tsx` (r210, 2026-08-30 16:01) — the OS Header - 40px tall, `position: fixed`, `z-index: 2147483648` - 4 elements L→R: **(1) Fv log name** "FV • vibecoder" (read-only) · **(2) Surface cycle label** (click to cycle MAIN → WORKING → DRAFT → PREVIEW → ORIGIN) · **(3) Gallery icon** (opens PickerPanel by default, falls back to Gallery) · **(4) Edge icon** (calls `__fvcmsOpenEdgePanel`) - **Gone from r202 era:** 5 surface pills + 5 eye icons (WDM `attachEyeHandlers()` call removed in `workspace/index.ts`) + Hamburger menu (replaced with Edge icon) + Home/Origin button (Origin is now LAST in the cycle) + project name span (folded into Fv log) ### 4.3 `src/host/chrome/SideChrome.tsx` (r212+r213) — the 4-tile panel - Replaces r208 dev-facing 4-tab row with **user-facing tiles** (scene / inspector / composer / timeline) - 2×2 grid inside the panel - `MountIntegration` (r232c) wraps the body, forwarding refs to `` + `` + `` --- ## 5. THE 5 SURFACES (per `MinimalHeader.tsx:36-38`) ```ts export type SurfaceId = 'main' | 'working' | 'draft' | 'preview' | 'origin'; const SURFACE_CYCLE: readonly SurfaceId[] = ['main', 'working', 'draft', 'preview', 'origin'] as const; ``` - **Cycle:** MAIN → WORKING → DRAFT → PREVIEW → ORIGIN → MAIN - **Active surface** read from `window.__fvcmsActiveSurface` (set by WDM, declared in `src/global.d.ts`) - **Setting** via `window.__fvcmsSetActiveSurface(id)` - **Event:** `document` emits `fvcms:active-surface-changed` (CustomEvent, detail `{id: SurfaceId}`) on every change - **Subscribers:** `SideChrome.tsx:104` + `MinimalHeader.tsx:79` --- ## 6. NOTIFICATION SYSTEM — `fvcms-toast` (singleton) ### 6.1 Implementation - **Element:** `
` (single DOM element) - **Source:** `src/cms/app-fragments/fvcms-dev-btn/fvcms-dev-btn.js:13-17` (mounts the element on first load) - **CSS:** `fvcms-dev-btn.css` — `position: fixed; top: 16px; left: 50%; transform: translateX(-50%); background: rgba(45, 79, 45, .97); z-index: 1000000; opacity: 0; transition: opacity .2s` - **API:** `document.getElementById('fvcms-toast')` + `.classList.add('show')` for 1500ms ### 6.2 Callers (10 sites in chrome code) - `cms/app-fragments/fvcms-module-editor/fvcms-module-editor.js:7-8` (showToast helper) - `cms/app-fragments/fvcms-trace/fvcms-trace.js:70` (Tag copied) - `cms/edge-panel/edge-panel.js:167` (showToast helper, 4+ call sites) - `vcs/VibeChatSurface.js:24` (showToast helper, fallbackCopy) - `vcs/PM2PanelContainer.js` (transitively) ### 6.3 What the operator sees - A SINGLE mono-spaced green pill at the top-center, "fades in/out, 1500ms" — like a clipboard confirmation - NO "info/success/warning/error" categorization - NO 4-type / 5-signal / 5-surface routing (the FRS v7 toast design is GONE) ### 6.4 Mantine notifications - `src/pages/ContentTypesPage.tsx:98,101,128,132,391` calls Mantine `notifications.show(...)` — but **only on the legacy ContentTypesPage** (which is not part of the modern chrome) - The modern chrome does NOT use Mantine notifications --- ## 7. CURRENT CHAT / AI INTERFACE — TWO PARALLEL STACKS ### 7.1 Stack A: **`src/vcs/`** — Vanilla-JS, the ACTIVE stack - `vcs/PM2PanelContainer.js` — mounts unified VibeChat inside the `fvcms-pm-panel` (PM2 path) - `vcs/StandaloneContainer.js` — mounts unified VibeChat docked to bottom of `document.body` (non-PM2 path) - `vcs/VibeChatSurface.js` — UNIFICATION PHASE 3: the unified internal component tree, used by BOTH containers - `vcs/VibeChatStore.js` — UNIFICATION PHASE 2: consolidated shared store - `STORAGE_KEY = 'vibechat.threads.v1'` - `MIGRATION_FLAG = 'vibechat.threads.v2-migrated-v2'` - `PB_BASE = 'https://vibecoder.freshvibeapps.com/api/agent'` - Default email: `vibecoder-user-email` localStorage key (default `admin@freshvibeapps.local`) - **3 seed threads** (t-default, t-1 "Build a v0.6 Day 10 audit", t-2 "Plan §22.1") - 4 message roles: `user | assistant | system | tool` ### 7.2 Stack B: **`src/vibechat/`** — React-based, the INACTIVE stack - `VibeChatApp.tsx` — 3-column layout (Threads / Chat / Tools) - Components: `ThreadsPanel`, `ChatPanel`, `ToolsPanel`, `SettingsModal` - Uses `WorkingContextProvider` + `useResizable` hook - **But:** r235a (2026-09-02) registers `__vibechatUnifiedApi`, `__vibechatUnifiedStore`, `__vibechatUnifiedRenderer`, `__r235aVibechat` globals as side-effect imports in `main.tsx`. VibeChat ships UN-MOUNTED — ID9 (r235b) was supposed to wire `` into chrome, but the search shows `` is defined at `src/host/editor/vibechat/components/VibeChatUnified.tsx` but is NOT mounted anywhere in the chrome ### 7.3 Stack C: **`src/host/editor/vibechat/`** — the r235a components (also un-mounted) - `VibeChatUnified.tsx` — top-level (r235a, has 12 sub-components: ModeFrame, Header, Rail, AnswerPane, InputBar, ResizeHandle, Chevron) - Mode set: `docked-bottom | expanded-up | floating-pm2 | fullscreen` - Per `VibeChatGlobal.ts:2-17`: - `__r235aVibechat = { schema: 'r235a-vibechat', version: 'r235a-2026-09-02', registeredAt }` - `__vibechatUnifiedStore.setEnabled(false)` initially - Enable via `localStorage.vibechat.unified=1` ### 7.4 What the operator ACTUALLY SEES - A `fvcms-vibechat` panel (docked B), with the PM2 `vcs/PM2PanelContainer.js` rendering `` inside `
` - RunAgent is `src/agent/core.ts#runAgent` (22-tool agent with plan mode, recon, spec enrichment, multi-provider support) - Picker context is merged automatically: `pickerContext.{lastApp, lastTemplate, lastAsset, lastPlanner, lastTimeline, lastShell, lastBlock}` is injected as a system message into every `runAgent()` call - ActivityPanel (the streaming layer) is mounted per-stream into the surface's messages container - Agent thread persistence: active thread's `mode` (chat | build | patch) is persisted on each run ### 7.5 **WHAT IS BROKEN** - The header still has a "Gallery" icon that opens the **legacy** `__fvcmsOpenGalleryPanel` — but the active "Gallery" UI is `src/host/header/GalleryPanel.tsx` (GalleryPanel) which renders the fv-module-gallery. The Picker is the **preferred** target (Phase 2 2026-09-04 directive) - `src/vibechat/VibeChatApp.tsx` is DEAD code — it renders a 3-column React layout that is no longer mounted anywhere in the modern chrome - The React `VibeChatUnified` (r235a) is also un-mounted — ID9 (r235b) is the un-shipped wire-up --- ## 8. LEGACY PACT DELTA (FvW v8 §23/§24/§25/§26 vs. modern) | Pact / feature | FRS v7-v8 doctrine | Modern reality | Delta | |---|---|---|---| | **§23 VibeChat Doctrine** | "Vibe Chat is a top-level FVS feature" · 3 awareness levels (Surface/Related/Omniscient) · 3 modes (Vibe/Studio/Document Composition) · Read/Write/Link (D-041) | ONE unified panel (`fvcms-vibechat`) · NO awareness levels · NO modes · Single store + 4 message types | **Mostly DROPPED** | | **§24 Chat Module** | 9 owned files (ChatFrame, MessageStore, StreamingClient, InputBar, ModelChip, ModelPicker, Scrollback, TokenCounter, AgentContainer) | Replaced by `src/vcs/VibeChatSurface.js` (pure DOM) + `src/vcs/VibeChatStore.js` (consolidated) | **Replaced** (single tree, no React) | | **§24 Vibe Panel** | Gold-locked Codex v0025.0, `.vibe-panel` width 180-420px (default 220) + `.vibe-header` (32px) + `.vibe-chip-row` (36px, 3 chips) + `.vibe-body` | NONE — the modern chrome has no `.vibe-panel` selector anywhere | **DROPPED** | | **§25 Workspace Presets** | 5-section UX, preset chip row | `src/host/workspace-presets.js` exists, registered at boot | **Implemented** (a643 Day 2) | | **§25 Document Composition** | Per D-043 materialisation | NONE — the modern chrome has no "Document Composition" concept | **DROPPED** | | **§26 Custom Panels Surface** | Per operator §24+§26 | `src/host/custom-panels.js` exists (a643 Day 5) | **Implemented** | | **§26 History Surface** | Per operator §26 | `src/host/history-surface.js` exists (a643 Day 5) | **Implemented** | | **Toast System (canonical 4-type)** | info/success/warning/error + 5 signal types · 4 surfaces (VibeChat/Peek/Signals/Focus/Global) | `fvcms-toast` (1 element, mono-pill, 1500ms) | **SIMPLIFIED** to 1 helper, 1 element, 4 callers | | **Signals System** | Persistent + system-driven | NO Signals UI in modern chrome | **DROPPED** | | **3 Awareness Levels** | Surface/Related/Omniscient (D-040) | NONE — pickers are the only "context" (via `pickerContext` in PM2PanelContainer) | **REPLACED** with PickerContext | | **Coder Chat layer** | 90 LOC glue pattern | `src/agent/core.ts` is the orchestrator (vanilla-JS port of legacy ChatPanel.tsx) | **Replaced** | | **Hermes Agent** | Retired 2026-07-07 per Pact Alignment Plan §4.2 (Path B) | NOT in `agent/core.ts` | **DROPPED** (confirmed) | | **Chat Module 12-step send flow** | type → Enter → useChat.send → ... | Replaced by vanilla sendToProvider flow in `vcs/StandaloneContainer.js:79-167` | **Replaced** | | **Workspace isolation `Record`** | Per FRS v8 §24 | The `vcs/threads.v1` is a FLAT list — no per-workspace ChatState | **SIMPLIFIED** | ### What's NEW in modern (not in FRS v8) - **PickerContext** (Phase 3, 2026-09-05): `pickerEventBus.on('picker:selected', ...)` → `pickerContext.{lastApp, lastTemplate, ...}` injected into every `runAgent()` call - **ActivityPanel** (per-stream SSE + lanes + stop) — replaces old non-streaming path - **3 cascade modes** persisted on the active thread: `chat | build | patch` (per VibeChatStore convention) - **Trace Atlas + Pact registry** (R231, b2491, b2494): `feature.pact_registry` feature flag (default OFF) - **5-tier Vibe Agents cascade** (Groq 20b/120b / NVIDIA nemotron-minimax / GLM 4.5-flash) --- ## 9. FvW v8.4.1 DOCTRINE DELTA ### 9.1 v8.4.1 is referenced, NOT enforced in chrome - `app-trace-atlas/atlas.json` line 6: `"fvwVersion": "8.4.0"` (not 8.4.1 — stale by one) - `fvw/validator-engine` is enforced on the **bridge** side (`server.cjs:13`), NOT in chrome - §04 (04-trace-atlas-schema.md), §04.9 (vgm-trace-atlas-integration.md), §08.9 (contradictions-vgm-enforcement.md), §17.9 (vgm-module-governance.md) are doctrine-only ### 9.2 FvW §23-§26 references in modern code - `src/host/custom-panels.js:2` — "ID10 v0.6 Day 5 (plan a643, §24 Custom panels, §26 Custom Panels Surface)" - `src/host/history-surface.js:2` — "ID10 v0.6 Day 5 (plan a643, §26 History Surface)" - `src/host/history-surface.js:4` — "Per v0.6 §26: History surface shows AI changes, user changes, revert, replay, pin preset." - `src/host/workspace-presets.js:2` — "ID10 v0.6 Day 2 (plan a643, §25 Workspace Presets)" - `src/agent/core.ts:124,136` — "Project context (FreshVibe Way v8)" doc-injection - `src/agent/tools.ts:130` — "Build a FreshVibe Way v8 app in one shot" build_app_v8 tool description ### 9.3 Where v8.4.1 is enforced - The **VGM subsystem** enforces it (`app-vgm/vgm-manifest.json`, 75 modules, lineageId coverage 100%) - The **bridge** validates it (`fvw/validator-engine` + `Vibe Chat v8 strict-mode validator`) - The **chrome** does NOT enforce it — it's a "soft" reference via `core.ts:124` doc-injection --- ## 10. CHROME REGISTRIES — TWO OF THEM ### 10.1 `src/cms/chrome-registry/` — the CMS panel registry (v1.0.1, 12,460 B) - **Schema:** `freshvibe-cms.chrome-registry.v1` - **Package:** `freshvibe-cms v1.4.0` (note: vendored is v2.0.0 — STALE) - **Totals:** 5 panels + 6 fragments + 2 overlays + 17 modules = 30 total, 1 quarantined, 29 active - **Quarantined:** `cms-panel` ("8 broken imports of missing ./runtime/* (lines 6-13). B1 deploy replaced with fvcms-panel-manager. Per B0 decision (operator audit 2026-08-15)") - **Replacement:** `fvcms-panel-manager` (not in this registry, lives in `src/cms/runtime/panel-manager/`) - **Generated by:** `id10-day1-panel-system-edge-panel-refactor` at 2026-08-16T15:30 - **Drift check:** `DC-B0-3` ("fvcms-cms-panel.js quarantined", verified 2026-08-15T16:05) - **Panel IDs (5):** `panel-cms-edge`, `panel-system`, `cms-panel` (quarantined), `dev-panel`, `dev-btn` (fragment), `floating-buttons` (fragment), `module-editor` (fragment), `region-editor` (fragment), `trace` (fragment), `watermark-hider` (fragment) - **Module IDs (17):** `accordion, breadcrumb, button, carousel, contact-form, cta, cta-box, extended-blocks, heading, icon-list, image, info-box, menu, paragraph, social-icons, testimonial, video` — all `tier-2`, all `canonical_home: avidtech6/fv-module-gallery/cms-widgets/` ### 10.2 `app-trace-atlas/atlas.json` — the R231 trace atlas (214,206 B) - **Schema:** `freshvibe-way-v8.trace-atlas`, v1.0.0 - **Generated by:** `Mavis [id 9, vibecoder-standalone-mavis]` at 2026-09-07T12:06 - **Authority:** FvW v8.4.0 §04 + §04.9 - **Chain:** `surfaces -> behaviours -> modules -> files -> tests` - **Totals:** 54 surfaces, 96 behaviours (12 families), 75 modules (49 substrate + 26 vendored), 122 files, 21 tests - **Family map (top 20):** `agent.console, agent.recon, agent.tools, agent.safety, agent.sandbox, agent.lifecycle, agent.providers, agent.mutation, agent.routing, agent.spec-enrichment, agent.plan, ...` - **VGM subsystem:** 75 modules, 100% lineageId coverage, 100% trace-atlas nodeId coverage - **Audit version:** `audit-v2`, commit `190e855` - **Doctrine files:** `01.9-version-gallery-module.md, 04.9-vgm-trace-atlas-integration.md, 17.9-vgm-module-governance.md, 08.9-contradictions-vgm-enforcement.md` ### 10.3 `app-pact/` — the 9 pact files (b2491 design) - `autonomous-rules.json` (1,141 B) - `communication-critical.json` (1,241 B) - `cross-app-discovery.json` (1,061 B) - `gallery-relationship.json` (1,256 B) - `module-map.json` (24,281 B) — largest, 75 modules - `mutable-safe.json` (1,298 B) - `sandbox-boundaries.json` (1,497 B) - `sovereign-risk.json` (1,329 B) - Plus docs: `anti-drift.md`, `app-pact.md`, `invariants.md`, `offline-rules.md`, `decisions/` (10 cycle decisions) ### 10.4 `src/host/pact/` — the runtime - `boot.ts` (browser-native boot, `feature.pact_registry` flag, default OFF) - `pact-registry.ts` (Node-only, **dead** per boot.ts comment) - `loaders/` (9 loaders: atlas, autonomous, communication, cross-app, gallery, module-map, mutable, offline, sandbox, sovereign) - `api/` (public API exports) - `types.ts` (shared types) - `decision-log.ts` (per b2491 design §5.4) --- ## 11. WHAT'S MISSING OR BROKEN ### 11.1 Dropped from FRS v8 (no replacement) 1. **3 Awareness Levels** (Surface/Related/Omniscient) — replaced by PickerContext, but PickerContext is a single pick event, not a graduated awareness model 2. **5 Toast Surfaces** (VibeChat/Peek/Signals/Focus/Global) — collapsed to 1 element 3. **4 Toast Types + 5 Signal Types** — collapsed to "shows a string for 1.5s" 4. **Vibe Panel chrome** (`.vibe-panel`, `.vibe-header`, `.vibe-chip-row`) — no replacement 5. **Signals System** (persistent, system-driven) — no replacement 6. **Document Composition mode** (D-043) — no replacement 7. **Hermes Agent layer** — retired 2026-07-07, never replaced 8. **Workspace-isolated ChatState** — `Record` collapsed to a flat thread list ### 11.2 Broken in modern 1. **`` (r235a) is defined but NOT mounted** — ID9 (r235b) was supposed to wire it; the r235a globals are registered as a side-effect import in `main.tsx` but the React component tree doesn't include the unified chat 2. **`src/vibechat/VibeChatApp.tsx` is DEAD code** — 3-column React layout not mounted anywhere 3. **Header "Gallery" icon** opens the legacy `__fvcmsOpenGalleryPanel` first; the Picker is the **preferred** target (Phase 2 2026-09-04 directive), but the fallback path still wires the legacy Gallery 4. **No `useVibeChat` (no-workspace-arg)** in `vcs/VibeChatStore.js` — the v1 contract is preserved (no cross-workspace streaming), but the Origin workspace still doesn't aggregate "recent chats across workspaces" the way FRS v8 specified 5. **`chrome-registry/index.json` says package_version 1.4.0** but the vendored copy is v2.0.0 — registry is STALE 6. **fvwVersion says 8.4.0** in `atlas.json` but operator references v8.4.1 — the trace atlas is one version behind 7. **The `?legacy=0/1` toggle was REMOVED** but `/vibechat` route still exists in some configs — verify 8. **ID10 `fvcms-ai-agent` fragment exists** but is NOT mounted by ID10 host-boot (search returned 0 hits in `src/host/` and `src/cms/runtime/`) 9. **Z.AI endpoint** in `server.cjs` (the bridge) uses `/api/coding/paas/v4` per FRS, but this is a bridge concern, not chrome — confirm in bridge audit ### 11.3 Not yet implemented 1. **Phase 8 (Show Me Engine Wiring)** — 6-hour effort, status PENDING in `program-plan-with-dna-2026-09-07.md` row 8. The "show me" intent keyword is in `intent-types.ts:56` but no handler dispatches a SpotlightEventCard 2. **VibeChatUnified wire-up (r235b)** — see 11.2 #1 3. **ActivityPanel per-stream mount in Picker context** — currently only injected in PM2PanelContainer, not in Picker (Picker still uses legacy `__fvcmsOpenPickerPanel`) ### 11.4 ID9 (vibecoder-standalone-mavis) work in progress - 22-tool agent (`src/agent/tools.ts`) - Patch Mode A1-A7 SHIPPED + critical bug fix - Streaming Activity Layer M1-M5 SHIPPED - Trace Atlas boot (R231, feature flag OFF by default) - PickerDB context merge (Phase 3) - Memory layer: `__vibechatUnifiedStore` (r235a globals) --- ## 12. OBSERVABLE LIST — what the operator sees ### At the very top (40px, z-index 2147483648) - **OS Header** (MinimalHeader, r210): "FV • vibecoder" + "MAIN" surface label + Gallery icon + Edge icon ### Left dock (PM2 edge=L) - **CMS Panel** (`fvcms-cms-panel`, auto-mounted) — region editor + skinned renderers - **SideChrome** (r212+r213, `fvcms-side-chrome`) — 4 user-facing tiles: scene / inspector / composer / timeline - 2×2 grid of tiles - **Scene** = live VSIL preview - **Inspector** = read-only AST + props + state + logs - **Composer** = region focus + transform flow - **Timeline** = edit history (in Lock mode shows "VSIL Editor coming soon") - Header includes 5-surface row + Lock toggle - Body wraps `` (r232c, ID9 mount execution) ### Right dock (PM2 edge=R) - **Edge Panel** (`fvcms-edge-panel`, 1760 lines, 5 tabs w/ sub-tabs, 6 surfaces) - 5 tabs: cms / dev / vibe / app / data / files / tools / extensions ### Bottom dock (PM2 edge=B) - **VibeChat panel** (`fvcms-vibechat`, `` via `vcs/PM2PanelContainer.js`) - 4 message roles: user / assistant / system / tool - Input bar at the bottom (never covered) - Vertical THREADS pill on the left edge (Day 9o v3.1, 2026-09-06) — the ONLY means of opening/closing the thread rail - Pickers: last app/template/asset/planner/timeline/shell/block are visible in the system context ### Floating overlays - **SpotlightMount** (r232a Butterfly Spotlight, z-index 9996) — NEVER TRIGGERED (no `__spotlightApi.show()` callers) - **SelectorBar** (r232c) — for VibeChat/inspector selection - **RewindMount** (r232c) — change history viewer - **`fvcms-toast`** (singleton, z-index 1000000, top-center) — fades for 1.5s, no categorization - **`fvcms-dev-btn` `{ }`** (now hidden, lives at `#fv-topbar-dev`) ### Behind everything - **`#fv-main-canvas`** — the underlying canvas (FreshVibeOrigin regions + gallery modules) - The chrome overlays this canvas ### Behaviour - **Surface cycle:** click surface label in OS header to cycle MAIN → WORKING → DRAFT → PREVIEW → ORIGIN - **Gallery click** → opens PickerPanel (Phase 2), falls back to GalleryPanel - **Edge click** → opens Edge Panel - **THREADS pill** (in VibeChat) → opens/closes thread rail - **5-surface row** (in SideChrome) → sets active surface - **Lock toggle** (in SideChrome) → locks/unlocks the timeline tile - **Spotlight (when triggered)** — flying glowing circle, "never clicks anything", "never moves the real cursor" --- ## 13. FILE INVENTORY (the modern chrome) | Layer | File | Lines | Role | |---|---|---|---| | **Boot** | `src/host/host-boot.js` | 1163 | Orchestrator (BEFORE React mounts) | | **Header** | `src/host/header/MinimalHeader.tsx` | ~250 | r210 minimal OS header | | **Header** | `src/host/header/GalleryPanel.tsx` | ? | Gallery panel (gallery icon fallback) | | **Header** | `src/host/header/PickerPanel.tsx` | ? | Picker panel (gallery icon preferred) | | **Chrome** | `src/host/chrome/SideChrome.tsx` | ~400+ | r212+r213 4-tile panel | | **Mounts** | `src/host/editor/mounts/MountIntegration.tsx` | ? | r232c ID9 wire (SelectorBar + Spotlight + Rewind) | | **Host** | `src/host/default-arrangement.js` | ~150 | Initial 3-panel arrangement (CMS L / Edge R / VibeChat B) | | **Host** | `src/host/custom-panels.js` | ? | a643 Day 5 (§24 §26) | | **Host** | `src/host/history-surface.js` | ? | a643 Day 5 (§26) | | **Host** | `src/host/workspace-presets.js` | ? | a643 Day 2 (§25) | | **Host** | `src/host/preview-engine.js` | ? | Hides CMS tags in preview | | **Host** | `src/host/pro-mode-lock.js` | ? | Pro Mode lock wrap on PM2 minimize | | **Workspace** | `src/host/workspace/workspace-manager.ts` | ? | WDM (Workspace Desktop Manager) | | **Workspace** | `src/host/workspace/index.ts` | ~80 | Public WDM API + StudioContext adapter | | **VibeChat (vanilla)** | `src/vcs/PM2PanelContainer.js` | ~200+ | PM2 path (ACTIVE) | | **VibeChat (vanilla)** | `src/vcs/StandaloneContainer.js` | ~300+ | Non-PM2 path (standalone) | | **VibeChat (vanilla)** | `src/vcs/VibeChatSurface.js` | ~500+ | Unified internal tree (UNIFICATION PHASE 3) | | **VibeChat (vanilla)** | `src/vcs/VibeChatStore.js` | ~400+ | Consolidated store (UNIFICATION PHASE 2) | | **VibeChat (React — DEAD)** | `src/vibechat/VibeChatApp.tsx` | 660+ | 3-column React layout (NOT mounted) | | **VibeChat (r235a — UN-MOUNTED)** | `src/host/editor/vibechat/components/VibeChatUnified.tsx` | ~300+ | r235a unified (12 sub-components) | | **VibeChat (r235a)** | `src/host/editor/vibechat/VibeChatGlobal.ts` | ~90 | r235a side-effect global init | | **Agent** | `src/agent/core.ts` | ~300+ | runAgent orchestrator (22-tool, plan mode, recon) | | **Agent** | `src/agent/tools.ts` | ~600+ | Tool definitions (Groq function-calling) | | **Pact** | `src/host/pact/boot.ts` | ~80 | Browser-side registry boot | | **Pact** | `src/host/pact/pact-registry.ts` | ~200+ | Node-only (DEAD) registry | | **Pact** | `src/host/pact/loaders/` | 9 files | atlas, autonomous, communication, cross-app, gallery, module-map, mutable, offline, sandbox, sovereign | | **Chrome vendor** | `src/cms/runtime/panel-manager/panel-manager.js` | 834 | PM2 v2 (window.PanelManager) | | **Chrome vendor** | `src/cms/runtime/edge-panel/edge-panel.js` | 1760 | Edge Panel (5 tabs) | | **Chrome vendor** | `src/cms/runtime/cms-panel.js` | ? | CMS Panel (auto-mounts) | | **Chrome vendor** | `src/cms/app-fragments/fvcms-dev-panel/` | ? | Dev Panel (Trace + Versions) | | **Chrome vendor** | `src/cms/app-fragments/fvcms-dev-btn/` | ~50 | `{ }` button + `fvcms-toast` | | **Chrome vendor** | `src/cms/modules/system/panel-system/` | ? | Panel System v1.0.0 (Pro Mode + 45% rule) | | **Chrome vendor** | `src/cms/chrome-registry/index.json` | 12,460 B | 30 chrome parts (1 quarantined) | | **Trace Atlas** | `app-trace-atlas/atlas.json` | 214,206 B | R231 trace atlas (54 surfaces / 96 behaviours / 75 modules) | | **Pact** | `app-pact/*.json` | ~37 KB total | 8 JSON files + 4 MD files | | **Bridge** | `server.cjs` | ~3000+ | The bridge (port 3003, ALLOWED_ROOTS, FvW validator) | | **Bridge** | `backend/src/{audit,deploy,identity,lanes,server,storage,wire}.ts` | ? | TypeScript lanes (audit, deploy, identity, lanes, server, storage, wire) | --- ## 14. SUMMARY — what changed from FRS v8 The modern FreshVibe OS (vendored Fv-Chrome v2.0.0 + ID10 v0.6 custom code + ID9 work-in-progress) is a **simplified, opinionated chrome** that: 1. **Collapsed the 5-system chat triad** (VibeChat doctrine + Chat Module + Vibe Panel + Toasts + Signals) to **1 unified panel** (`fvcms-vibechat` with ``) 2. **Replaced React VibeChatApp** with a vanilla-JS port (`vcs/PM2PanelContainer.js` + `vcs/StandaloneContainer.js` + `vcs/VibeChatSurface.js` + `vcs/VibeChatStore.js`) 3. **Removed the 5 surface pills** in the OS header (now a single cycling label per r210) 4. **Removed the 5 eye icons** (WDM `attachEyeHandlers()` call removed in `workspace/index.ts`) 5. **Removed the home/origin button** (Origin is now LAST in the surface cycle) 6. **Removed the `?legacy=0/1` toggle** (operator 2026-08-19 22:34 CEST directive) 7. **Removed the legacy routes** `/vibechat`, `/editor`, `/conversations`, `/content-types` 8. **Removed the Vibe Panel chrome** (`.vibe-panel`, `.vibe-header`, `.vibe-chip-row`) — no replacement 9. **Removed the 3 awareness levels** (Surface/Related/Omniscient) — replaced by PickerContext (single pick event, not graduated) 10. **Removed the 4 toast types** + 5 signal types + 5 toast surfaces — collapsed to 1 element, 4 callers, 1.5s fade 11. **Removed the Signals System** — no replacement 12. **Removed the Document Composition mode** (D-043) — no replacement 13. **Retired Hermes Agent** (2026-07-07) — folded into `runAgent()` 14. **Removed the dual-path credential model** (AI + manual) — not visible in chrome audit 15. **Removed the 3-mode (Vibe/Studio/Document Composition)** choice from chat — VibeChat is now just VibeChat What ID9 added (not in FRS): - **PickerContext injection** into every `runAgent()` call (Phase 3, 2026-09-05) - **ActivityPanel per-stream** (SSE + lanes + stop) mounted in the surface - **5-tier Vibe Agents cascade** (Groq 20b/120b / NVIDIA nemotron-minimax / GLM 4.5-flash) - **Patch Mode A1-A7** (5-tool surgical subset) - **r232a Butterfly Spotlight** (built, mounted, but never triggered — no `__spotlightApi.show()` callers) - **r232c MountIntegration** (SelectorBar + Spotlight + Rewind) - **R231 Trace Atlas** (feature flag OFF by default, `feature.pact_registry=on` to enable) - **Bridge v8 strict-mode validator** (in `fvw/validator-engine`) - **23 inline patch tools** (read_files_for_context, build_app_v8, write_file_*, deploy, etc.) --- **END OF AUDIT — 12 tasks complete. Tasks 5-12 of Modern FreshVibe OS audit delivered.**