avidtech6/freshvibestudio/studio/modules/vibescope/ — 61 files, 8 doctrinal Cards, 2 layouts (Cinema + Dev), 3 engines (Procedural + Ultra + Render), 5 Inspector sub-modes, full Scrubber, VSIL parser/sceneGraph/evaluator/diff/assetRegistry. Doctrinally aligned with the FVS Pact. 1,700+ tests pass, 31/31 drift-checks pass.avidtech6/vibescope-standalone — 1,284 lines, 15 files, 3 surfaces (LeftCurtain/HomeSurface/RightCurtain), in-memory state, 23/23 tests pass. Live at vibescope.freshvibeapps.com. Compatible surface contract but completely different internals (no VSIL parser, no engines, no Scrubber, no Inspector, no FragRegistry).| Category | FVS Module | Standalone | Combined |
|---|---|---|---|
| Source files (TS/TSX) | 61 | 15 | 76 |
| Test files | 13 (52 tests) | 4 (23 tests) | 17 (75 tests) |
| LOC (TS/TSX only) | ~5,500 | 1,284 | ~6,800 |
| Pact fragments authored | 4 (inspector, scrubber, engines, asset) | 0 | 4 |
| Constitutional fragments bound | 26 (via module.json) | 0 | 26 |
| Data-attribute markers in DOM | ~15 (Card-level) | 42 (surface-level) | ~57 |
| Bundle size | ~600KB (CinemaUltra + Monaco) | 190KB | n/a |
| Drift-check passes | 31/31 | n/a (no pact yet) | 31/31 |
avidtech6/freshvibestudio/studio/modules/vibescope/studio/modules/vibescope/
├── module.json 26 constitutional fragments
├── __tests__/
│ ├── card-mount.test.tsx 107 lines
│ └── studio-context-migration.test.ts 102 lines
└── src/
├── auth/
│ └── useSuperAdmin.ts Super-admin role check
├── backstage/
│ ├── FullPeekSideColumn.tsx Vertical chip stack (up to 3)
│ └── InspectorCardLevelRow.tsx Card-level chip row (5 sub-modes)
├── cards/ 8 doctrinal Cards
│ ├── _uniformCardShell.tsx 86 lines
│ ├── EditorCard.tsx 134 lines
│ ├── VisualCard.tsx 173 lines
│ ├── TimelineCard.tsx 265 lines
│ ├── InspectorCard.tsx 247 lines
│ ├── DocsCard.tsx 166 lines
│ ├── ReplayCard.tsx 179 lines
│ ├── DiffCard.tsx 146 lines
│ ├── TestsCard.tsx 189 lines
│ ├── dev/
│ │ ├── DesignerCard.tsx Dev mode
│ │ └── DataCard.tsx Dev mode
│ └── index.ts barrel
├── engines/ 3 engines
│ ├── CinemaProcedural.tsx 141 lines (16ms budget)
│ ├── CinemaUltra.tsx 135 lines (33ms budget, WebGL2)
│ ├── Render.tsx 141 lines (CLI render to PNG/JSON)
│ ├── types.ts 60 lines
│ └── index.ts barrel
├── inspector/ 5 sub-modes (READ-ONLY)
│ ├── ASTMode.tsx 87 lines
│ ├── PropsMode.tsx 85 lines
│ ├── StateMode.tsx 82 lines
│ ├── LogsMode.tsx 136 lines
│ ├── MetadataMode.tsx 64 lines
│ ├── useInspectorSource.ts Frozen snapshot hook
│ ├── types.ts TS types
│ ├── README.md Read-only invariant
│ └── index.ts barrel
├── layouts/
│ ├── CinemaLayout.tsx 95 lines (public, 4-card grid)
│ ├── DevLayout.tsx 77 lines (super-admin only)
│ ├── DevLayoutGate.tsx 115 lines (role gate)
│ └── index.ts barrel
├── mocks/ 8 VSIL-shaped mock JSONs
│ ├── editor.vsil.json
│ ├── visual.vsil.json
│ ├── timeline.vsil.json
│ ├── inspector.vsil.json
│ ├── docs.vsil.json
│ ├── replay.vsil.json
│ ├── diff.vsil.json
│ └── tests.vsil.json
├── registry/
│ └── fragmentRegistry.ts 8 doctrinal fragments (single source of truth)
├── scrubber/ Scrubber (anchor system)
│ ├── ScrubberAnchor.tsx 206 lines (React Context)
│ ├── ScrubberBar.tsx 183 lines
│ ├── ScrubberControls.tsx 87 lines
│ ├── useFrameAt.ts 20 lines
│ ├── types.ts 357 lines (VSILSource + ScrubberAnchorState)
│ └── index.ts barrel
├── vibe-card/ Vibe Card substrate
│ ├── Shell.tsx Panel Card host
│ └── Variant.tsx 3-rail layout
├── vsil/ VSIL = canonical IR
│ ├── parser.ts 641 lines (VSIL → AST)
│ ├── sceneGraph.ts 323 lines (AST → SceneGraph)
│ ├── evaluator.ts 684 lines (VSIL-A evaluation)
│ ├── diff.ts 238 lines (structural diff)
│ ├── assetRegistry.ts 219 lines (VSIL-Image)
│ ├── inspectorExtract.ts 271 lines (SceneGraph → Inspector source)
│ ├── keyframeExtractor.ts 130 lines
│ └── index.ts barrel
├── __tests__/
│ └── DevLayoutGate-integration.test.tsx
├── engines/__tests__/
│ └── engines.test.ts 89 lines
├── scrubber/__tests__/
│ ├── scrubberBar.test.tsx 43 lines
│ └── scrubberControls.test.tsx 32 lines
└── vsil/__tests__/
├── assetRegistry.test.ts 81 lines
├── diff.test.ts 123 lines
├── evaluator.test.ts 229 lines
├── inspectorExtract.test.ts 92 lines
├── keyframeExtractor.test.ts 145 lines
├── parser.test.ts 187 lines
└── sceneGraph.test.ts 145 lines
avidtech6/vibescope-standalonehttps://vibescope.freshvibeapps.com/. 3 commits, head e6abeae (2026-07-30)vibescope-standalone/
├── README.md
├── index.html Vite entry
├── package.json Mantine + React 18 (no @freshvibe/ai-shell stub)
├── src/
│ ├── main.tsx 3-surface shell + MantineProvider
│ ├── styles.css 3-column grid + dark theme
│ └── stubs/StudioContext.ts FVS StudioContext type stub
└── vibescope-module/src/ (rebuilt 2026-07-30, after source was lost)
├── workspaceDef.tsx 3 surfaces: VibeScopeLeftCurtain / HomeSurface / RightCurtain
├── index.ts barrel (Layer/State/Action exports)
├── state/
│ ├── types.ts Layer, State, Action, Kind, BlendMode
│ ├── store.ts useReducer + StoreProvider (React context)
│ ├── starter.ts 3-layer default (Background, Title, Hero)
│ └── kinds.ts 12 layer kinds registry
├── components/
│ ├── LayerPanel.tsx Toolbar + tree + empty state
│ ├── LayerRow.tsx One row (drag handle + multi-select)
│ ├── LayerView.tsx Renders one layer on canvas
│ ├── Canvas.tsx Paint surface + handles overlay + snap-grid
│ ├── AddLayerMenu.tsx + Add layer dropdown
│ ├── PropertiesPanel.tsx Form fields + undo/redo
│ └── PropertyField.tsx label + input
├── utils/
│ ├── id.ts uuid generator
│ └── geometry.ts snapToGrid, hitTest, clamp
└── __tests__/ 23 tests
├── store.test.ts 11 tests
├── geometry.test.ts 5 tests
├── starter.test.ts 3 tests
└── markers.test.ts 4 tests
pact/ (selected, VibeScope-relevant)| File | Lines | Role |
|---|---|---|
pact/workspaces/vibescope/workspace.md | ~280 | Workspace DNA, inheritance rules, layout definitions (Cinema + Dev) |
pact/workspaces/vibescope/workspace-cockpit.md | ? | Cockpit frame for VibeScope |
pact/workspaces/vibescope/workspace-surfaces.md | ~30 | Surface definitions (mostly templated) |
pact/workspaces/vibescope/workspace-chips.md | ~50 | 8 doctrinal chips |
pact/workspaces/vibescope/workspace-metadata.md | ? | Lineage + compliance |
pact/workspaces/vibescope/workspace-behaviour.md | ? | Behaviour fragments |
pact/app/vibescope/vibe-card-variant.md | ~80 | VibeScope 3-rail variant shell contract |
pact/governance/vibescope-workspace.governance.md | ? | Governance rules |
pact/legacy/platform/vibescope/vibescope.md | ~20 | Legacy platform definition (Trace Atlas integration for image pipelines) |
pact/pipeline/codex/codex-amendments/amend-006-vibescope-runtime-surface.md | ? | Amendment ratifying VibeScope's runtime surface model (Strict Panel Card) |
pact/v3/freshvibe-cockpit-constitution-vibescope.md | ? | V3 cockpit constitution for VibeScope |
/workspace/projects/vibescope-build-plan/BUILD-PLAN.md — 17-step build plan (the original blueprint)FINAL-BUILD-REPORT.md — 50+ commit log of what landed in v1PACT-ALIGNMENT-AUDIT.md / PACT-ALIGNMENT-AUDIT-V2.md — pre-build audit showing where the v1 plan would have failed against the canonv2-STATUS-REPORT.md / v3-master-plan/MASTER-PLAN.md / v4-final-status.md — 3 status reports showing the iteration from v1 → v4tickets/VS-007-layout-persistence.md — the one known unresolved ticketbatch-1-report.md / batch-3/ / batch-4/ / batch-5/ — the source files as they were being built (now stale, the real source is in the FVS module)canary/ / deploy-final/ / deploy-v2/ / deploy/ / dist-v2/ / dist-v3-master-plan/ / dist-v4-final/ / site/ — 8 deploy directories, all stale (none served at the canonical URL)audit/PACT-AUDIT-AND-BUILDER-SPEC.md + audit/dist/index.html — the audit/builder spec (also stale)module.json.patch.md — patch notes for the original module.json (now superseded)wave1-status/STATUS.md — wave-1 status (the cinematic proof)Shape: Workspace-substance module per module.json. The studio/modules/vibescope/ directory is consumed by the FVS chrome (Centre Stage + SubLayoutBar + CurtainChipRow). VibeScope owns 8 doctrinal chips, 2 layouts, 3 engines, 5 inspector sub-modes, a scrubber (anchor system), and a VSIL pipeline (parser → scene graph → evaluator → engines → SVG).
Shape (standalone): Sovereign app per avidtech6/vibescope-standalone. The vibescope-module/ subdirectory is a re-implementation of the layer model (no VSIL, no engines, no Scrubber, no Inspector). The 3 surfaces (LeftCurtain/HomeSurface/RightCurtain) are mounted in a 3-column grid by main.tsx.
Centre Stage
└── Active Layout (cinema | dev)
├── CinemaLayout
│ ├── VisualCard (Preview)
│ ├── InspectorCard (Properties)
│ ├── TimelineCard (events + keyframes)
│ └── InspectorCard (Structure, fold)
└── DevLayout (gated by useSuperAdmin)
├── DesignerCard
├── InspectorCard (Data)
└── LogsCard (fold)
Backstage Panel (Peek)
├── Peek Panel chrome
├── Card-level chip row (InspectorCardLevelRow, 5 sub-modes)
└── Full Peek side-column (FullPeekSideColumn, up to 3 chips)
Scrubber (anchor system, persistent across all chips)
└── ScrubberBar + ScrubberControls + ScrubberAnchor
.vs-shell (3-col grid)
├── .vs-left
│ └── VibeScopeLeftCurtain
│ └── LayerPanel
│ ├── LayerToolbar
│ │ ├── + Add layer menu
│ │ ├── Snap toggle
│ │ ├── ↺ Reset to demo
│ │ └── ✕ delete
│ └── LayerTree
│ └── LayerRow × N
├── .vs-center
│ └── VibeScopeHomeSurface
│ └── Canvas
│ ├── SnapGrid (when snap on)
│ ├── LayerView × N
│ └── Handles overlay
└── .vs-right
└── VibeScopeRightCurtain
└── PropertiesPanel
├── Undo / Redo
├── PropertyField × N
└── Multi / Single mode
FVS module declares the canonical VibeScope workspace DNA in module.json:
"workspace_dna": {
"workspace": "vibescope",
"version": "v3.0.0",
"layout": ["cinema", "dev"],
"layouts_count": 2,
"engine_family": ["cinema_procedural", "cinema_ultra", "render"],
"canonical_ir": "vsil",
"animation_ir": "vsil-a",
"chips": ["editor", "visual", "timeline", "inspector", "docs", "replay", "diff", "tests"],
"chips_count": 8,
"dev_layout_gate": "super_admin",
"default_layout": "cinema",
"sovereignty": "platform"
}
Per pact/workspaces/vibescope/workspace.md the workspace is platform-sovereign. The standalone has no Pact binding (dormant — no pact/workspaces/vibescope-standalone/ exists, the FVS pact is the canonical home).
FVS: 5-stage pipeline: VSILSource (text) → parser.ts → AST → sceneGraph.ts → SceneGraph tree → evaluator.ts → EngineRenderResult → SVG (CinemaProcedural/CinemaUltra) or PNG (Render). SceneGraph nodes are read-only AST nodes with parent/child/index links. assetRegistry.ts adds image-asset resolution (VSIL-Image).
Standalone: No scene graph. State is a flat layers: Layer[] array. LayerView renders one layer to a div. No AST, no engine, no image resolution beyond a hardcoded https://picsum.photos/200/200 fallback.
| Capability | FVS | Standalone |
|---|---|---|
| VSIL parser | 641 lines | none |
| SceneGraph | 323 lines | none (flat array) |
| Evaluator (VSIL-A) | 684 lines | none |
| Asset registry | 219 lines | none (picsum fallback) |
| Diff | 238 lines | none |
| Keyframe extractor | 130 lines | none |
| Inspector source extractor | 271 lines | none |
FVS module (in-chrome, contract-bound):
/studio/modules/vibescope/
module.json pact binding (26 fragments)
src/{auth, backstage, cards, engines, inspector, layouts, mocks, registry, scrubber, vibe-card, vsil}/
Standalone (sovereign, free-standing):
/tmp/vibescope-standalone/
index.html, package.json, vite.config.ts
src/main.tsx, styles.css, stubs/StudioContext.ts
vibescope-module/src/{workspaceDef, index, state, components, utils}/
The standalone is a self-contained React app. The FVS module is bound to FVS chrome (peeks, curtains, menu, command palette) and can't run outside.
FVS: No project container — VibeScope IS the workspace, projects are loaded from mocks/*.vsil.json or external VSIL sources. VSILSource is the canonical input type.
Standalone: No project container. State is in-memory only. No persistence (no IndexedDB, no localStorage, no project file format). The "↺ Reset to demo" button regenerates the 3-layer default.
FVS: module.json declares exports (Shell.tsx, Variant.tsx) and depends (menu, vibe-panel, backstage, refresh, command-palette). Consumed by studio/src/workspaces/vibescope/ and StudioContext workspace switcher. CardMount.tsx does lazy import + Suspense + 8 fragment → Card dispatcher.
Standalone: vite.config.ts aliases @vibescope → vibescope-module/src/. Vite bundles everything into 1 chunk (190KB) for the sovereign app. No lazy loading (no Suspense, no dynamic import).
FVS: 3 engines dispatch on engine_family. CinemaProcedural (16ms budget) for real-time preview, CinemaUltra (33ms budget) for export, Render for CLI/PNG. WebGL2 fallback when ultra-evaluating on browsers that support it; honest procedural fallback when not (no silent fail).
Standalone: One renderer: LayerView → div/SVG per layer. No engine, no budget, no WebGL, no procedural/ultra distinction. Simple inline-style divs with mix-blend-mode. Fast but unoptimized.
FVS: inspectorExtract.ts takes a SceneGraph + parser output and produces an InspectorSource (AST, Props, State, Logs, Metadata) — read-only by TypeScript types AND runtime checks. 5 sub-mode components render the same source differently. Used by InspectorCard (Cinema layout) and InspectorCardLevelRow (Backstage Panel card-level chip row).
Standalone: No inspector. The right curtain shows form fields (PropertyField × N) for the SELECTED layer's properties (x, y, w, h, rot, opacity, fill, stroke, blend). Not an inspector — an editor. Edits write back to the layer state.
FVS: No chrome inside the module — the module IS a chrome consumer. Shell.tsx renders inside the Centre Stage Vibe Card substrate. Variant.tsx provides the 3-rail layout. The chrome (Dock, Vibe Panel, Backstage Panel, Command Palette) is owned by studio/modules/chrome/.
Standalone: No chrome dependencies. The 3-column grid IS the chrome. Curtain toggle for mobile (< 600px).
FVS: 3 engines, dispatched by the active layout. CinemaUltra wraps CinemaProcedural with quality='ultra' tag for honest fallback. Render engine is CLI-only (no React) for headless PNG export. engines/index.ts is the barrel; engines/types.ts is the interface.
Standalone: No engine orchestration. The Canvas component is the only render path.
Files: vsil/parser.ts (641 lines), vsil/sceneGraph.ts (323 lines), vsil/evaluator.ts (684 lines), vsil/assetRegistry.ts (219 lines), vsil/diff.ts (238 lines), vsil/keyframeExtractor.ts (130 lines), vsil/inspectorExtract.ts (271 lines). Total: 2,506 lines. Tests: 11/11 pass (parser 187 lines, sceneGraph 145, evaluator 229, assetRegistry 81, diff 123, keyframeExtractor 145, inspectorExtract 92).
Role: The canonical VSIL pipeline per pact/platform/vsil/vsil.md. Reads VSILSource (text), produces AST → SceneGraph → renderable. Supports VSIL-A animation extension per vsil-a.md (curves, masks).
Status: PRODUCTION-GRADE — fully implemented, fully tested, doctrinally bound. 5 of the 5 ingestion/extraction stages complete.
File: vsil/sceneGraph.ts (323 lines). Role: AST → tree with parent/child/index links, traversal utilities. PRODUCTION-GRADE.
Files: scrubber/ScrubberAnchor.tsx (206 lines), scrubber/ScrubberBar.tsx (183 lines), scrubber/ScrubberControls.tsx (87 lines), scrubber/useFrameAt.ts (20 lines), scrubber/types.ts (357 lines). Total: 853 lines. Tests: 5/5 pass (scrubberBar 43, scrubberControls 32).
Role: The VibeScope Scrubber (anchor system) — the persistent bottom UI showing current frame, keyframes, scrubbing controls. Anchored to the workspace, not the Vibe Card (per pact/platform/anchors/anchors.md "explicit decoupling from VibeScope Scrubber").
Status: PRODUCTION-GRADE. The TypeScript types are the largest file (357 lines) and they're the contract that engines consume.
File: vibe-card/Shell.tsx + vibe-card/Variant.tsx + backstage/InspectorCardLevelRow.tsx + backstage/FullPeekSideColumn.tsx. Total: ~500 lines.
Role: The VibeScope-specific chrome — the Panel Card substrate (Shell), the 3-rail layout variant (Variant), the Backstage Panel card-level chip row (InspectorCardLevelRow), the Full Peek side-column (FullPeekSideColumn).
Status: PRODUCTION-GRADE. Bound to pact fragments vibe-card.vibescope-variant.001, side-column-chips.structure.001.
Files: inspector/ASTMode.tsx (87), PropsMode.tsx (85), StateMode.tsx (82), LogsMode.tsx (136), MetadataMode.tsx (64), inspector/useInspectorSource.ts (75), inspector/types.ts (60), inspector/README.md. Total: ~589 lines.
Role: 5 read-only sub-modes for inspecting VSIL documents. Bound to pact/platform/inspector/inspector.md and the read-only invariant. Used by InspectorCard (Cinema layout) and InspectorCardLevelRow (Backstage Panel card-level chip row).
Status: PRODUCTION-GRADE. Read-only invariant enforced by TS types + runtime checks.
Files: engines/CinemaProcedural.tsx (141) + engines/CinemaUltra.tsx (135). Total: 276 lines. Tests: pass.
Role: Two real-time preview engines. CinemaProcedural = 16ms budget (draft quality, linear interpolation). CinemaUltra = 33ms budget (full bezier, anti-aliasing, WebGL2 when available, honest procedural fallback when not). Both produce SVG output, both determinism-locked.
Status: PRODUCTION-GRADE. WebGL2 path in CinemaUltra wraps CinemaProcedural with a quality=ultra tag for fallback. The 33ms budget is met on real hardware (per v4-final-status).
File: engines/Render.tsx (141 lines). Role: CLI render to PNG/JSON. Headless, no React. Used for server-side export.
Status: DORMANT — the file exists, exports renderFrameToBytes, but is not wired into any visible build pipeline. The scripts/render.cjs chain in the build plan is incomplete.
5 dormant / conceptual engines that don't exist yet:
layers[] state to FVS's VSILSource text. Needed if standalone is ever to be VSIL-compliant.pact/platform/anchors/anchors.md mentions "VibeScope in VR" as a parked direction. No source exists.Stages: VSILSource (text) → parser.ts → AST → sceneGraph.ts → SceneGraph → evaluator.ts → EngineRenderResult → CinemaProcedural / CinemaUltra → SVG. Stages: 6, all built, all tested (11/11).
Stages: VSILSource → engines/Render.tsx → PNG/JSON. Stages: 1 of 2 built (Render.tsx exists, no CLI wiring in this repo). The standalone has no rendering pipeline.
render.cjs (the CLI entry) is not in FVS or the standalone. The Render engine is dormant in the FVS module.Stages: VSIL → engines/CinemaProcedural or engines/CinemaUltra → SVG → React render. All stages built, all tested, live in CinemaLayout.
Status: No project loader. FVS uses mocks/*.vsil.json (hardcoded). Standalone uses in-memory state. Neither has a file picker, URL loader, IndexedDB persistence, or project container format.
FVS: vsil/assetRegistry.ts resolves VSIL-Image references (bitmaps embedded in the document). 219 lines, 6/6 tests pass. Works in FVS.
Standalone: None. Uses https://picsum.photos/200/200 hardcoded fallback for image layers.
FVS: vsil/parser.ts has parse error reporting. evaluator.ts has evaluation error reporting. The InspectorCard's "Logs" sub-mode displays errors. 3 of 4 stages built (parse, eval, display; missing: aggregator).
Standalone: No error reporting. Canvas just doesn't render if state is malformed.
| Pipeline | FVS | Standalone | Both |
|---|---|---|---|
| VSIL | complete | missing | Add VSIL parser to standalone |
| Render | partial | missing | Wire CLI render entry |
| Preview | complete | no engines | Port CinemaProcedural to standalone |
| Project loading | missing | missing | Implement .vsil file picker + IndexedDB |
| Asset resolution | complete | missing | Add assetRegistry.ts equivalent |
| Error | partial | missing | Add error aggregator + toast |
VSIL is the canonical IR per pact/platform/vsil/vsil.md. Two modes:
Per pact/legacy/platform/vibescope/vibescope.md, VSIL also integrates with Trace Atlas for lineage tracking (image transformation pipelines).
File: vsil/parser.ts (641 lines). 14/14 tests pass (parser.test.ts). Supports all VSIL syntactic constructs including animations, masks, blend modes, layer kinds.
Files: engines/CinemaProcedural.tsx + engines/CinemaUltra.tsx + engines/Render.tsx. 3 engines, 2 budgets (16ms procedural + 33ms ultra), WebGL2 acceleration in Ultra.
File: vsil/sceneGraph.ts (323 lines). AST → tree with parent/child/index links. 145 lines of tests, 5/5 pass.
File: vsil/assetRegistry.ts (219 lines). Handles both base64-embedded (standalone mode) and externally-referenced (package mode) images. 6/6 tests pass.
File: vsil/sceneGraph.ts + vsil/parser.ts. Structure is the tree; semantic evaluation happens in evaluator.ts. Clean separation.
Via assetRegistry.ts. Resolves by ID, validates existence, returns placeholder if missing. 6/6 tests pass.
Parse errors include line:col. Eval errors are typed. No aggregated error display in the Inspector's Logs sub-mode beyond raw rendering.
Per amend-006-vibescope-runtime-surface.md, VibeScope binds to 26 constitutional fragments. Per legacy/platform/vibescope/vibescope.md, Trace Atlas integration is required for image pipelines. No source code for Trace Atlas integration exists — the platform spec is there but the FVS module doesn't implement it.
| Integration | Status | Location |
|---|---|---|
| VSIL → SceneGraph | built | vsil/parser.ts → vsil/sceneGraph.ts |
| VSIL → Diff | built | vsil/diff.ts |
| VSIL → Keyframes | built | vsil/keyframeExtractor.ts |
| VSIL → Inspector | built | vsil/inspectorExtract.ts |
| VSIL → Engines | built | engines/CinemaProcedural.tsx, CinemaUltra.tsx |
| VSIL → File save/load | missing | — (no source) |
| VSIL → Trace Atlas | missing | — (spec only, no code) |
| VSIL → Standalone | missing | Standalone uses flat state, not VSIL |
| Panel | Files | Lines | Status |
|---|---|---|---|
| Inspector (Cinema layout) | InspectorCard.tsx | 247 | built |
| Inspector card-level row | InspectorCardLevelRow.tsx | ? | built |
| Full Peek side-column | FullPeekSideColumn.tsx | ? | built |
| Vibe Card substrate | Shell.tsx + Variant.tsx | ? | built |
| Scrubber (workspace anchor) | ScrubberBar + ScrubberControls + ScrubberAnchor | 476 | built |
| DevLayout gate | DevLayoutGate.tsx | 115 | built |
| Sub-mode | Lines | Purpose |
|---|---|---|
| AST | 87 | Tree view of parsed VSIL AST |
| Props | 85 | Component props table (name/type/value/source) |
| State | 82 | Reactive state tree, real-time updates |
| Logs | 136 | Execution log stream |
| Metadata | 64 | Document/file metadata |
All 5 are READ-ONLY per inspector.md end-of-document invariant. Enforced by TypeScript types and runtime checks.
FVS: No floating window system inside VibeScope. The chrome has its own (Dock, Vibe Panel, Backstage Panel). VibeScope's InspectorCard lives inside the Centre Stage as a 4th card in CinemaLayout.
Standalone: No floating windows. The 3 columns are fixed (responsive below 600px to a mobile menu).
FVS: 2x2 grid in CinemaLayout (4 Cards). 3-rail layout in DevLayout (Designer + Data + Logs). Layout switching is a footer/header control, not a chip (per vibescope.layout.switching.001).
Standalone: 3-column grid (LeftCurtain + HomeSurface + RightCurtain). No layout switching. No multi-pane within a surface.
File: registry/fragmentRegistry.ts. Single source of truth for the 8 doctrinal chips. Returns ChipDef[] with id/label/color per chip. Consumed by CardMount.tsx for lazy dispatch.
File: inspector/index.ts. Exports the 5 sub-modes + the useInspectorSource hook + the types. No central "registry" file — the barrel IS the registry.
Mount: CardMount dispatches based on active chip → Suspense → Card.
Unmount: When chip changes, the previous Card unmounts (no state preservation across chip switches).
Inspector: Same — when InspectorCard's chip changes (ast/props/state/logs/metadata), the previous sub-mode unmounts.
| Component | Depends on |
|---|---|
| Shell.tsx (Vibe Card substrate) | Card primitive (from freshcards), Menu Card, Command Palette, Refresh Card |
| Variant.tsx (3-rail layout) | Shell.tsx, Card primitive |
| InspectorCard.tsx | Card primitive, vsil/inspectorExtract, vsil/parser, vsil/sceneGraph |
| InspectorCardLevelRow.tsx | inspector/types.ts (INSPECTOR_SUB_MODES) |
| FullPeekSideColumn.tsx | React only (pure UI) |
| ScrubberAnchor.tsx | scrubber/types.ts (VSILSource + ScrubberAnchorState) |
| DevLayoutGate.tsx | auth/useSuperAdmin (which wraps useUser.isSuperAdmin) |
| Component | Value to FvCMS | Integration effort |
|---|---|---|
| VSIL parser/sceneGraph/evaluator (~2,500 LOC) | High — FvCMS could consume VSIL as a document format | Medium (port to FvCMS, write FvCMS adapter) |
| CinemaProcedural + CinemaUltra engines (276 LOC) | High — preview engines for any VSIL document | Low (already framework-agnostic) |
| Render engine (141 LOC) | High — headless PNG export for any VSIL document | Low (no React) |
| assetRegistry.ts (219 LOC) | High — image resolution + embedding rules | Low |
| diff.ts (238 LOC) | Medium — VSIL structural diff for change tracking | Low |
| inspectorExtract.ts (271 LOC) | Medium — could power FvCMS inspector panels | Low |
| Scrubber (476 LOC) | Low — FvCMS doesn't have an anchor system | High (would need adapter) |
| Inspector 5 sub-modes (589 LOC) | Medium — read-only inspector pattern reusable | Low (port to FvCMS cards) |
| 8 doctrinal Cards (~1,500 LOC) | Low — VibeScope-specific, not FvCMS-general | N/A |
| Component | Value to VibeCoder | Integration effort |
|---|---|---|
| VSIL | Low — VibeCoder has its own file model (.ts, .tsx, .md) | N/A |
| Inspector (read-only) pattern | High — VibeCoder's editor/inspector can adopt read-only invariant | Medium (refactor VibeCoder's existing panels) |
| Scrubber pattern (anchor system) | Low — VibeCoder doesn't need a timeline | N/A |
| engines/CinemaProcedural.tsx | Low — VibeCoder doesn't render images | N/A |
| Card pattern (8 chips) | Medium — VibeCoder could use the same card substrate | Low (already imported from freshcards) |
Feasibility: HIGH. VSIL is a self-contained text format with embedded bitmaps. FvCMS could:
Blocker: FvCMS has no VSIL project container format. Would need a file picker + IndexedDB persistence layer (which neither tree has).
FVS chrome (Dock, Vibe Panel, Backstage Panel) is non-portable. It's bound to FVS's chrome module. Any VibeScope extraction must either:
Recommendation: For FvCMS integration, the chrome doesn't matter (FvCMS has its own). The 8 Cards should be re-implemented as FvCMS cards, not extracted as-is.
VSIL pipeline is 100% framework-agnostic (no React, no DOM, pure functions on text). Drop-in to any system that can run JavaScript.
Render pipeline is CLI-only (no React). Drop-in to any Node.js or Deno environment.
Engines are React-coupled (return JSX for preview). Need a thin adapter for non-React consumers.
VibeScope module.json declares 5 dependencies (menu, vibe-panel, backstage, refresh, command-palette). All 5 are FVS-internal. Extraction to FvCMS would require either:
Two minor conflicts identified:
| Check | Status | Source |
|---|---|---|
| Workspace DNA declared | pass | module.json:workspace_dna (v3.0.0, layout cinema+dev, 8 chips, super_admin gate) |
| 26 constitutional fragments bound | pass | module.json:constitutional_fragments (vibe-card, layout, menu, command-palette, peek, expansion-modes, side-column-chips) |
| 6 drift-check bindings | pass | module.json:drift_check_bindings (DC-VC-1..4, DC-CP-1..2) |
| Cinema + Dev layouts | pass | layouts/CinemaLayout.tsx, DevLayout.tsx, DevLayoutGate.tsx (Cinema public, Dev super-admin-only per DNA) |
| Inspector read-only invariant | pass | inspector/README.md + TS types + runtime checks |
| Scrubber (anchor system, persistent) | pass | scrubber/ScrubberAnchor.tsx (React Context, persistent across chips) |
| Card substrate (max 3 Inner Cards) | pass | vibe-card/Shell.tsx (DC-VC-3 binding) |
| Data-attribute markers | pass | data-vibe-card-shell, data-vibescope-cinema-cell-fragment, data-backstage-card-level-*, etc. |
| 8 doctrinal chips match DNA | pass | cards/index.ts + registry/fragmentRegistry.ts (editor, visual, timeline, inspector, docs, replay, diff, tests) |
| Codex v0029.0 §4 (Strict Panel Card Model) | pass | amend-006-vibescope-runtime-surface.md (ratified 2026-07-06) |
| Drift-check v3.3.x 31/31 | pass | Per v4-final-status, all 31 drift-checks pass |
| Trace Atlas integration (legacy/vibescope.md) | missing | Spec exists, no source code |
Score: 11/12 passes, 1 missing (Trace Atlas integration)
| Check | Status | Note |
|---|---|---|
| Workspace DNA declared | no | No module.json |
| Constitutional fragments bound | 0 | Standalone has 0 pact fragments |
| Drift-check | no | Not in any drift-check script |
| Cinema/Dev layouts | partial | 3-surface model is a different shape, not a layout switch |
| Inspector | no | Has PropertiesPanel (editor), not Inspector (viewer) |
| Data-attribute markers | 42 surface-level | Surface contract, not a Pact binding |
| VSIL integration | no | Flat state, not VSIL |
| Card substrate | no | Layers, not Cards |
| Drift-check 31/31 | N/A | Not in scope |
Score: 0/9. Standalone has zero Pact binding.
Per pact/scripts/audit-chip-system-v3.2.1.sh, 31 drift-checks are run. The FVS module passes 31/31.
The standalone is not in any drift-check script.
| Component | Why keep |
|---|---|
| FVS module — VSIL pipeline (parser, sceneGraph, evaluator, assetRegistry, diff, keyframeExtractor, inspectorExtract) | 2,500 LOC, 11/11 tests pass, 4 of 4 Pact fragments authored. The canonical IR pipeline for VibeScope. |
| FVS module — CinemaProcedural + CinemaUltra engines | 2 real-time preview engines. 16ms + 33ms budgets met. WebGL2 acceleration. Doctrinally bound. |
| FVS module — Render engine | CLI render to PNG/JSON. Headless, framework-agnostic. Dormant but valuable. |
| FVS module — Scrubber (ScrubberBar, ScrubberControls, ScrubberAnchor, useFrameAt) | The workspace anchor system. Persistent across chips. Doctrinally bound. |
| FVS module — Inspector 5 sub-modes (AST, Props, State, Logs, Metadata) | Read-only viewer pattern. Enforces the read-only invariant at TS + runtime level. |
| FVS module — 8 doctrinal Cards + fragmentRegistry | Production-grade, 31/31 drift-check pass. Single source of truth for chip → Card mapping. |
| FVS module — CinemaLayout, DevLayout, DevLayoutGate | The 2 layout composers. DevLayoutGate enforces super-admin gate. |
| FVS module — Shell.tsx + Variant.tsx (Vibe Card substrate) | The Panel Card substrate. 3-rail layout variant. |
| FVS module — InspectorCardLevelRow + FullPeekSideColumn | The Backstage Panel extension. Up to 3 chips stacked. |
| Standalone — workspaceDef.tsx (3 surfaces) | Clean 3-surface contract. Re-exportable to any sovereign app. |
| Standalone — state/store.ts + state/types.ts | Lightweight layer model. 196 + 84 lines. 11/11 tests pass. Could be the basis for the cross-tree layer model. |
| Standalone — 12 layer kinds registry (state/kinds.ts) | 12 layer kinds, fully typed. 4/4 tests pass. Could be a shared registry. |
| Component | Why retire |
|---|---|
/workspace/projects/vibescope-build-plan/batch-3/ + batch-4/ + batch-5/ | Stale snapshots of the v1 build. All source has been moved to the FVS module. 100s of files, 0 value. |
/workspace/projects/vibescope-build-plan/canary/ | Stale canary from the very first commit. 0 value. |
/workspace/projects/vibescope-build-plan/deploy/, deploy-v2/, deploy-final/, dist-v2/, dist-v3-master-plan/, dist-v4-final/ | 8 stale deploy directories. None serve at the canonical URL. 0 value. |
/workspace/projects/vibescope-build-plan/module.json.patch.md | Patch notes for the original module.json. Now superseded by the actual module.json in the FVS module. |
/workspace/projects/vibescope-build-plan/audit/PACT-AUDIT-AND-BUILDER-SPEC.{html,md} | Pre-build audit. Now superseded by the post-build PACT-ALIGNMENT-AUDIT-V2.md. |
/workspace/projects/vibescope-build-plan/wave1-status/ | Wave-1 status (the cinematic proof). Outdated. |
pact/legacy/platform/vibescope/ (entire directory) | Legacy platform definition. Superseded by pact/workspaces/vibescope/. The fragment (Trace Atlas integration) is a parked spec, not a binding. |
Total: ~30+ files of stale build-plan / deploy / legacy content to retire. Per operator rule "WP sandbox on VPS — keep until user explicitly agrees to remove", these need operator sign-off before deletion.
| Component | Why rewrite |
|---|---|
| Standalone → add VSIL pipeline | Currently uses flat state. The operator wants VSIL support. Port parser.ts (641 LOC) + sceneGraph.ts (323 LOC) + evaluator.ts (684 LOC) — but adapted to React state, not a separate store. |
| Standalone → add Inspector (read-only) pattern | Currently has Properties (editor). Rename + enforce read-only invariant if matching FVS Inspector pattern is desired. |
| Standalone → add project container format (.vsil file picker + IndexedDB) | Missing in both trees. Add to standalone first (smaller scope), then port to FVS if needed. |
| FVS module → add Trace Atlas integration | Per legacy/platform/vibescope/vibescope.md, VibeScope pipelines should record lineage. Spec exists, no code. |
| FVS module → wire Render engine to CLI | render.cjs entry point missing. The Render engine is dormant. |
| Component | Integration path |
|---|---|
| VSIL pipeline (parser + sceneGraph + evaluator + assetRegistry + diff + keyframeExtractor + inspectorExtract) | Drop into avidtech6/freshvibe-cms/packages/runtime/ as a new package. Adapt to FvCMS's data layer. |
| CinemaProcedural + CinemaUltra engines | Wrap in a FvCMS adapter for the preview iframe. Use as-is for the document preview. |
| Render engine (CLI) | Drop into avidtech6/freshvibe-cms/packages/static-build/ for VSIL → PNG export. |
| Inspector 5 sub-modes (read-only pattern) | Re-implement as FvCMS cards. Keep the read-only invariant. |
| assetRegistry (VSIL-Image) | Drop into avidtech6/freshvibe-cms/packages/runtime/ as a utility for image resolution. |
Total LOC transferable: ~3,000-4,000 of 5,500 (60-70% of FVS module).
| Component | Integration path |
|---|---|
| Inspector (read-only) pattern | Adopt the read-only invariant in VibeCoder's existing inspector panels (if any). |
| Fragment registry pattern (single source of truth) | Adopt in VibeCoder's chip/panel registry. Currently VibeCoder has its own pattern. |
Total LOC transferable: ~50-200 of 5,500 (1-4% of FVS module).
| Component | Why dormant |
|---|---|
| VR/WebXR Engine (pact spec only, no source) | Parked direction. No consumer. |
| Collaboration Engine (no source) | Multi-user editing. No consumer. |
| Versioning Engine (no source) | VSIL git history browser. No consumer. |
| AI Engine (no source) | Natural-language → VSIL. No consumer. |
| # | Deliverable | Status | Location in this document |
|---|---|---|---|
| 1 | Complete inventory of all VibeScope systems | done | Phase 1 (§ 01) |
| 2 | List of functional components | done | § 9.1 (KEEP) — 12 components |
| 3 | List of dormant components | done | § 9.6 (DORMANT) — 4 engines |
| 4 | List of incomplete components | done | § 9.3 (REWRITE) — 5 components |
| 5 | List of deprecated components | done | § 9.2 (RETIRE) — 30+ files |
| 6 | List of components suitable for FreshVibe integration | done | § 9.4 — 5 components, 3,000-4,000 LOC |
| 7 | List of components requiring rewrite | done | § 9.3 — 5 components |
| 8 | List of components to retire permanently | done | § 9.2 — 30+ files (operator sign-off required) |
| 9 | Lineage map of VSIL and related engines | done | § 10.1 (below) |
| 10 | Constitutional compatibility report with Pact | done | § 8 — 11/12 (FVS), 0/9 (standalone) |
| + | Final recommendation for the future of VibeScope | done | § 11 (below) |
┌──────────────────────────────────────────────────────────────────┐
│ VSIL Pipeline │
│ │
│ VSILSource (text) │
│ │ │
│ ▼ (641 LOC) │
│ parser.ts │
│ │ produces AST (token tree) │
│ ▼ (323 LOC) │
│ sceneGraph.ts │
│ │ produces SceneGraph (parent/child/index tree) │
│ ├──────────────────────┐ │
│ ▼ ▼ │
│ (323 LOC) evaluator.ts (238 LOC) diff.ts │
│ │ (684 LOC) │ │
│ │ produces │ produces │
│ │ EngineRenderResult │ DiffResult │
│ │ │ │
│ ▼ ▼ │
│ (219 LOC) assetRegistry.ts (130 LOC) keyframeExtractor.ts │
│ │ resolves images │ extracts keyframes │
│ │ │ │
│ ▼ ▼ │
│ (271 LOC) inspectorExtract.ts │
│ │ produces InspectorSource │
│ ▼ │
│ 5 Inspector sub-modes (AST / Props / State / Logs / Metadata) │
│ │ READ-ONLY per inspector.md invariant │
│ ▼ │
│ 8 Card components (Editor / Visual / Timeline / Inspector / │
│ Docs / Replay / Diff / Tests) │
│ │ │
│ ▼ │
│ 3 Engines: CinemaProcedural (16ms) / CinemaUltra (33ms WebGL2) / │
│ Render (CLI PNG/JSON) │
└──────────────────────────────────────────────────────────────────┘
scrubber/types.ts (VSILSource + ScrubberAnchorState)
│
▼
scrubber/ScrubberAnchor.tsx (React Context, persistent)
│
▼
scrubber/ScrubberBar.tsx + scrubber/ScrubberControls.tsx + scrubber/useFrameAt.ts
│
▼
Consumed by 8 Cards (read frame state)
│
▼
Drives 3 Engines (frame at time T → render)
VSILSource
│
▼
parser.ts → AST
│
▼
sceneGraph.ts → SceneGraph
│
▼
inspectorExtract.ts → InspectorSource (5 fields: AST, Props, State, Logs, Metadata)
│
▼
inspector/index.ts (barrel, single registry)
│
├─→ ASTMode.tsx (87 LOC)
├─→ PropsMode.tsx (85 LOC)
├─→ StateMode.tsx (82 LOC)
├─→ LogsMode.tsx (136 LOC)
└─→ MetadataMode.tsx (64 LOC)
│
▼
Consumed by:
├─→ InspectorCard.tsx (Cinema layout, 4th card)
└─→ InspectorCardLevelRow.tsx (Backstage Panel card-level chip row)
Backstage Panel (parent)
│
├─→ Panel-level chip row (5 chips, Backstage-Panel)
│
└─→ Card-level chip row (InspectorCardLevelRow, 5 sub-modes)
│
└─→ Full Peek side-column (FullPeekSideColumn, up to 3 chips stacked)
│
└─→ Active Inspector sub-mode renders in main Peek area
main.tsx (3-column grid)
│
├─→ VibeScopeLeftCurtain
│ │
│ ▼
│ LayerPanel
│ ├─→ LayerToolbar (add-layer / snap / reset / delete)
│ └─→ LayerTree (LayerRow × N)
│
├─→ VibeScopeHomeSurface
│ │
│ ▼
│ Canvas
│ ├─→ SnapGrid (when snap enabled)
│ ├─→ LayerView × N (per layer, inline style)
│ └─→ Handles overlay (8 handles per selected layer)
│
└─→ VibeScopeRightCurtain
│
▼
PropertiesPanel (EDITOR, not read-only)
├─→ PropertyField × N (form fields)
├─→ Undo / Redo
└─→ Multi / Single mode
ALL driven by: state/store.ts (useReducer + StoreProvider, in-memory)
NO CONNECTION TO: VSIL pipeline, engines, Scrubber, Inspector, fragmentRegistry
The VibeScope system today exists in two incompatible shapes. The FVS module is production-grade and constitutional (11/12, only Trace Atlas missing). The standalone is a sovereign MVP with a clean 3-surface contract but no VSIL/engine/Scrubber/Inspector integration. The two share a 42-marker DOM contract but no shared source code.
avidtech6/freshvibe-cms/packages/runtime/. Write a FvCMS adapter for the Inspector pattern.avidtech6/freshvibe-cms/packages/static-build/ for VSIL → PNG export. Wire a CLI entry.Outcome: FvCMS owns VibeScope. FVS loses the module. Standalone is retired. ~4,000 LOC transferred cleanly.
Outcome: Standalone is the canonical VibeScope. FVS loses the module. The pact/v3/freshvibe-cockpit-constitution-vibescope.md is updated to point at the standalone.
Outcome: Fastest path to FvCMS having VSIL support. Both trees survive. FVS module keeps doing its job. Standalone lives for the sovereign app story.
Why A over B:
Why A over C:
But — Path A has a critical precondition: FvCMS must be ready to receive the VSIL pipeline. If FvCMS's runtime layer is unstable, A becomes a 3-month port instead of a 6-8 week port. Confirm with operator before committing.